如何利用Tensorflow和OpenCV构建实时对象识别程序?

小白学视觉

共 2089字,需浏览 5分钟

 · 2021-02-12

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

引言
在本文中,将逐步介绍如何使用Tensorflow(TF)的新对象检测API和Python 3中OpenCV如何轻松构建自己的实时对象识别应用程序。

下面是正在运行的应用程序:


目的与动机

Google发布了新的TensorFlow对象检测API。第一版包含:

  • 预先训练的模型(尤其是重点放在轻量模型上,以便它们可以在移动设备上运行)

  • Jupyter笔记本示例,其中包含一个已发布的型号

  • 非常方便的脚本,可用于例如在您自己的数据集上对模型进行重新训练。

我们希望能充分理解这个新东西,并且花费一些时间来建立一个简单的实时对象识别演示。


目标检测演示

首先,我们下载了TensorFlow模型库,然后查看了他们发布的注释。它基本上遍历了使用预训练模型的所有步骤。在他们的示例中,他们使用了“带有Mobilenet的SSD”模型,但是我们也可以在他们称为“ Tensorflow检测模型”的情况下下载其他一些经过预先训练的模型。这些模型是在COCO数据集上训练的,并随模型速度(慢速,中度和快速)和模型性能而变化。

接下来我们要做的是运行示例。该示例实际上有据可查。本质上,这就是它的作用:

  1. 导入所需的软件包,例如TensorFlow,PIL等。

  2. 定义一些变量,例如类别数,模型名称等。

  3. 下载模型(.pb — protobuf)并将其加载到内存中。

  4. 加载一些代码,例如标签转换器的索引。

  5. 通过两张图像测试代码。

注意:在运行示例之前,请注意查看设置说明。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“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


浏览 14
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报