我尝试了GitHub代码Object-Detector-App
这适用于1秒延迟的单个相机,但当我尝试多个相机时,(两个,三个....) 为此,我为每个摄像机创建了多个线程用于图形和会话,我得到的高延迟取决于摄像机的数量。 a)我使用的是NVIDIA Quadpro GP100,相机输入为HD(1920x1080) b)我正在使用SSD_VI_COCO_11_06_2017
我在tensorflow中学习了线程和队列概念,我搜索了很多但是找不到实用的方法。
我想知道我正在以正确的方式处理多个相机以进行物体检测,或者有更好的方法吗?
答案 0 :(得分:0)
首先请确保您正在从多个摄像机读取帧而没有延迟。如果将opencv与python包装器一起使用,请注意,read()的底层实现对USB网络摄像头和ip摄像机的工作方式有所不同。 USB摄像头可以轻松堆叠,而IP摄像头可能需要python线程和队列才能有效读取帧。
除非您需要大尺寸的图像,否则在将其放入Feed字典之前,请调整其大小。
该GPU可以轻松实现30+ FPS。常见问题是加载图形并为每个推论开始新的会话。如果使用一个GPU,则无需为每个摄像机打开新的图形/会话。在循环外打开一个图和一个会话,并在一个循环中推断所有摄像机的图像。可以一个接一个地或分批完成。例如。将形状(1,512,512,3)的四个图像堆叠到形状(4,512,512,3)的单个数组中,并且只要gpu可以将它们适配到内存中,对所有四个图像的推断将并行进行。
它可能看起来像这样:
加载图表并打开会话
每个读取帧并填充队列的摄像机的启动线程
启动单个推理线程,该线程从队列中读取帧并依次或分批推断帧