背景
我們在一個工廠智能化改造中,使用了樹莓派連接4個USB攝像頭,進行取圖和分析,但是在調試過程中,發現總是只能讀取一個攝像頭數據,其他攝像頭都顯示timeout。
問題現象
opencv版本:4.5.5.62
cap_v4l.cpp (1000) tryIoctl VIDEOIO(V4L2:/dev/video2): select() timeout.
cap_v4l.cpp (1000) tryIoctl VIDEOIO(V4L2:/dev/video4): select() timeout.
cap_v4l.cpp (1000) tryIoctl VIDEOIO(V4L2:/dev/video6): select() timeout.
解決辦法
前提:確保usb供電充足,我們使用了一個帶有額外供電的usb hub解決供電問題。
將所有攝像頭的初始化操作由
cap = cv2.VideoCapture(0)
改為
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280.0)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720.0)
cap.set(cv2.CAP_PROP_FOURCC,cv2.VideoWriter_fourcc('M','J','P','G'))
即可解決