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. InpOut32 InputTest.cpp hacking

    /************************************************************************************ * InpOut32 Inp ...

  2. JDBC 4 PreparedStatement 与Statement 的区别

    1  有安全性 PreparedStatement 可以由于不是使用拼接,防止了sql注入,提高了安全性. 2  更方便 PreparedStatement 可以自动对类型进行转换,代码可读性,可维护 ...

  3. 【java规则引擎】drools6.5.0版本api简介

    在有些术语使用的时候,我有时候会用KIE项目.KIE引擎或者Drools项目.Drools引擎,大家应该理解KIE是Drools等项目的一个统称,所以在大多数情况下KIE或者特指Drools都是差不多 ...

  4. jquery移除、绑定、触发元素事件

    unbind(type [,data]) //data是要移除的函数 $('#btn').unbind("click"); //移除click $('#btn').unbind() ...

  5. 真正明白c语言二级指针

    指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也经常用到:比如说对于字符串的处理,函数参数的“值,结果传递”等,对于二级指针或者多级指针,我想理解起来也是比较容易的,比如二级指针就是指向指针的 ...

  6. C#防止程序多次运行

    经过我的测试,还比较好用,但是有个问题,如果不注销,用另一个用户进入,则程序不能判断出已运行.所以只限于用在单用户环境,还是不太完美. class Program { [STAThread] stat ...

  7. php 两种或的区别 or ||

    php 两种或的区别 or || 实验代码. <?php $p = 999 or 1; var_dump($p); $q = 999 | 1; var_dump($q);

  8. 关于AutoCommit

    AutoCommit设置为true(大多数JDBCdrive的默认配置),则每次执行的SQL语句执行完成后都会落实到数据库中:如果想要在跨语句事务,则需要添加Begin Transiction,Com ...

  9. Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 1) C. Bear and Drawing

    题目链接:http://codeforces.com/contest/573/problem/C题目大意:在两行无限长的点列上面画n个点以及n-1条边使得构成一棵树,并且要求边都在同一平面上且除了节点 ...

  10. spring mvc加了@produces注解后报406

    问题背景:调用http的post接口返回一个String类型的字符串时中文出现乱码,定位出问题后在@RequestMapping里加produces注解produces = "applica ...