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. 51nod 1085 背包问题

    在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数).求背包能够容纳的最大价值. 收起   输入 第1行,2个 ...

  2. js中typeof用法详细介绍

    typeof 运算符把类型信息当作字符串返回,包括有大家常有变量类型.   typeof 运算符把类型信息当作字符串返回.typeof 返回值有六种可能: "number," &q ...

  3. 手把手教你在Eclipse中使用CVS Branch功能

    Brach 的作用: 开发新版本的人员就基于 main trunk 工作,而 fix bug 的人员就基于 branch 工作. 一旦在 branch上将 Release_1_0的 bug修复了,我们 ...

  4. The type javax.xml.rpc.ServiceException cannot be resolved.It is indirectly

    The type javax.xml.rpc.ServiceException cannot be resolved.It is indirectly 博客分类: 解决方案_Java   问题描述:T ...

  5. Android开发SQLite数据库的创建

    package com.example.db; import android.content.Context; import android.database.sqlite.SQLiteDatabas ...

  6. 对于global的介绍

    抄自http://veniceweb.googlecode.com/svn/trunk/public/daily_tech_doc/erlang_global_20091109.txt 1. 介绍:这 ...

  7. 让你的 Nginx 的 RTMP 直播具有统计某频道在线观看用户数量的功能

    你的 Nginx 已经有了 RTMP 直播功能的话,如果你还想统计某直播频道当前观看用户量的话,可以加入 with-http_xslt_module 模块.具体步骤如下:        1.查看原来的 ...

  8. 【转】JMeter中使用Selenium进行测试

    JMeter是使用非常广泛的性能测试工具,而Selenium是ThroughtWorks 公司一个强大的开源Web 功能测试工具.Jmeter和Selenium结合使用,就可以实现对网站页面的自动化性 ...

  9. 如何成为java架构师(转载)

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

  10. Patator-一款很好用的爆破工具

    项目地址:https://github.com/lanjelot/patator 打开文件夹 运行一下文件查看帮助 python patator.py --help 这里有很多的爆破选项,就不一一截图 ...