谷歌开源的TensorFlow Object Detection API视频物体识别系统实现教程
视频中的物体识别
摘要
物体识别(Object Recognition)在计算机视觉领域里指的是在一张图像或一组视频序列中找到给定的物体。本文主要是利用谷歌开源TensorFlow Object Detection API物体识别系统对视频内容进行识别,下面将详细介绍整个实现过程。
关键词:物体识别;TensorFlow
1.引言
随着人们工作、生活智能化的不断推进,作为智能化承载者----摄像头,充当起了非常重要的“眼”的作用. 物体识别技术能够进一步实现了“脑”的作用, 让在图片与视频中识别所看到的物体,对于智能化推进起到了关键作用。 在一张图像或一组视频中,尽管图像中的物体可能千变万化:大小和尺寸不尽相同,摆放位置不同、部分可见,人类却能够在图像中轻松的识别出众多的物体,而物体识别通过对大量样本进行深度学习,同样能够很好地识别。物体识别被大量运用于各个领域,从烤箱对食物的识别需求,汽车对人、车、路的识别需求,机器人对房间摆设的识别需求,到AR/VR对眼前物体的识别。物体识别技术在各领域都发挥着重要的作用。
2.关键技术
本次实验主要是调用谷歌开源TensorFlow Object Detection API物体识别系统完成的。这个代码库是一个建立在 TensorFlow 顶部的开源框架,方便其构建、训练和部署目标检测模型。设计这一系统的目的是支持当前最佳的模型,同时允许快速探索和研究。它的第一个版本包含:
(1) 一个可训练性检测模型的集合,包括:
l 带有 MobileNets 的 SSD(Single Shot Multibox Detector)
l 带有 Inception V2 的 SSD
l 带有 Resnet 101 的 R-FCN(Region-Based Fully Convolutional Networks)
l 带有 Resnet 101 的 Faster RCNN
l 带有 Inception Resnet v2 的 Faster RCNN
上述5种识别模型在代码中可以直接调用。SSD 模型使用了轻量化的 MobileNet,这意味着它们可以轻而易举地在移动设备中实时使用。
(2) 一个 Jupyter notebook 可通过我们的模型之一执行开箱即用的推理。
(3) 借助谷歌云实现便捷的本地训练脚本以及分布式训练和评估管道。
3.实验环境
(1) 操作系统:win7 64位
(2) 编程语言:Python(版本:3.5.2)
(3) 编程工具:Jupyter Notebook
(4) 框架:TensorFlow
4.实验思路
(1) 使用 VideoFileClip 函数从视频中抓取图片。
(2) 用fl_image函数将原图片替换为修改后的图片,用于传递物体识别的每张抓取图片。
(3) 所有修改的剪辑图像被组合成为一个新的视频
5.实验过程
谷歌开源TensorFlow Object Detection API物体识别系统可以识别图片或视频中存在的大部分物体,在此基础上对源代码进行修改,通过用户的输入,进行对指定物体的识别。
5.1 搭建环境
首先搭建好运行环境,下载并安装相关API运行支持组件:
pip install pillow(Python Imaging Library)
pip install jupyter
pip install opencv_python-3.3.0.10-cp35-cp35m-win_amd64.whl(下载opencv的cv2包,导入opencv-python库)
pip install moviepy-0.2.3.2-py2.py3-none-any.whl (用于视频编辑的Python模块)
pip install imageio(下载一个剪辑必备的程序ffmpeg.win32.exe)
pip install ipython
5.2 代码修改整合
然后对源代码进行修改,主要的修改内容是visualization_utils.py文件中的visualize_boxes_and_labels_on_image_array函数,源代码是对视频中出现的物体都进行识别,识别不出来的物体用N/A来标识,识别出来的物体都用方框标识,并且在方框旁边显示具体的物体名称和所侦测到物体的可信度分值。
5.3 核心代码:
(1) 载入所使用的类库。
(2) 物体检测载入。
(3) 准备所需的识别模型,这里我们使用“移动网SSD”模型,模型已经下载好。
(4) 将TensorFlow模型载入内存。
(5) 载入标签图(所能识别的所有物体集合,一个字符标签的字典)。
字典的内容,即可以识别的物体种类:
[{'name': 'person', 'id': 1}, {'name': 'bicycle', 'id': 2}, {'name': 'car', 'id': 3}, {'name': 'motorcycle', 'id': 4}, {'name': 'airplane', 'id': 5}, {'name': 'bus', 'id': 6}, {'name': 'train', 'id': 7}, {'name': 'truck', 'id': 8}, {'name': 'boat', 'id': 9}, {'name': 'traffic light', 'id': 10}, {'name': 'fire hydrant', 'id': 11}, {'name': 'stop sign', 'id': 13}, {'name': 'parking meter', 'id': 14}, {'name': 'bench', 'id': 15}, {'name': 'bird', 'id': 16}, {'name': 'cat', 'id': 17}, {'name': 'dog', 'id': 18}, {'name': 'horse', 'id': 19}, {'name': 'sheep', 'id': 20}, {'name': 'cow', 'id': 21}, {'name': 'elephant', 'id': 22}, {'name': 'bear', 'id': 23}, {'name': 'zebra', 'id': 24}, {'name': 'giraffe', 'id': 25}, {'name': 'backpack', 'id': 27}, {'name': 'umbrella', 'id': 28}, {'name': 'handbag', 'id': 31}, {'name': 'tie', 'id': 32}, {'name': 'suitcase', 'id': 33}, {'name': 'frisbee', 'id': 34}, {'name': 'skis', 'id': 35}, {'name': 'snowboard', 'id': 36}, {'name': 'sports ball', 'id': 37}, {'name': 'kite', 'id': 38}, {'name': 'baseball bat', 'id': 39}, {'name': 'baseball glove', 'id': 40}, {'name': 'skateboard', 'id': 41}, {'name': 'surfboard', 'id': 42}, {'name': 'tennis racket', 'id': 43}, {'name': 'bottle', 'id': 44}, {'name': 'wine glass', 'id': 46}, {'name': 'cup', 'id': 47}, {'name': 'fork', 'id': 48}, {'name': 'knife', 'id': 49}, {'name': 'spoon', 'id': 50}, {'name': 'bowl', 'id': 51}, {'name': 'banana', 'id': 52}, {'name': 'apple', 'id': 53}, {'name': 'sandwich', 'id': 54}, {'name': 'orange', 'id': 55}, {'name': 'broccoli', 'id': 56}, {'name': 'carrot', 'id': 57}, {'name': 'hot dog', 'id': 58}, {'name': 'pizza', 'id': 59}, {'name': 'donut', 'id': 60}, {'name': 'cake', 'id': 61}, {'name': 'chair', 'id': 62}, {'name': 'couch', 'id': 63}, {'name': 'potted plant', 'id': 64}, {'name': 'bed', 'id': 65}, {'name': 'dining table', 'id': 67}, {'name': 'toilet', 'id': 70}, {'name': 'tv', 'id': 72}, {'name': 'laptop', 'id': 73}, {'name': 'mouse', 'id': 74}, {'name': 'remote', 'id': 75}, {'name': 'keyboard', 'id': 76}, {'name': 'cell phone', 'id': 77}, {'name': 'microwave', 'id': 78}, {'name': 'oven', 'id': 79}, {'name': 'toaster', 'id': 80}, {'name': 'sink', 'id': 81}, {'name': 'refrigerator', 'id': 82}, {'name': 'book', 'id': 84}, {'name': 'clock', 'id': 85}, {'name': 'vase', 'id': 86}, {'name': 'scissors', 'id': 87}, {'name': 'teddy bear', 'id': 88}, {'name': 'hair drier', 'id': 89}, {'name': 'toothbrush', 'id': 90}]
(6) Python GUI设计,编写一个简单用户输入界面。
(7) 具体的物体探测内容是放在一个show方法下的,然后通过点击按钮来调用show方法。
参考:http://blog.csdn.net/xiaoxiao123jun/article/details/76605928
全部代码:https://github.com/lyj8330328/Object-Detection
谷歌开源的TensorFlow Object Detection API视频物体识别系统实现教程的更多相关文章
- 对于谷歌开源的TensorFlow Object Detection API视频物体识别系统实现教程
本教程针对Windows10实现谷歌近期公布的TensorFlow Object Detection API视频物体识别系统,其他平台也可借鉴. 本教程将网络上相关资料筛选整合(文末附上参考资料链接) ...
- 谷歌开源的TensorFlow Object Detection API视频物体识别系统实现(一)[超详细教程] ubuntu16.04版本
谷歌宣布开源其内部使用的 TensorFlow Object Detection API 物体识别系统.本教程针对ubuntu16.04系统,快速搭建环境以及实现视频物体识别系统功能. 本节首先介绍安 ...
- 谷歌开源的TensorFlow Object Detection API视频物体识别系统实现(二)[超详细教程] ubuntu16.04版本
本节对应谷歌开源Tensorflow Object Detection API物体识别系统 Quick Start步骤(一): Quick Start: Jupyter notebook for of ...
- 安装运行谷歌开源的TensorFlow Object Detection API视频物体识别系统
Linux安装 参照官方文档:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/inst ...
- 基于谷歌开源的TensorFlow Object Detection API视频物体识别系统搭建自己的应用(四)
本章主要内容是利用mqtt.多线程.队列实现模型一次加载,批量图片识别分类功能 目录结构如下: mqtt连接及多线程队列管理 MqttManager.py # -*- coding:utf8 -*- ...
- Tensorflow object detection API 搭建物体识别模型(一)
一.开发环境 1)python3.5 2)tensorflow1.12.0 3)Tensorflow object detection API :https://github.com/tensorfl ...
- Tensorflow object detection API 搭建物体识别模型(四)
四.模型测试 1)下载文件 在已经阅读并且实践过前3篇文章的情况下,读者会有一些文件夹.因为每个读者的实际操作不同,则文件夹中的内容不同.为了保持本篇文章的独立性,制作了可以独立运行的文件夹目标检测. ...
- Tensorflow object detection API 搭建物体识别模型(三)
三.模型训练 1)错误一: 在桌面的目标检测文件夹中打开cmd,即在路径中输入cmd后按Enter键运行.在cmd中运行命令: python /your_path/models-master/rese ...
- Tensorflow object detection API 搭建物体识别模型(二)
二.数据准备 1)下载图片 图片来源于ImageNet中的鲤鱼分类,下载地址:https://pan.baidu.com/s/1Ry0ywIXVInGxeHi3uu608g 提取码: wib3 在桌面 ...
随机推荐
- css3动画transition详解2
transition主要包含四个属性值:执行变换的属性:transition-property,变换延续的时间:transition-duration,在延续时间段,变换的速率变化transition ...
- New UWP Community Toolkit - DropShadowPanel
概述 UWP Community Toolkit 中有一个为 Frmework Element 提供投影效果的控件 - DropShadowPanel,本篇我们结合代码详细讲解 DropShado ...
- Oracle 使用pl/sql将表中的数据读出到文件中
(1)在服务器上创建文件路径及文件 [oracle@redhat errormsg]$ touch test01.txt (2)在数据库中创建路径及授权 (3)创建存储过程 CREATE OR REP ...
- 查找git ignore的追踪
前言 版本控制说简单也简单,说复杂也困难的多.作为开发者,最基础的版本管理和团队协作的功能必须掌握.而其他一些相关的信息也可以了解下.比如,这次就有同事遇到了问题. 遇到的问题 在windows下,往 ...
- hadoop2.6.0理论:hdfs、yarn、mapreduce的架构
HDFS2的架构:负责数据的分布式存储 主从结构 主节点,可以有2个: namenode 从节点,有很多个: datanode namenode负责: 接收用户操作请求,是用户操作的入口 维护文件系统 ...
- Spark快速入门
Spark 快速入门 本教程快速介绍了Spark的使用. 首先我们介绍了通过Spark 交互式shell调用API( Python或者scala代码),然后演示如何使用Java, Scala或者P ...
- Oracle12c:支持通过创建identity columen来实现创建自增列
oracle12c之前如果需要创建自增列必须要通过sequence+trigger来实现.但是oracle12c已经可以像mysql,sqlserver一样通过identity column来设置自增 ...
- 初识 SpringMVC
1.Spring MVC 的工作流程 1.web请求被 前端控制器(DispatcherServlet)拦截 2.DispatcherServlet调用 映射处理器(HandelerMapping)查 ...
- Go-GRPC 初体验
grpc 跟常见的client-server模型相似(doubbo)grpc 编码之前需要准备以下环境: 安装protobuf,grpc的client与server之间消息传递使用的protoc格式消 ...
- 使用poi根据模版生成word文档,支持插入数据和图片
一.制作word模版,${xxxx}是一会要替换的内容,最下面的表格是要插入数据,根据是否以$开头来判断是需要替换还是插入数据, 注意如果是需要插入数据,制作的表格模版需要一行空行,也只能有一行空行, ...