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. 类里边的构造函数可以被private修饰,在类的内部创建对象。利用这种特性创建单类模式

  2. Java 开发手册之编程规约

    一.编程规约 (一) 命名规约 1.[强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束.(代码规范,易读) 反例: name / __name / $Object / n ...

  3. 启动tomcat7w.exe提示"指定的服务未安装"

    说下本人的情况:因为重装系统,安装在C盘的tomcat的失去作用.想要启动tomcat7w.exe(这是管理服务的)出现“指定服务未安装,无法打开tomcat7服务”的提示.原因是重装系统也导致之前安 ...

  4. GDI与OpenGL与DirectX之间的区别

    图形编程的几种技术对比: GDI,图形设备接口,MS开发的通用的windows系统图形编程接口,功能强涉及面广,一般的编程都用它.但是用来做多媒体开发就差强人意了 OPENGL是SGI开发的一套三维图 ...

  5. C# 程序部署、调试时间长的解决办法

    最近在做数控折弯机项目时,VS2008环境下采用C#..NET Compact Framework开发WinCE.Windows Mobile程序时,编译项目非常慢,看着进度条慢慢刷,有时候需要几分钟 ...

  6. Linux 自定义总线类型

    #include <linux/module.h> #include <linux/init.h> #include <linux/device.h> // 按照 ...

  7. VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法

    1.首先,要用#import语句来引用支持ADO的组件类型库(*.tlb),其中类型库可以作为可执行程序 (DLL.EXE等)的一部分被定位在其自身程序中的附属资源里,如:被定位在msado15.dl ...

  8. ODBC、OLEDB、ADO、SQL的关系

    对于一个刚接触数据库的菜鸟来说(比如我),总是搞不清SQL.ADO.OLE DB.ODBC,大脑中一片混乱,好像懂了,又好像没懂,非常的苦恼,今天下了点功夫研究了一下,贴出来,其中肯定有好多错误,希望 ...

  9. 低成本FPGA中实现动态相位调整

    在FPGA中,动态相位调整(DPA)主要是实现LVDS接口接收时对时钟和数据通道的相位补偿,以达到正确接收的目的.ALTERA的高端FPGA,如STRATIX(r) 系列中自带有DPA电路,但低端的F ...

  10. RHEL6.2配置从零开始

    RHEL6.2最小化安装并配置,持续更新中... 1.RHEL6.2最小化安装 RHEL6.2默认安装许多用不到的软件,不仅浪费空间.增大系统开销,还会显得凌乱.所以选择最小化安装.  注意:安装步骤 ...