關(guān)于此案例的教程辛掠,網(wǎng)上不勝枚舉宿崭,但是都沒有一個很完整的代碼和結(jié)果演示。這里髓削,小編將所有代碼 擼一遍竹挡,想學(xué)習(xí)的伙伴們要仔細(xì)看!
模型背景:
Inception(v3) 模型是Google 訓(xùn)練好的最新一個圖像識別模型立膛,我們可以利用它來對我們的圖像進行識別揪罕。
下載地址:
https://storage.googleapis.com/download.tensorflow.org/models/inception_dec_2015.zip
文件描述:
- classify_image_graph_def.pb 文件就是訓(xùn)練好的Inception-v3模型。
- imagenet_synset_to_human_label_map.txt是類別文件宝泵。
語言環(huán)境:
- python 3.6
- Tensorflow 1.8
功能描述:
能夠識別我們在網(wǎng)上找的一些阿貓阿狗鸚鵡兔子老虎飛機等一些圖片
文件結(jié)構(gòu):
image
代碼實現(xiàn):
#!/usr/bin/env python
# _*_coding:utf-8 _*_
import matplotlib.pyplot as plt
import tensorflow as tf
import os
import numpy as np
from PIL import Image
__title__ = ''
__author__ = "wenyali"
__mtime__ = "2018/6/7"
class NodeLookup(object):
def __init__(self,label_lookup_path=None,uid_lookup_path=None):
if not label_lookup_path:
label_lookup_path = os.path.join(
model_dir, 'imagenet_2012_challenge_label_map_proto.pbtxt')
if not uid_lookup_path:
uid_lookup_path = os.path.join(
model_dir, 'imagenet_synset_to_human_label_map.txt')
self.node_lookup = self.load(label_lookup_path, uid_lookup_path)
def load(self, label_lookup_path, uid_lookup_path):
if not tf.gfile.Exists(uid_lookup_path):
tf.logging.fatal('File does not exist %s', uid_lookup_path)
if not tf.gfile.Exists(label_lookup_path):
tf.logging.fatal('File does not exist %s', label_lookup_path)
# 加載分類字符串n********對應(yīng)分類名稱的文件
proto_as_ascii_lines = tf.gfile.GFile(uid_lookup_path).readlines()
uid_to_human = {}
#一行一行讀取數(shù)據(jù)
for line in proto_as_ascii_lines :
#去掉換行符
line=line.strip('\n')
#按照'\t'分割
parsed_items = line.split('\t')
#獲取分類編號
uid = parsed_items[0]
#獲取分類名稱
human_string = parsed_items[1]
#保存編號字符串n********與分類名稱映射關(guān)系
uid_to_human[uid] = human_string
# 加載分類字符串n********對應(yīng)分類編號1-1000的文件
proto_as_ascii = tf.gfile.GFile(label_lookup_path).readlines()
node_id_to_uid = {}
for line in proto_as_ascii:
if line.startswith(' target_class:'):
#獲取分類編號1-1000
target_class = int(line.split(': ')[1])
if line.startswith(' target_class_string:'):
#獲取編號字符串n********
target_class_string = line.split(': ')[1]
#保存分類編號1-1000與編號字符串n********映射關(guān)系
node_id_to_uid[target_class] = target_class_string[1:-2] # 去掉首尾的雙引號
#建立分類編號1-1000對應(yīng)分類名稱的映射關(guān)系
node_id_to_name = {}
for key, val in node_id_to_uid.items():
#獲取分類名稱
name = uid_to_human[val]
#建立分類編號1-1000到分類名稱的映射關(guān)系
node_id_to_name[key] = name
return node_id_to_name
#傳入分類編號1-1000返回分類名稱
def id_to_string(self, node_id):
if node_id not in self.node_lookup:
return ''
return self.node_lookup[node_id]
model_dir = "./inception-2015-12-05"
with tf.gfile.FastGFile(os.path.join(model_dir,
'classify_image_graph_def.pb'), 'rb') as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
tf.import_graph_def(graph_def, name='')
with tf.Session() as sess:
softmax_tensor = sess.graph.get_tensor_by_name('softmax:0')
#遍歷目錄
for root,dirs,files in os.walk('image/'):
for file in files:
#載入圖片
image_data = tf.gfile.FastGFile(os.path.join(root,file), 'rb').read()
predictions = sess.run(softmax_tensor,{'DecodeJpeg/contents:0': image_data})#圖片格式是jpg格式
#predictions = sess.run(softmax_tensor,{'DecodeGif/contents:0': image_data})#圖片格式是jpg格式
predictions = np.squeeze(predictions)#把結(jié)果轉(zhuǎn)為1維數(shù)據(jù)
#打印圖片路徑及名稱
image_path = os.path.join(root,file)
print(image_path)
#顯示圖片
img=Image.open(image_path)
plt.imshow(img)
plt.axis('off')
plt.show()
#排序
top_k = predictions.argsort()[-5:][::-1]
node_lookup = NodeLookup()
for node_id in top_k:
#獲取分類名稱
human_string = node_lookup.id_to_string(node_id)
#獲取該分類的置信度
score = predictions[node_id]
print('%s (score = %.5f)' % (human_string, score))
print()
項目結(jié)果:
image/cat.png
tiger cat (score = 0.31934)
Egyptian cat (score = 0.31811)
tabby, tabby cat (score = 0.22258)
lynx, catamount (score = 0.02150)
Persian cat (score = 0.00604)
image/cat_fish.png
tabby, tabby cat (score = 0.24471)
cup (score = 0.23318)
water jug (score = 0.09043)
tiger cat (score = 0.07697)
goblet (score = 0.06291)
image/dog1.jpg
golden retriever (score = 0.41099)
tennis ball (score = 0.06002)
Pembroke, Pembroke Welsh corgi (score = 0.05309)
Border collie (score = 0.04154)
Brittany spaniel (score = 0.02695)
image/dog2.jpg
Pomeranian (score = 0.88244)
Pekinese, Pekingese, Peke (score = 0.01942)
toy poodle (score = 0.00269)
Maltese dog, Maltese terrier, Maltese (score = 0.00233)
Samoyed, Samoyede (score = 0.00211)
image/girl.jpg
suit, suit of clothes (score = 0.45349)
jean, blue jean, denim (score = 0.18616)
miniskirt, mini (score = 0.10581)
trench coat (score = 0.03698)
fur coat (score = 0.01893)
image