视频中的物体识别

摘要

物体识别(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视频物体识别系统实现教程的更多相关文章

  1. 对于谷歌开源的TensorFlow Object Detection API视频物体识别系统实现教程

    本教程针对Windows10实现谷歌近期公布的TensorFlow Object Detection API视频物体识别系统,其他平台也可借鉴. 本教程将网络上相关资料筛选整合(文末附上参考资料链接) ...

  2. 谷歌开源的TensorFlow Object Detection API视频物体识别系统实现(一)[超详细教程] ubuntu16.04版本

    谷歌宣布开源其内部使用的 TensorFlow Object Detection API 物体识别系统.本教程针对ubuntu16.04系统,快速搭建环境以及实现视频物体识别系统功能. 本节首先介绍安 ...

  3. 谷歌开源的TensorFlow Object Detection API视频物体识别系统实现(二)[超详细教程] ubuntu16.04版本

    本节对应谷歌开源Tensorflow Object Detection API物体识别系统 Quick Start步骤(一): Quick Start: Jupyter notebook for of ...

  4. 安装运行谷歌开源的TensorFlow Object Detection API视频物体识别系统

    Linux安装 参照官方文档:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/inst ...

  5. 基于谷歌开源的TensorFlow Object Detection API视频物体识别系统搭建自己的应用(四)

    本章主要内容是利用mqtt.多线程.队列实现模型一次加载,批量图片识别分类功能 目录结构如下: mqtt连接及多线程队列管理 MqttManager.py # -*- coding:utf8 -*- ...

  6. Tensorflow object detection API 搭建物体识别模型(一)

    一.开发环境 1)python3.5 2)tensorflow1.12.0 3)Tensorflow object detection API :https://github.com/tensorfl ...

  7. Tensorflow object detection API 搭建物体识别模型(四)

    四.模型测试 1)下载文件 在已经阅读并且实践过前3篇文章的情况下,读者会有一些文件夹.因为每个读者的实际操作不同,则文件夹中的内容不同.为了保持本篇文章的独立性,制作了可以独立运行的文件夹目标检测. ...

  8. Tensorflow object detection API 搭建物体识别模型(三)

    三.模型训练 1)错误一: 在桌面的目标检测文件夹中打开cmd,即在路径中输入cmd后按Enter键运行.在cmd中运行命令: python /your_path/models-master/rese ...

  9. Tensorflow object detection API 搭建物体识别模型(二)

    二.数据准备 1)下载图片 图片来源于ImageNet中的鲤鱼分类,下载地址:https://pan.baidu.com/s/1Ry0ywIXVInGxeHi3uu608g 提取码: wib3 在桌面 ...

随机推荐

  1. vue项目结构

    前言 我在 搭建vue项目环境 简单说明了项目初始化完成后的目录结构. 但在实际项目中,src目录下的结构需要跟随项目做一些小小的调整. 目录结构 ├── src 项目源码目录 │ ├── api 所 ...

  2. SQL Server 实现递归查询

    基础数据/表结构                 Sql 语句 ;With cte(id,pid,TName)As ( Select id,pid,TName Union All Select B.i ...

  3. WebApi 的三种寄宿方式 (一)

    最近逛博客园,看到了Owin,学习了一下,做个笔记,说不定将来哪天就用上了 关于 Owin 的介绍,百度解释的很清楚了: https://baike.baidu.com/item/owin/28607 ...

  4. api-gateway实践(08)新服务网关 - 云端发布和日志查看

    一.发布应用 1.新建应用空间 1.1.新建应用空间 1.2.新建应用 1.3.上传程序包 2.创建应用引擎服务 3.发布应用 3.1.为应用容器绑定Web运行环境(应用引擎服务) 3.2.发布应用( ...

  5. python入门(13)获取函数帮助和调用函数

    Python内置了很多有用的函数,我们可以直接调用. 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数.可以直接从Python的官方网站查看文档: http://doc ...

  6. ssh_maven之controller层开发

    我们已经完成了前两层的开发,现在 只剩下我们的controller层了,对于这一层,我们需要创建一个动作类CustomerAction,另外就是我们的strutss.xml以及我们的applicati ...

  7. 判断一个字符串是不是一个合法的IP地址

    最近在笔试的时候遇到碰一道算法题, 要求判断一个字符串是不是合法的ip地址. 将我的思路发出来分享一下,不一定正确,也不一定是最优的方法.希望能分享一些交流 要求用java或者c来实现,我的java代 ...

  8. VMware虚拟机安装

            学习Linux系统最好的方式就是在自己的虚拟机上安装Linux:接下来就给大家简单介绍一下VMware虚拟机的安装以及Linux的安装:VMware虚拟机只是为了更好的学习Linux: ...

  9. Vue框架

    Vue框架 环境: windows python3.6.2 Vue的cdn: <script src="https://cdn.jsdelivr.net/npm/vue"&g ...

  10. highstaock+websocket实现动态展现

    效果:从后台获取回测数据,在前端动态展现,和聚宽实现的回测效果相仿 大体思路:先传一个[[int,0],[int,0],[int,0],[int,0],[int,0],...]格式的死数据到前端渲染x ...