树莓派3B使用tensorflow的classify_image进行物体识别
来源:互联网 发布:c语言实现快速排序 编辑:程序博客网 时间:2024/06/06 14:18
硬件:树莓派3B
软件环境:
1.python3.4
2.tensorflow-1.1.0-cp34-cp34m-linux_armv7l.whl
安装呢,其实网上特别多教程,这里我是使用安装包方式安装的,指令如下:
sudo
pip
install
tensorflow-1.1.0-cp34-cp34m-linux_armv7l.whl
这里重点讲一下使用,网上教程都是如下图所示安装完就可以使用了,但是我安装了好几次,都没有models文件夹,也就是没有classify_image这个文件,所以郁闷了好几天,重装数次都没有,windows和树莓派下面都没有
然后就是在GitHub上面寻找一些线索吧,链接:https://github.com/tensorflow/
然后发现了梦寐以求的models,如下图
将models下载下来,真的有classify_image这个文件,哈哈,开心一会
然后将这个文件拷贝到 /usr/local/lib/python3.4/dist-packages/tensorflow
然后解压缩文件,如下图,就有了classify_image
有了这个,咱们就可以像其他小伙伴一样进行图片识别了,我们来测试一下
在home下新建文件夹tensorflow-related,里面放入一个测试照片,如下图:
下面开始测试图片识别指令了,
进入到classify_image的目录
cd /usr/local/lib/python3.4/dist-packages/tensorflow/models-master/tutorials/image/imagenet
再输入:python3.4 classify_image.py --model_dir /home/pi/tensorflow-related/model --image_file /home/pi/tensorflow-related/panda.jpg
这样就可以识别到图片是panda了,概率0.87.就可以基本确定了,是吧
其实我们再看下tensorflow-related 这个文件夹,如下图
咦,居然多了个文件夹啊
看下文件夹里面,下载了识别模型图库 inception-2015-12-05.tgz,并解压缩了
贴出来classify_image.py的源码
# Copyright 2015 The TensorFlow Authors. All Rights Reserved.## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.# =============================================================================="""Simple image classification with Inception.Run image classification with Inception trained on ImageNet 2012 Challenge dataset.This program creates a graph from a saved GraphDef protocol buffer,and runs inference on an input JPEG image. It outputs human readablestrings of the top 5 predictions along with their probabilities.Change the --image_file argument to any jpg image to compute aclassification of that image.Please see the tutorial and website for a detailed description of howto use this script to perform image recognition.https://tensorflow.org/tutorials/image_recognition/"""from __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_functionimport argparseimport os.pathimport reimport sysimport tarfileimport numpy as npfrom six.moves import urllibimport tensorflow as tfFLAGS = None# pylint: disable=line-too-longDATA_URL = 'http://download.tensorflow.org/models/image/imagenet/inception-2015-12-05.tgz'# pylint: enable=line-too-longclass NodeLookup(object): """Converts integer node ID's to human readable labels.""" def __init__(self, label_lookup_path=None, uid_lookup_path=None): if not label_lookup_path: label_lookup_path = os.path.join( FLAGS.model_dir, 'imagenet_2012_challenge_label_map_proto.pbtxt') if not uid_lookup_path: uid_lookup_path = os.path.join( FLAGS.model_dir, '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): """Loads a human readable English name for each softmax node. Args: label_lookup_path: string UID to integer node ID. uid_lookup_path: string UID to human-readable string. Returns: dict from integer node ID to human-readable string. """ if not tf.gfile.Exists(uid_lookup_path): tf.logging.fatal('File does not exist %s', uid_lookup_path) if not tf.gfile.Exists(label_lookup_path): tf.logging.fatal('File does not exist %s', label_lookup_path) # Loads mapping from string UID to human-readable string proto_as_ascii_lines = tf.gfile.GFile(uid_lookup_path).readlines() uid_to_human = {} p = re.compile(r'[n\d]*[ \S,]*') for line in proto_as_ascii_lines: parsed_items = p.findall(line) uid = parsed_items[0] human_string = parsed_items[2] uid_to_human[uid] = human_string # Loads mapping from string UID to integer node ID. node_id_to_uid = {} proto_as_ascii = tf.gfile.GFile(label_lookup_path).readlines() for line in proto_as_ascii: if line.startswith(' target_class:'): 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] # Loads the final mapping of integer node ID to human-readable string node_id_to_name = {} for key, val in node_id_to_uid.items(): if val not in uid_to_human: tf.logging.fatal('Failed to locate: %s', val) 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]def create_graph(): """Creates a graph from saved GraphDef file and returns a saver.""" # Creates graph from saved graph_def.pb. with tf.gfile.FastGFile(os.path.join( FLAGS.model_dir, 'classify_image_graph_def.pb'), 'rb') as f: graph_def = tf.GraphDef() graph_def.ParseFromString(f.read()) _ = tf.import_graph_def(graph_def, name='')def run_inference_on_image(image): """Runs inference on an image. Args: image: Image file name. Returns: Nothing """ if not tf.gfile.Exists(image): tf.logging.fatal('File does not exist %s', image) image_data = tf.gfile.FastGFile(image, 'rb').read() # Creates graph from saved GraphDef. create_graph() with tf.Session() as sess: # Some useful tensors: # 'softmax:0': A tensor containing the normalized prediction across # 1000 labels. # 'pool_3:0': A tensor containing the next-to-last layer containing 2048 # float description of the image. # 'DecodeJpeg/contents:0': A tensor containing a string providing JPEG # encoding of the image. # Runs the softmax tensor by feeding the image_data as input to the graph. softmax_tensor = sess.graph.get_tensor_by_name('softmax:0') predictions = sess.run(softmax_tensor, {'DecodeJpeg/contents:0': image_data}) predictions = np.squeeze(predictions) # Creates node ID --> English string lookup. node_lookup = NodeLookup() top_k = predictions.argsort()[-FLAGS.num_top_predictions:][::-1] 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))def maybe_download_and_extract(): """Download and extract model tar file.""" dest_directory = FLAGS.model_dir if not os.path.exists(dest_directory): os.makedirs(dest_directory) filename = DATA_URL.split('/')[-1] filepath = os.path.join(dest_directory, filename) if not os.path.exists(filepath): def _progress(count, block_size, total_size): sys.stdout.write('\r>> Downloading %s %.1f%%' % ( filename, float(count * block_size) / float(total_size) * 100.0)) sys.stdout.flush() filepath, _ = urllib.request.urlretrieve(DATA_URL, filepath, _progress) print() statinfo = os.stat(filepath) print('Successfully downloaded', filename, statinfo.st_size, 'bytes.') tarfile.open(filepath, 'r:gz').extractall(dest_directory)def main(_): maybe_download_and_extract() image = (FLAGS.image_file if FLAGS.image_file else os.path.join(FLAGS.model_dir, 'cropped_panda.jpg')) run_inference_on_image(image)if __name__ == '__main__': parser = argparse.ArgumentParser() # classify_image_graph_def.pb: # Binary representation of the GraphDef protocol buffer. # imagenet_synset_to_human_label_map.txt: # Map from synset ID to a human readable string. # imagenet_2012_challenge_label_map_proto.pbtxt: # Text representation of a protocol buffer mapping a label to synset ID. parser.add_argument( '--model_dir', type=str, default='/tmp/imagenet', help="""\ Path to classify_image_graph_def.pb, imagenet_synset_to_human_label_map.txt, and imagenet_2012_challenge_label_map_proto.pbtxt.\ """ ) parser.add_argument( '--image_file', type=str, default='', help='Absolute path to image file.' ) parser.add_argument( '--num_top_predictions', type=int, default=5, help='Display this many predictions.' ) FLAGS, unparsed = parser.parse_known_args() tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)
- 树莓派3B使用tensorflow的classify_image进行物体识别
- 64位win7 使用tensorflow的classify_image进行物体识别
- 使用tensorflow object detection API 进行物体识别
- 使用TensorFlow识别照片中的物体
- 使用Caffe基于cifar10进行物体识别
- 使用Tensorflow物体识别API抠出视频中的猪
- TensorFlow on Android:物体识别
- Tensorflow中的物体识别API的demo实现
- 使用TensorFlow Object Detection API进行图像物体检测
- 使用TensorFlow在Android上进行物体检测
- 在Hololens中使用Vuforia 进行物体识别入门
- 深度学习笔记——TensorFlow学习笔记(三)使用TensorFlow实现的神经网络进行MNIST手写体数字识别
- 3D物体识别的假设检验
- 物体的形状识别
- 使用tensorflow对Mnist数据集进行字体识别
- tensorflow 使用CNN 进行mnist数据集识别
- 使用Tensorflow实现CNN进行MNIST数字识别
- 使用深度学习TensorFlow框架进行图片识别
- linux中进程命令
- BigDecimal-精确表示货币值2
- NAT模式下,虚拟机与主机不能互通
- ava中List、Array、Map、Set等集合相互转换的最佳方法
- oracle
- 树莓派3B使用tensorflow的classify_image进行物体识别
- Hibernate环境的搭建
- XML和HTML的不同点
- C语言--基本数据类型
- 通讯录.静态
- 不同系统之间的文件传输
- 7月22日总结的自己在java中犯的错误以及注意事项
- 文章标题
- [源码分析]-socket的创建