使用多个摄像头进行Tensorflow对象检测

时间:2017-11-10 10:14:22

标签: python-3.x tensorflow-gpu

我尝试了GitHub代码Object-Detector-App

这适用于1秒延迟的单个相机,但当我尝试多个相机时,(两个,三个....) 为此,我为每个摄像机创建了多个线程用于图形和会话,我得到的高延迟取决于摄像机的数量。 a)我使用的是NVIDIA Quadpro GP100,相机输入为HD(1920x1080) b)我正在使用SSD_VI_COCO_11_06_2017

我在tensorflow中学习了线程和队列概念,我搜索了很多但是找不到实用的方法。

我想知道我正在以正确的方式处理多个相机以进行物体检测,或者有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

首先请确保您正在从多个摄像机读取帧而没有延迟。如果将opencv与python包装器一起使用,请注意,read()的底层实现对USB网络摄像头和ip摄像机的工作方式有所不同。 USB摄像头可以轻松堆叠,而IP摄像头可能需要python线程和队列才能有效读取帧。

除非您需要大尺寸的图像,否则在将其放入Feed字典之前,请调整其大小。

该GPU可以轻松实现30+ FPS。常见问题是加载图形并为每个推论开始新的会话。如果使用一个GPU,则无需为每个摄像机打开新的图形/会话。在循环外打开一个图和一个会话,并在一个循环中推断所有摄像机的图像。可以一个接一个地或分批完成。例如。将形状(1,512,512,3)的四个图像堆叠到形状(4,512,512,3)的单个数组中,并且只要gpu可以将它们适配到内存中,对所有四个图像的推断将并行进行。

它可能看起来像这样:

加载图表并打开会话

每个读取帧并填充队列的摄像机的启动线程

启动单个推理线程,该线程从队列中读取帧并依次或分批推断帧