zoukankan      html  css  js  c++  java
  • 使用inception v3做各种图像分类识别08-4

    上一篇博客(08-3)介绍了怎么获取inception v3模型数据,现在我们用下载好的模型进行简单的图片分类实验。

    # -*- coding: UTF-8 -*-
    
    import tensorflow as tf
    import os
    import numpy as np
    import re
    from PIL import Image
    import matplotlib.pyplot as plt
    
    class NodeLookup(object):
        def __init__(self):
            label_lookup_path='inception_model/imagenet_2012_challenge_label_map_proto.pbtxt'
            uid_lookup_path='inception_model/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):
            #加载分类字符串n************对应分类名称的文件
            proto_as_ascii_lines=tf.gfile.GFile(uid_lookup_path).readlines()
            uid_to_human={}
            #一行一行读取数据
            for line in proto_as_ascii_lines:
                #去掉换行符
                line=line.strip('
    ')
                #按照‘	’分割
                parsed_items=line.split('	')
                #获取分类编号
                uid=parsed_items[0]
                #获取分类名称
                human_string=parsed_items[1]
                #保存编号字符串n********与分类名称的映射关系
                uid_to_human[uid]=human_string
            #加载分类字符串n**********对应分类编号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*******映射关系
                    node_id_to_uid[target_class]=target_class_string[2:-2]
            #建立分类编号1-1000对应分类名称的映射关系
            node_id_to_name={}
            for key,val in node_id_to_uid.items():
                #获取分类名称
                name=uid_to_human[val]
                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]
    
    #创建一个图来放google训练好的模型
    with tf.gfile.FastGFile('inception_model/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('images/'):
            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=np.squeeze(predictions) #把结果转换为1维数据
    
                #打印图片路径及名称
                print()
                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))
    View Code

    在同目录下添加images文件夹,下面放在网上找的图片(图片格式均为jpg)

    实现结果如下:

  • 相关阅读:
    Max History CodeForces
    Buy a Ticket CodeForces
    AC日记——字符串的展开 openjudge 1.7 35
    AC日记——回文子串 openjudge 1.7 34
    AC日记——判断字符串是否为回文 openjudge 1.7 33
    AC日记——行程长度编码 openjudge 1.7 32
    AC日记——字符串P型编码 openjudge 1.7 31
    AC日记——字符环 openjudge 1.7 30
    AC日记——ISBN号码 openjudge 1.7 29
    AC日记——单词倒排 1.7 28
  • 原文地址:https://www.cnblogs.com/spore/p/12822012.html
Copyright © 2011-2022 走看看