最近做项目时发现打开双相机的python程序在自己的笔记本上都可以运行,可是落地的时候放到车间的工作机上就非常不稳定,有时能够打开相机,有时又报错,报错的原因就是有相机没打开。
在网上搜索相关问题,感觉可行的解决方案应该是在通过相机ID来打开相机。于是写了用这样一个程序来暴力检索相机ID
import cv2
cams_test = 1000
for i in range(cams_test,-1,-1):
cap = cv2.VideoCapture(i)
test, frame = cap.read()
if test:
print("i : "+str(i)+" /// result: "+str(test))
然而这样做依旧是不稳定,有时是0,1,700,701。有时是0,700,有时甚至是1,701。这里0和700,1和701代表的是同一个相机。
所以分析这里问题是出在了
cap = cv2.VideoCapture(i)
可能是PC的外接USB的响应速度跟不上,导致一开始相机并没有打开,于是在打开相机的程序前加上一个while循环。
import cv2
import time
while True:
time.sleep(3)
cap1=cv2.VideoCapture(0)
cap2=cv2.VideoCapture(1)
bool1=cap1.isOpened()
bool2=cap2.isOpened()
if bool1 and bool2:
break
while True: