TensorFlow:Object_Detection_API在Windows10上的配置

2023-05-16

安装
假设已配置完tensorflow,并安装好Anaconda3-4.2.0(此版本为python3.5)

从github下载models
tensorflow/models

Protobuf 编译
protobuf下载
我下载的版本是protoc-3.3.0-win32.zip,解压后将bin文件夹中的【protoc.exe】放到C:\Windows
在models目录下shift+右键打开Powershell窗口,输入:

# From tensorflow/models/
protoc object_detection/protos/*.proto --python_out=.

不报错即可


测试
由于电脑中同时有Anaconda2与Anaconda3,在models目录下输入

jupyter-notebook

进入object_detetion中打开【object_detection_tutorial.ipynb】,无法运行,此时的kernel是python2,而windows只有python3.5的tensorflow。如果你的电脑只有python3.5,那么直接run all就可以看到结果。或者将Anaconda3的jupyter-notebook的工作空间变换到models目录下。
这里我用了另一种方法:
新建一个【object_detection_tutorial.py】,将.ipynb中的代码复制到.py中,然后在spyder中运行。以下是代码。功能是取object_detection\test_images中的图片:image1和image2,做目标检测。

import numpy as np
import os
import six.moves.urllib as urllib
import sys
import tarfile
import tensorflow as tf
import zipfile

from collections import defaultdict
from io import StringIO
from matplotlib import pyplot as plt
from PIL import Image

## This is needed to display the images.
#%matplotlib inline

# This is needed since the notebook is stored in the object_detection folder.
sys.path.append("..")

from utils import label_map_util

from utils import visualization_utils as vis_util

# What model to download.
MODEL_NAME = 'ssd_mobilenet_v1_coco_11_06_2017'
MODEL_FILE = MODEL_NAME + '.tar.gz'
DOWNLOAD_BASE = 'http://download.tensorflow.org/models/object_detection/'

# Path to frozen detection graph. This is the actual model that is used for the object detection.
PATH_TO_CKPT = MODEL_NAME + '/frozen_inference_graph.pb'

# List of the strings that is used to add correct label for each box.
PATH_TO_LABELS = os.path.join('data', 'mscoco_label_map.pbtxt')

NUM_CLASSES = 90

#download model
opener = urllib.request.URLopener()
#下载模型,如果已经下载好了下面这句代码可以注释掉
opener.retrieve(DOWNLOAD_BASE + MODEL_FILE, MODEL_FILE)
tar_file = tarfile.open(MODEL_FILE)
for file in tar_file.getmembers():
  file_name = os.path.basename(file.name)
  if 'frozen_inference_graph.pb' in file_name:
    tar_file.extract(file, os.getcwd())

#Load a (frozen) Tensorflow model into memory.    
detection_graph = tf.Graph()
with detection_graph.as_default():
  od_graph_def = tf.GraphDef()
  with tf.gfile.GFile(PATH_TO_CKPT, 'rb') as fid:
    serialized_graph = fid.read()
    od_graph_def.ParseFromString(serialized_graph)
    tf.import_graph_def(od_graph_def, name='')
#Loading label map    
label_map = label_map_util.load_labelmap(PATH_TO_LABELS)
categories = label_map_util.convert_label_map_to_categories(label_map, max_num_classes=NUM_CLASSES, use_display_name=True)
category_index = label_map_util.create_category_index(categories)
#Helper code
def load_image_into_numpy_array(image):
  (im_width, im_height) = image.size
  return np.array(image.getdata()).reshape(
      (im_height, im_width, 3)).astype(np.uint8)


# For the sake of simplicity we will use only 2 images:
# image1.jpg
# image2.jpg
# If you want to test the code with your images, just add path to the images to the TEST_IMAGE_PATHS.
PATH_TO_TEST_IMAGES_DIR = 'test_images'
TEST_IMAGE_PATHS = [ os.path.join(PATH_TO_TEST_IMAGES_DIR, 'image{}.jpg'.format(i)) for i in range(1, 3) ]

# Size, in inches, of the output images.
IMAGE_SIZE = (12, 8)

with detection_graph.as_default():
  with tf.Session(graph=detection_graph) as sess:
    for image_path in TEST_IMAGE_PATHS:
      image = Image.open(image_path)
      # the array based representation of the image will be used later in order to prepare the
      # result image with boxes and labels on it.
      image_np = load_image_into_numpy_array(image)
      # Expand dimensions since the model expects images to have shape: [1, None, None, 3]
      image_np_expanded = np.expand_dims(image_np, axis=0)
      image_tensor = detection_graph.get_tensor_by_name('image_tensor:0')
      # Each box represents a part of the image where a particular object was detected.
      boxes = detection_graph.get_tensor_by_name('detection_boxes:0')
      # Each score represent how level of confidence for each of the objects.
      # Score is shown on the result image, together with the class label.
      scores = detection_graph.get_tensor_by_name('detection_scores:0')
      classes = detection_graph.get_tensor_by_name('detection_classes:0')
      num_detections = detection_graph.get_tensor_by_name('num_detections:0')
      # Actual detection.
      (boxes, scores, classes, num_detections) = sess.run(
          [boxes, scores, classes, num_detections],
          feed_dict={image_tensor: image_np_expanded})
      # Visualization of the results of a detection.
      vis_util.visualize_boxes_and_labels_on_image_array(
          image_np,
          np.squeeze(boxes),
          np.squeeze(classes).astype(np.int32),
          np.squeeze(scores),
          category_index,
          use_normalized_coordinates=True,
          line_thickness=8)
      plt.figure(figsize=IMAGE_SIZE)
      plt.imshow(image_np)

结果
主要时间用于下载模型,目标识别还是蛮快的。
这里写图片描述
这里写图片描述


一些细节

1.模型的选择

Tensorflow detection model zoo
Speed表示速度,COCO mAP表示在COCO数据集上的平均准确率,第一个ssd_mobilenet就是我们默认使用的pre-train模型
这里写图片描述

# What model to download.
MODEL_NAME = 'ssd_mobilenet_v1_coco_11_06_2017'
#MODEL_NAME = 'faster_rcnn_resnet101_coco_11_06_2017'
#MODEL_NAME = 'ssd_inception_v2_coco_11_06_2017'
MODEL_FILE = MODEL_NAME + '.tar.gz'
DOWNLOAD_BASE = 'http://download.tensorflow.org/models/object_detection/'

2.测试自己的图片

改变【PATH_TO_TEST_IMAGES_DIR】 的路径,要在models-master\object_detection目录下。相应的数量for i in range(1, 3)也要进行改变。

# For the sake of simplicity we will use only 2 images:
# image1.jpg
# image2.jpg
# If you want to test the code with your images, just add path to the images to the TEST_IMAGE_PATHS.
PATH_TO_TEST_IMAGES_DIR = 'test_images'
TEST_IMAGE_PATHS = [ os.path.join(PATH_TO_TEST_IMAGES_DIR, 'image{}.jpg'.format(i)) for i in range(1, 3) ]

这里写图片描述
测试一张图片快7秒,不知道是什么原因。

3.测试视频

安装Opencv3,这里碰到了问题,直接输入

pip install opencv-python

安装好后import cv2报错

ImportError: DLL load failed: 找不到指定的模块

根据网上的解决方法去安装vc++ for visual2015之后并没有解决,下载重装 【opencv_python-3.2.0.8-cp35-cp35m-win_amd64.whl】也无效。把Anaconda2删除只留Anaconda3也不行。无奈之下重新安装Anaconda3,下载最新版的python-opencv,在目录下

pip install opencv_python-3.3.0-cp35-cp35m-win_amd64.whl

import cv2报错:

ImportError: numpy.core.multiarray failed to import

于是更新numpy到1.13.1:

pip install -U numpy

接下来import cv2就没问题了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TensorFlow:Object_Detection_API在Windows10上的配置 的相关文章

随机推荐

  • top 默认使用内存排序的命令

    linux下 xff0c top默认使用cpu来排序 xff0c 如果希望改用内存占用情况或其他项来排序 xff0c 可以通过 o选项 top o MEM 通过 man top 查看其用法 xff0c 里面描述了 o 选项 xff0c 用于
  • 寻找两个点云重叠部分

    目录 方法1 xff1a 方法1实验效果 xff1a 方法2 c 43 43 xff1a 方法2 python 方法2实验效果 xff1a 结论 xff1a 网上大部分寻找重叠区域都是对一个点云建立kdtree xff0c 然后在r半径内搜
  • 防火墙firewalld

    RHEL7中有几种防火墙共存 xff1a firewalld iptables ebtables等 基于iptables的防火墙默认不启动 xff0c 但仍然可以继续使用 RHEL7默认使用firewalld作为防火墙 xff0c 管理工具
  • 仿真平台sumo:随机生成车流的randomTrips.py的较便捷使用方法(新手用)

    Step1 xff1a 首先把需要的地图文件 xff08 net xml xff09 放入自己认为方便操作的文件夹中 此处我的地图文件为demo net 我将其放在一个桌面新建的文件夹里 xff0c 该文件夹叫sumo random 图1
  • 个人面试经验总结

    1 xff0c 海投 2 xff0c 一定要强调自己能留到该地 xff08 这个城市 这个公司 xff09 发展 3 xff0c 简历上出现的技能和项目面试前一天一定要复习 xff0c 因为面试官大部分问题会以简历为主 4 xff0c 要有
  • stm32通用定时器pwm输入模式

    简介 stm32通用定时器有多种输入模式 xff0c 其他包括了pwm输入模式 原理 pwm输入模式是在输入捕获的基础上使用两组输入捕获通道对同一个TIM引脚进行捕获 如下图所示 TIMx CH1引脚输入一个pwm信号 xff0c 经过输入
  • 集成学习中的Boosting和Bagging

    集成学习是一大类模型融合策略和方法的统称 xff0c 其中包含多种集成学习的思想 Boosting Boosting方法训练基分类器时采用串行的方式 xff0c 各个基分类器之间有依赖 它的基本思路是将基分类器层层叠加 xff0c 每一层在
  • Pixhawk与树莓派3的串口通信

    新建主题 msg文件夹下新建mytopic msg文件 char 4 datastr0 字符串的写法 存放发送过来的字符串 uint8 data 将字符串转换成整型 在msg文件夹中的cmkaelist文件中加入 新建pi uart模块 在
  • 树莓派---wiringPi串口使用(win10+树莓派3+usb转串口)

    参考 wiringPi使用手册wiringPi安装wiringPi串口的配置 准备 串口调试助手串口线驱动 在树莓派上用Qt写串口发送数据的程序 serialTEST pro QT 43 61 core QT 61 gui TARGET 6
  • Ubuntu下QT creator查看pixhawk工程

    打开Terminal span class hljs built in cd span src Firmware mkdir Firmware build span class hljs built in cd span Firmware
  • Ubuntu+DroneKit Python配置

    安装 sudo apt span class hljs attribute get span install python span class hljs attribute py span python span class hljs a
  • DroneKit示例分析1---状态的获取与设置

    能获取大部分无人机的状态信息 xff0c 但只有以下几个可以设置 Vehicle span class hljs preprocessor home span location Vehicle span class hljs preproc
  • Python+OpenCV感兴趣区域ROI提取

    Python 43 OpenCV感兴趣区域ROI提取 方法一 xff1a 使用轮廓 步骤1 span class hljs string 34 34 34 src为原图 34 34 34 span ROI 61 np zeros src s
  • 机器学习——数据标注工具使用

    LabelImg 源码编译教程 LabelImg github Windows Linux打包软件 使用方法 Steps Click Change default saved annotation folder in Menu File C
  • TensorFlow——训练自己的数据(一)数据处理

    参考 xff1a Tensorflow教程 猫狗大战数据集 贴一张自己画的思维导图 数据集准备 kaggle猫狗大战数据集 xff08 训练 xff09 xff0c 微软的不需要翻墙 12500张cat12500张dog 生成图片路径和标签
  • TensorFlow——训练自己的数据(三)模型训练

    参考 xff1a Tensorflow教程 猫狗大战数据集 文件training py 导入文件 span class hljs import span class hljs keyword import span os span span
  • TensorFlow——训练自己的数据(四)模型测试

    参考 xff1a Tensorflow教程 猫狗大战数据集 测试一张图片 获取一张图片 函数 xff1a def get one image train 输入参数 xff1a train 训练图片的路径返回参数 xff1a image xf
  • linux BST树算法实现

    简介 BST就是二叉搜索树 Binary Search Tree 的简称 xff0c 因此毫无疑问BST也是二叉树 xff0c 对于二叉树而言 xff0c 和线性表的实现一样 xff0c 我们也必须设计其数据节点 xff0c 而且也必须设计
  • TensorFlow——训练自己的数据——CIFAR10(一)数据准备

    参考教程 Tensorflow教程 xff1a 深度学习 图像分类 CIFAR10数据集 Reading Data 所用函数 span class hljs function span class hljs keyword def span
  • TensorFlow:Object_Detection_API在Windows10上的配置

    安装 假设已配置完tensorflow xff0c 并安装好Anaconda3 4 2 0 xff08 此版本为python3 5 xff09 从github下载models tensorflow models Protobuf 编译 pr