点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达

引言

在本文中,将逐步介绍如何使用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“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

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

  1. node mongoose_如何使用Express,Mongoose和Socket.io在Node.js中构建实时聊天应用程序

    node mongoose by Arun Mathew Kurian 通过阿伦·马修·库里安(Arun Mathew Kurian) 如何使用Express,Mongoose和Socket.io在N ...

  2. Python Tensorflow + CNN + Opencv 英雄联盟小地图识别,LOL Minimap Scanner

    Tensorflow + CNN + Opencv 英雄联盟小地图识别,LOL Minimap Scanner 本项目代码的展示 简介 思路 第一步:图像处理 1. 获取图像并转换 2. 过滤出图像中 ...

  3. 利用tensorflow.js在线实现图像要素识别提取

    什么是Tensorflow.js? TensorFlow.js是一个开源的基于硬件加速的JavaScript库,用于训练和部署机器学习模型.谷歌推出的第一个基于TensorFlow的前端深度学习框架T ...

  4. 使用 OpenCV 进行实时对象颜色检测

    在本文中,我们将讨论如何使用 python 和 OpenCV 检测单色对象.单色是指单一波长的光.我们将使用使用网络摄像头捕获的视频作为输入,并尝试检测单一颜色的对象,尤其是蓝色.但是,如果您正确设置 ...

  5. 使用 YOLOv8 和 Streamlit 构建实时对象检测和跟踪应用程序:第2部分-探索模型和目标检测

    在教程系列的第 1 部分中,我们向您介绍了使用 YOLOv8 和 Streamlit 的实时对象检测和跟踪应用程序.我们还使用一些演示图像演示了该应用程序的功能. 我们详细解释了我们为这个项目选择 Y ...

  6. 程序员疯狂记事:如何利用众多技术栈构建一个 Web 应用程序?!

    [CSDN 编者按]"Elixir.Phoenix.Absinthe.GraphQL.React和Apollo"--在这几个关键词中,有几个是身为开发者的你一直想玩但还没来得及玩的 ...

  7. 使用Python+Flask+OpenCV构建一个相机应用程序

    前言 在这篇博文中,我们将使用 Flask 框架构建一个相机应用程序,我们可以在其中单击图片.录制视频.应用诸如灰度.负片和"仅人脸"之类的滤镜,就像出现在 Snapchat 上的 ...

  8. 利用Kafka和Cassandra构建实时异常检测实验

    导言 异常检测是一种跨行业的方法,用于发现事件流中的异常事件 - 它适用于物联网传感器,财务欺诈检测,安全性,威胁检测,数字广告欺诈以及许多其他应用程序.此类系统检查流数据以检查异常或不规则,并在检测 ...

  9. 利用建造者(Builder)模式构建 Java 对象

    简介: 一般我们构建对象有两种方法,一是构造器,二是默认无参构造器创建对象后使用 set 方法一个个赋值.第一种方法我们需要写一个全参的构造方法,但这样我们在构造对象时有一些不需要填写的对象也要给他赋 ...

最新文章

  1. RecyclerView的基本用法
  2. 存储库访问被拒绝。通过部署密钥进行访问是只读的
  3. fhqtreap的学习笔记
  4. 一个注解搞懂 Sentinel,@SentinelResource总结
  5. 实现省市二级联动效果
  6. java nio 文件传输
  7. 用VMware GSX和W2K群集服务实现Exchange群集
  8. 安装qt5后编译运行后有关Qt at-spi的警告
  9. vector.resize 与 vector.reserve的区别(转载)
  10. 一本书学会可视化设计 pdf_【推荐给设计师看的11本书】电子版PDF
  11. linux shell 判断ELF文件,linux file命令查看elf文件信息
  12. 倍福EtherCAT EK1100耦合器技术参数
  13. detecting current sdk tools version
  14. 【BLE】蓝牙数据速率
  15. winform的RichTextBox设置网格线,类似word的稿纸效果
  16. 被告知孩子学校偷钱后
  17. srs配置WebRTC
  18. Linux中文件搜索,查找,读取
  19. 使用在Photoshop上的30个纺织物纹理Ps笔刷
  20. mysql 表的结果作为表_SQL--如何将Sql语句查询出来的结果作为一个表名 再次进行查询...

热门文章

  1. 从云计算到AI:NetApp的数据网络转型之道
  2. 公开课报名 | 详解CNN-pFSMN模型以及在语音识别中的应用
  3. 品质检测破局:工业视觉检测云平台为智能制造“点睛”
  4. JVM 有 Full GC,为什么还会出现 OutOfMemoryError呢?
  5. 5 个刁钻的 String 面试题!
  6. 面试官给我挖坑:URI中的 “//” 有什么用?
  7. 大公司为什么都有API网关?没你想的那么简单!
  8. 写一手好 SQL 很有必要
  9. Pytorch Lightning 完全攻略!
  10. Datawhale学习的常见问题解答!