如何利用Tensorflow和OpenCV构建实时对象识别程序?
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
引言
在本文中,将逐步介绍如何使用Tensorflow(TF)的新对象检测API和Python 3中OpenCV如何轻松构建自己的实时对象识别应用程序。
下面是正在运行的应用程序:
目的与动机
Google发布了新的TensorFlow对象检测API。第一版包含:
预先训练的模型(尤其是重点放在轻量模型上,以便它们可以在移动设备上运行)
Jupyter笔记本示例,其中包含一个已发布的型号
非常方便的脚本,可用于例如在您自己的数据集上对模型进行重新训练。
我们希望能充分理解这个新东西,并且花费一些时间来建立一个简单的实时对象识别演示。
目标检测演示
首先,我们下载了TensorFlow模型库,然后查看了他们发布的注释。它基本上遍历了使用预训练模型的所有步骤。在他们的示例中,他们使用了“带有Mobilenet的SSD”模型,但是我们也可以在他们称为“ Tensorflow检测模型”的情况下下载其他一些经过预先训练的模型。这些模型是在COCO数据集上训练的,并随模型速度(慢速,中度和快速)和模型性能而变化。
接下来我们要做的是运行示例。该示例实际上有据可查。本质上,这就是它的作用:
导入所需的软件包,例如TensorFlow,PIL等。
定义一些变量,例如类别数,模型名称等。
下载模型(.pb — protobuf)并将其加载到内存中。
加载一些代码,例如标签转换器的索引。
通过两张图像测试代码。
注意:在运行示例之前,请注意查看设置说明。protobuf的编译部分尤其重要:
# From tensorflow/models/research/
protoc object_detection/protos/*.proto --python_out=.
然后,我们获取了他们的代码并进行了相应的修改:
删除模型下载部分
TensorFlow会话没有“ with”语句,因为这是一个巨大的消耗,尤其是当每次需要在每个流之后启动会话时
不需要PIL,因为OpenCV中的视屏流已经存在于numpy数组中(PIL也是非常大的消耗,特别是在将其用于读取图像时)
然后,我们使用OpenCV将其与网络摄像头连接。那里有许多示例解释了如何做到这一点,甚至是官方文档。
通常,许多OpenCV示例的实现并不是真正的最佳选择,例如,OpenCV中的某些功能受I/O限制。因此,我们不得不想出各种解决方案来解决此问题:
从网络摄像机读取帧会导致大量I/O。我们的想法是使用多处理库将这部分内容完全移到另一个Python进程中。关于Stackoverflow的一些解释为什么它不起作用,但我没有对此进行更深入的研究。在Adrian Rosebrock的网站“ pyimagesearch”上一个很好的示例,该示例使用线程代替,从而大大提高了我们的fps。
每次启动应用程序时,将冻结的模型加载到内存中都是很大消耗。而且我们已经为每次运行使用了一个TF会话,但这仍然很慢。在这种情况下,我们使用了多处理库将对象检测部分的繁重工作转移到多个进程中。应用程序的初始启动会很慢,因为每个进程都需要将模型加载到内存中并启动TF会话,但是在此之后,程序的并行性将极大提高运行效率。
注意:如果像我们在Mac OSX上使用OpenCV 3.1,则一段时间后OpenCV的VideoCapture可能会崩溃。如果已经存在问题,切换回OpenCV 3.0则可以解决此问题。
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
如何利用Tensorflow和OpenCV构建实时对象识别程序?相关推荐
- node mongoose_如何使用Express,Mongoose和Socket.io在Node.js中构建实时聊天应用程序
node mongoose by Arun Mathew Kurian 通过阿伦·马修·库里安(Arun Mathew Kurian) 如何使用Express,Mongoose和Socket.io在N ...
- Python Tensorflow + CNN + Opencv 英雄联盟小地图识别,LOL Minimap Scanner
Tensorflow + CNN + Opencv 英雄联盟小地图识别,LOL Minimap Scanner 本项目代码的展示 简介 思路 第一步:图像处理 1. 获取图像并转换 2. 过滤出图像中 ...
- 利用tensorflow.js在线实现图像要素识别提取
什么是Tensorflow.js? TensorFlow.js是一个开源的基于硬件加速的JavaScript库,用于训练和部署机器学习模型.谷歌推出的第一个基于TensorFlow的前端深度学习框架T ...
- 使用 OpenCV 进行实时对象颜色检测
在本文中,我们将讨论如何使用 python 和 OpenCV 检测单色对象.单色是指单一波长的光.我们将使用使用网络摄像头捕获的视频作为输入,并尝试检测单一颜色的对象,尤其是蓝色.但是,如果您正确设置 ...
- 使用 YOLOv8 和 Streamlit 构建实时对象检测和跟踪应用程序:第2部分-探索模型和目标检测
在教程系列的第 1 部分中,我们向您介绍了使用 YOLOv8 和 Streamlit 的实时对象检测和跟踪应用程序.我们还使用一些演示图像演示了该应用程序的功能. 我们详细解释了我们为这个项目选择 Y ...
- 程序员疯狂记事:如何利用众多技术栈构建一个 Web 应用程序?!
[CSDN 编者按]"Elixir.Phoenix.Absinthe.GraphQL.React和Apollo"--在这几个关键词中,有几个是身为开发者的你一直想玩但还没来得及玩的 ...
- 使用Python+Flask+OpenCV构建一个相机应用程序
前言 在这篇博文中,我们将使用 Flask 框架构建一个相机应用程序,我们可以在其中单击图片.录制视频.应用诸如灰度.负片和"仅人脸"之类的滤镜,就像出现在 Snapchat 上的 ...
- 利用Kafka和Cassandra构建实时异常检测实验
导言 异常检测是一种跨行业的方法,用于发现事件流中的异常事件 - 它适用于物联网传感器,财务欺诈检测,安全性,威胁检测,数字广告欺诈以及许多其他应用程序.此类系统检查流数据以检查异常或不规则,并在检测 ...
- 利用建造者(Builder)模式构建 Java 对象
简介: 一般我们构建对象有两种方法,一是构造器,二是默认无参构造器创建对象后使用 set 方法一个个赋值.第一种方法我们需要写一个全参的构造方法,但这样我们在构造对象时有一些不需要填写的对象也要给他赋 ...
最新文章
- RecyclerView的基本用法
- 存储库访问被拒绝。通过部署密钥进行访问是只读的
- fhqtreap的学习笔记
- 一个注解搞懂 Sentinel,@SentinelResource总结
- 实现省市二级联动效果
- java nio 文件传输
- 用VMware GSX和W2K群集服务实现Exchange群集
- 安装qt5后编译运行后有关Qt at-spi的警告
- vector.resize 与 vector.reserve的区别(转载)
- 一本书学会可视化设计 pdf_【推荐给设计师看的11本书】电子版PDF
- linux shell 判断ELF文件,linux file命令查看elf文件信息
- 倍福EtherCAT EK1100耦合器技术参数
- detecting current sdk tools version
- 【BLE】蓝牙数据速率
- winform的RichTextBox设置网格线,类似word的稿纸效果
- 被告知孩子学校偷钱后
- srs配置WebRTC
- Linux中文件搜索,查找,读取
- 使用在Photoshop上的30个纺织物纹理Ps笔刷
- mysql 表的结果作为表_SQL--如何将Sql语句查询出来的结果作为一个表名 再次进行查询...
热门文章
- 从云计算到AI:NetApp的数据网络转型之道
- 公开课报名 | 详解CNN-pFSMN模型以及在语音识别中的应用
- 品质检测破局:工业视觉检测云平台为智能制造“点睛”
- JVM 有 Full GC,为什么还会出现 OutOfMemoryError呢?
- 5 个刁钻的 String 面试题!
- 面试官给我挖坑:URI中的 “//” 有什么用?
- 大公司为什么都有API网关?没你想的那么简单!
- 写一手好 SQL 很有必要
- Pytorch Lightning 完全攻略!
- Datawhale学习的常见问题解答!