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)

    实现结果如下:

  • 相关阅读:
    (转)typedef用法
    (转)在用户空间发生中断时,上下文切换的过程
    (转)内核中断,异常,抢占总结篇
    (转)中断上下文和进程上下文的区别
    (转)C中的volatile用法
    (转)gcc学习笔记
    (转)C系程序员面试必知必会之大端小端
    (转)我在北京工作这几年 – 一个软件工程师的反省
    (转)忠告
    Linux下VLAN功能的实现 (转)
  • 原文地址:https://www.cnblogs.com/spore/p/12822012.html
Copyright © 2011-2022 走看看