原文标题 :Object detection with Tensorflow model and OpenCV
使用 Tensorflow 模型和 OpenCV 进行对象检测
使用经过训练的模型来识别静态图像和实时视频上的对象
在本文中,我将演示如何使用经过训练的模型来检测图像和视频中的对象,并使用两个针对此类问题的最佳库。对于检测,我们需要一个能够预测图像中的多个类别并返回这些对象的位置的模型,以便我们可以在图像上放置框。
The Model
我们将使用 Tensorflow Hub 库中的一个模型,该库具有多个可部署的模型,这些模型在各种数据集中进行了训练并可以解决各种问题。对于我们的使用,我过滤了为对象检测任务训练的模型和 TFLite 格式的模型。这种格式通常用于物联网应用程序,因为它比更大的模型体积小且性能更快。我选择这种格式是因为我打算在未来的项目中在 Rasberry Pi 上使用这种模型。[0]
选择的模型是 EfficientDet-Lite2 对象检测模型。它在具有 91 个不同标签的 COCO17 数据集上进行了训练,并针对 TFLite 应用程序进行了优化。该模型返回:[0]
- 检测的框边界;
- 检测分数(给定类别的概率);
- The detection classes;
- 检测次数。
Detecting Objects
我将本节分为两部分:静态图像检测和实时网络摄像头视频检测。
Static Images
我们将首先从 Unsplash 检测此图像中的对象:
因此,我们要做的第一件事是加载此图像并将其处理为 TensorFlow 模型的预期格式。
基本上,我们使用 OpenCV 加载原始图像并将其转换为模型格式的 RGB 张量。
现在我们可以加载模型和标签:
该模型是直接从网站加载的,但是您可以将其下载到您的计算机上以获得更好的加载性能。文本标签 CSV 在项目 repo 中可用。[0]
现在我们可以创建预测并将找到的框和标签放入图像中:
现在,如果我们运行 plt.imshow(img_boxes) 我们会得到以下输出:
Live Webcam Video
现在我们可以继续使用 PC 上的网络摄像头实时检测物体。
这部分并不像看起来那么难,我们只需在循环中插入我们用于一张图像的代码:
Then we get:
我们使用来自 open cv 的 VideoCapture 从计算机网络摄像头加载视频。然后我们进行与静态图像相同的处理并预测标签和位置。主要区别在于图像输入是连续的,因此我们将代码插入到 while 循环中。
使用的所有代码和笔记本都在这个存储库中:
在不久的将来,我会将其加载到树莓派中,以使用能够检测对象的模型创建一些交互,并在此处发布结果。
如果您喜欢内容并想支持我,可以请我喝咖啡:
文章出处登录后可见!