Python真的无所不能,没有做不到的!OpenCV加Docker实时目标检测

《Python真的无所不能,没有做不到的!OpenCV加Docker实时目标检测》
《Python真的无所不能,没有做不到的!OpenCV加Docker实时目标检测》

使用Youtube视频进行视频处理测试

进群:125240963   即可获取数十套PDF哦!

动机

我们从 Dat Tran 这篇文章开始挑战实时目标检测。我将使用 python 的 multiprocessing 库,增加处理网络摄像头时的 FPS。为了进一步提高可移植性,我将项目集成到 Docker 容器中。不过处理进出容器的视频流可能会有一点麻烦。

《Python真的无所不能,没有做不到的!OpenCV加Docker实时目标检测》

我认为使用 Docker 应是当今数据科学家的必备技能。在数据科学和机器学习领域,每周都会发布许多新的算法,工具和程序,直接在你的计算机目录上安装调试这些代码、程序会让系统变得凌乱不堪。为了防止这种情况,我使用 Docker 容器来创建我的数据科学工作区将程序部署在容器中。

你可以在我的代码库中找到这个项目的 Dockerfile。以下是我安装配置 Tensorflow 目标检测的方法(按照官方安装指南):

《Python真的无所不能,没有做不到的!OpenCV加Docker实时目标检测》

实时图像目标检测

我首先尝试将目标检测应用于我的网络摄像头。在 Dat Tran 的文章中有这部分的详细描述。难点在于将网络摄像头流发送到 docker 容器并恢复输出流以使用 X11 服务器显示它。

将视频流发送到容器

Linux 系统可以在/ dev /目录中找到摄像头设备,并可以将其作为文件进行操作。通常笔记本电脑摄像头是「0」设备。要将其数据流发送到 docker 容器,请在运行 docker 镜像时使用 device 参数:

《Python真的无所不能,没有做不到的!OpenCV加Docker实时目标检测》

现在我们可以运行 docker 容器看看效果

《Python真的无所不能,没有做不到的!OpenCV加Docker实时目标检测》

目标检测结果 (我是个害羞的人⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄)

尽管主机具有X服务配置,我仍不能完全删除代码中的bug。在OpenCV中 需要通过调用python 脚本(init-openCV.py)来进行初始化,即使用函数cv2.imshow 。用这种方法我得到了如下的错误消息:

《Python真的无所不能,没有做不到的!OpenCV加Docker实时目标检测》

如果输入队列没满,下一帧视频从视频流中读取并且放进队列中。否则,当视频帧没有从输入队列获取时不会处理任何事情。

为了解决帧率顺序的问题,我使用了如下这种优先队列作为第二输入队列:

1. 视频帧带着对应的视频帧编号被读取并放入输入队列中(实际上是一个python 列表对象放入了序列)。

2. 然后,工作单元从输入队列中提取视频帧,处理后将它们放入第一个输出队列(依然带着它们相关的视频帧编号)。

《Python真的无所不能,没有做不到的!OpenCV加Docker实时目标检测》

总结

在这篇文章中,我展示了如何使用docker来实现Tensorflow的实时目标检测项目。如上所述,docker是测试新数据科学工具最安全的方法,同时可以将解决方案打包给用户。我也将如何采用来自Dat Tran 原始的python 脚本利用多进程去进行视频处理展示给你。

谢谢你从头到尾阅读这篇文章。如上所述,这个项目有许多可以提高的地方。如果您有任何意见,请不要犹豫立刻告知我,我总是热衷得到建议或评论。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注