import os
import tensorflow as tf
import numpy as np
import re

from PIL import Image
import matplotlib.pyplot as plt

print("hello")

class NodeLookup(object):
def __init__(self):
label_lookup_path = "F:\Tensorflow Project\inception-2015-12-05\imagenet_2012_challenge_label_map_proto.pbtxt"
uid_lookup_path="F:\Tensorflow Project\inception-2015-12-05\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):
  #加载分类字符串
  proto_as_ascii_lines = tf.gfile.GFile(uid_lookup_path).readlines()
  uid_to_human = {}
  #读取数据
  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]
    #保存编号
    uid_to_human[uid] = human_string

    #加载分类字符串
    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:'):
    #获取分类编号
    #target_class = int(line.split(': ')[1])
    target_class = int(line.split(': ')[1])
    if line.startswith(' target_class_string:'):
      #获取编号字符串
      target_class_string = line.split(': ')[1]
      #保存分类编号
      node_id_to_uid[target_class] = target_class_string[1:-2]

    #建立分类编号
    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

  #传入分类器编号返回分类名称
  def id_to_string(self,node_id):
    if node_id not in self.node_lookup:
      return ''
    return self.node_lookup[node_id]

#创建一个图用来存储训练好的模型
with tf.gfile.FastGFile('F:\Tensorflow Project\inception-2015-12-05\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('F:\Tensorflow Project\images0815'):
    for file in files:
      #Tensorflow载入图片
      image_data = tf.gfile.FastGFile(os.path.join(root,file),'rb').read()
      #执行函数,传入jpg格式图片计算并得到结果
      predictions = sess.run(softmax_tensor,{'DecodeJpeg/contents:0':image_data})
      #把得到的结果转成一维
      predictions = np.squeeze(predictions)

      #打印图片路径及名称
      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()

运行效果

Tensorflow学习(练习)—使用inception做图像识别的更多相关文章

  1. TensorFlow学习笔记(四)图像识别与卷积神经网络

    一.卷积神经网络简介 卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现. ...

  2. TensorFlow学习路径【转】

    作者:黄璞链接:https://www.zhihu.com/question/41667903/answer/109611087来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  3. TensorFlow学习线路

    如何高效的学习 TensorFlow 代码? 或者如何掌握TensorFlow,应用到任何领域? 作者:黄璞链接:https://www.zhihu.com/question/41667903/ans ...

  4. tensorflow学习笔记——自编码器及多层感知器

    1,自编码器简介 传统机器学习任务很大程度上依赖于好的特征工程,比如对数值型,日期时间型,种类型等特征的提取.特征工程往往是非常耗时耗力的,在图像,语音和视频中提取到有效的特征就更难了,工程师必须在这 ...

  5. TensorFlow学习笔记——LeNet-5(训练自己的数据集)

    在之前的TensorFlow学习笔记——图像识别与卷积神经网络(链接:请点击我)中了解了一下经典的卷积神经网络模型LeNet模型.那其实之前学习了别人的代码实现了LeNet网络对MNIST数据集的训练 ...

  6. tensorflow学习笔记——VGGNet

    2014年,牛津大学计算机视觉组(Visual Geometry Group)和 Google DeepMind 公司的研究员一起研发了新的深度卷积神经网络:VGGNet ,并取得了ILSVRC201 ...

  7. 用tensorflow学习贝叶斯个性化排序(BPR)

    在贝叶斯个性化排序(BPR)算法小结中,我们对贝叶斯个性化排序(Bayesian Personalized Ranking, 以下简称BPR)的原理做了讨论,本文我们将从实践的角度来使用BPR做一个简 ...

  8. TensorFlow学习笔记之--[compute_gradients和apply_gradients原理浅析]

    I optimizer.minimize(loss, var_list) 我们都知道,TensorFlow为我们提供了丰富的优化函数,例如GradientDescentOptimizer.这个方法会自 ...

  9. 深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识

    深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识 在tf第一个例子的时候需要很多预备知识. tf基本知识 香农熵 交叉熵代价函数cross-entropy 卷积神经网络 s ...

随机推荐

  1. 前端之JavaScript 03

    window对象 所有浏览器都支持 window 对象.概念上讲.一个html文档对应一个window对象.功能上讲: 控制浏览器窗口的.使用上讲: window对象不需要创建对象,直接使用即可. W ...

  2. 深入学习Heritrix---解析Frontier(链接工厂)(转)

    深入学习Heritrix---解析Frontier(链接工厂) Frontier是Heritrix最核心的组成部分之一,也是最复杂的组成部分.它主要功能是为处理链接的线程提供URL,并负责链接处理完成 ...

  3. 拦截器springmvc防止表单重复提交【2】

    [参考博客:http://my.oschina.net/mushui/blog/143397] 原理:在新建页面中Session保存token随机码,当保存时验证,通过后删除,当再次点击保存时由于服务 ...

  4. CS与BS区别

    简介:CS即Client/Server(客户机/服务器)结构,C/S结构在技术上很成熟,它的主要特点是交互性强.具有安全的存取模式.网络通信量低.响应速度快.利于处理大量数据.但是该结构的程序是针对性 ...

  5. 关于 self = [super init];

    [plain] view plaincopyprint? - (id)init { self = [super init]; // Call a designated initializer here ...

  6. 中 varStatus的属性简介

    varStatus是<c:forEach>jstl循环标签的一个属性,varStatus属性.就拿varStatus="status"来说,事实上定义了一个status ...

  7. 剑指offer-第六章面试中的各项能力(不用加减乘除做加法)

    //不用加减乘除四则运算,来做加法 //题目:两个数做加法. //思路:用二进制的位运算的思路.第一步:首先两数相加考虑进位.可以用异或. //第二步:两个数相加只考虑进位,并将最后的结果左移.第三步 ...

  8. C# 报警 控制蜂鸣器发声

    在C#中可以通过以下四种方式来实现蜂鸣或者报警,播放声音之类的功能.XP下对蜂鸣有用,win7下请接上扬声器. 1). Beep的报警实现 [c-sharp] view plaincopy     / ...

  9. 转:django在生成数据库时常常遇到的问题

    真的很有用! http://blog.csdn.net/pipisorry/article/details/45727309

  10. HttpModule和HttpHandler -- 系列文章

    ASP.NET 生命周期 在ASP.Net2.0中使用UrlRewritingNet实现链接重写 IHttpModule实现URL重写 使用IHttpHandler防盗链 HttpModule,Htt ...