Tensorflow 利用 Inception(v3) 模型進行圖像識別

關(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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末好啰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子儿奶,更是在濱河造成了極大的恐慌框往,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闯捎,死亡現(xiàn)場離奇詭異椰弊,居然都是意外死亡,警方通過查閱死者的電腦和手機隙券,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門男应,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人娱仔,你說我怎么就攤上這事∮巫” “怎么了牲迫?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長借卧。 經(jīng)常有香客問我盹憎,道長,這世上最難降的妖魔是什么铐刘? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任陪每,我火速辦了婚禮,結(jié)果婚禮上镰吵,老公的妹妹穿的比我還像新娘檩禾。我一直安慰自己,他們只是感情好疤祭,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布盼产。 她就那樣靜靜地躺著,像睡著了一般勺馆。 火紅的嫁衣襯著肌膚如雪戏售。 梳的紋絲不亂的頭發(fā)上侨核,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音灌灾,去河邊找鬼搓译。 笑死,一個胖子當(dāng)著我的面吹牛锋喜,可吹牛的內(nèi)容都是我干的侥衬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼跑芳,長吁一口氣:“原來是場噩夢啊……” “哼轴总!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起博个,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤怀樟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后盆佣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體往堡,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年共耍,在試婚紗的時候發(fā)現(xiàn)自己被綠了虑灰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡痹兜,死狀恐怖穆咐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情字旭,我是刑警寧澤对湃,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站遗淳,受9級特大地震影響拍柒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜屈暗,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一拆讯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧养叛,春花似錦种呐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至潘飘,卻和暖如春肮之,著一層夾襖步出監(jiān)牢的瞬間掉缺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工戈擒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留眶明,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓筐高,卻偏偏與公主長得像搜囱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子柑土,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容