问题描述
我正在尝试使用 raspbian 操作系统在 raspBerry pi 4 上运行两个网络摄像头。它很少在非常低的 FPS 下工作。大多数时候我都会收到此错误:
[ WARN:0] global /tmp/pip-wheel-qd18ncao/opencv-python/opencv/modules/videoio/src/cap_v4l.cpp (1004) tryIoctl VIDEOIO(V4L2:/dev/video0): select() timeout. No more frames
我从操作系统中删除了 uvcvideo 模块,然后我用新参数安装了它:
sudo rmmod uvcvideo
sudo modprobe uvcvideo nodrop=1 timeout=5000 quirks=0x80
相机运行速度很快,但在一台相机上存在问题: Two camera problem on Raspberry pi 4
如果我一一运行相机,就没有问题。不过我觉得还是慢了。
我需要同时运行两个摄像头,我该如何解决?
我使用最新版本的 Raspbian: 带桌面的树莓派操作系统 发布日期:2021 年 5 月 7 日
相机:Microsoft LifeCam Studio - 型号:1425 (我之前用过两个便宜的相机也遇到了同样的问题)
我通过 USB 3.0 端口连接它们
我正在使用 python3 和 opencv 用我的代码同时拍摄一些照片:
我的代码:
import cv2
# Set the values for your cameras
capL = cv2.VideoCapture(2)
capR = cv2.VideoCapture(0)
# Use these if you need high resolution.
capL.set(cv2.CAP_PROP_FRAME_WIDTH,640) # width
capL.set(cv2.CAP_PROP_FRAME_HEIGHT,480) # height
capR.set(cv2.CAP_PROP_FRAME_WIDTH,640) # width
capR.set(cv2.CAP_PROP_FRAME_HEIGHT,480) # height
i = 1
def main():
global i
while True:
# Grab and retreive for sync
if not (capL.grab() and capR.grab()):
print("No more frames")
break
_,leftFrame = capL.retrieve()
_,rightFrame = capR.retrieve()
cv2.imshow('capL',leftFrame)
cv2.imshow('capR',rightFrame)
key = cv2.waitKey(1)
if key == ord('q'):
break
elif key == ord('c'):
cv2.imwrite("left/" + str(i) + ".png",leftFrame)
cv2.imwrite("right/" + str(i) + ".png",rightFrame)
i += 1
capL.release()
capR.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
main()
更新:我发现问题出在 USB 带宽上。我将这个神奇的 2 行代码添加到我的程序中,并且它起作用了!
capL.set(cv2.CAP_PROP_FPS,10)
capL.set(cv2.CAP_PROP_FPS,10)
是的,10 FPS 非常低,但对我来说已经足够了。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)