我有一台运行debian并带有多个USB摄像机的ARM单板计算机。在启动时,它将运行一个Python脚本,该脚本使用opencv分析来自摄像机的图像。
我的问题是,特定摄像头的USB索引号通常可以在启动周期之间更改。
使用“ v4l2-ctl --list-devices”,我可以在CLI中看到数字,但是如何在python中做到这一点?目前,我正在使用一系列try / excepts作为解决方法:
#example
try:
cam1 = video.create_capture(0)
cam2 = video.create_capture(1)
cam3 = video.create_capture(2)
ret,frame = cam1.read()
ret,frame = cam2.read()
ret,frame = cam3.read()
except:
try:
cam1 = video.create_capture(1)
cam2 = video.create_capture(2)
cam3 = video.create_capture(3)
ret,frame = cam1.read()
ret,frame = cam2.read()
ret,frame = cam3.read()
except:
try:
cam1 = video.create_capture(0)
cam2 = video.create_capture(2)
cam3 = video.create_capture(3)
ret,frame = cam1.read()
ret,frame = cam2.read()
ret,frame = cam3.read()
except:
cam1 = video.create_capture(0)
cam2 = video.create_capture(1)
cam3 = video.create_capture(3)
ret,frame = cam1.read()
ret,frame = cam2.read()
ret,frame = cam3.read()
为简便起见,我只列出了3个摄像机,但实际上每个设备最多支持6个摄像机,因此有点毛茸茸。
此外,我需要知道哪个摄像机是哪个摄像机,而在一个引导周期中的“ camera(0)”可能在下一个引导周期中是“ camera(3)”,因此我必须使用对象识别来识别它们。这会增加大量的启动时间,并且如果由于相机彼此靠近且框架重叠而导致相机碰撞而损坏了系统。
我看到pypi有几个v4l python模块可能会有所帮助,但两者的文档都很少,而且我不确定它们是否可以在ARM cpu上使用。
如果有与操作系统相关的解决方案,我也愿意尝试一下。