视频中的物体识别

摘要

物体识别(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. LR回放https协议脚本失败: 错误 -27778: 在尝试与主机“www.baidu.com”connect 时发生 SSL 协议错误

    今天用LR录制脚本协议为https协议,回放脚本时出现报错: Action.c(14): 错误 -27778: 在尝试与主机"www.baidu.com"connect 时发生 S ...

  2. iis / asp.net 使用 .config 和 .xml 文件的区别

    由于在项目中有同学使用后缀为 .xml 的文件作为配置文件,而配置文件中有一些敏感信息被记录,如接口地址,Token,甚至还有数据库连接字符串. 以前都没想过为何微软会使用.config 的后缀在作为 ...

  3. 《javascript设计模式与开发实践》阅读笔记(16)—— 状态模式

    状态模式 会区分事物内部的状态,事物内部状态的改变往往会带来事物的行为改变.比如电灯的开关是开还是关,在外界的表现就完全不同. 电灯例子 按照常规思路,实现一个电灯就是构造一个电灯类,然后指定一下它的 ...

  4. JAVA_SE基础——12.运算符的优先级

    优先级 操作符 含义 关联性 用法 ---------------------------------------------------------------- 1 [ ] 数组下标 左 arra ...

  5. crlf注入攻击

    1.crlf 注入攻击. 原理:http数据包通过\r\n\r\n来分开http header何http body 实现:首先这种攻击发生在应用层,且发生在服务器返回给我们的http reponse没 ...

  6. Linux命令及lamp搭建

    单纯属于Linux的命令:1.强制卸载有依赖关系的软件包: rpm -e httpd-2.2.15-26.el6.x86_64 --nodeps(--nodeps表示无依赖)4.删除当前目录所有的文件 ...

  7. IIFE的形式、原理和常见写法

    immediately invoked function expression 立即调用的函数表达式 出现的形式: 最近做牛客网的JS在线编程,遇到几道考闭包的题目,发现闭包的尾巴那儿经常会出现一对小 ...

  8. Hibernate(九):基于主键映射的1-1关联关系

    背景: 在实际开发中我们会遇到新建一个用户表,但这个表字段过长,而且有写字段常用(主要),有些字段比较不常用(次要).此时,我们会考虑到把用户信息拆分到两张表中:member(存储用户主要信息),me ...

  9. www的构建技术

    www的构建技术分别是: html超文本标记语言,页面的文本显示 http超文本传输协议,信息传输转移的约定 url统一资源定位符,客户端浏览超文本的地址集合

  10. issubclass判断前面是不是后面的子类

    issubclass(sub,sup) 判断前面是不是后面的子类