[英]OpenCV won't detect usb camera, only csi camera
我一直在使用运行 Ubuntu 的 Jetson。 有两个摄像头连接到它。 使用 gstreamer 和 USB uv(紫外线)相机的 CSI 相机。
我可以很好地检测和运行 CSI 摄像头。 但是每当我尝试连接到 USB 相机时,它要么会抛出错误,要么会尝试连接到 CSI 相机。
这是我尝试让 USB 相机工作的测试代码的最新版本:
import cv2
# Create the capture objects
usb_cap = cv2.VideoCapture(1)
# If they aren't opened correctly
if not usb_cap.isOpened():
print("Cannot open usb camera")
exit()
# Set usb477 height and width
usb_cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
usb_cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
# Window
while True:
# Capture frame-by-frame
usb_read, usb_frame = usb_cap.read()
# if frame isn't read correctly
if not usb_read:
print("Can't receive frame from usb (stream end?).\nExiting.")
break
# Display the resulting frame
cv2.imshow("USB frame", usb_frame)
# Escape the loop by pressing 'q'
if cv2.waitKey(1) == ord('q'):
break
# When everything done, release the capture
usb_cap.release()
cv2.destroyAllWindows()
运行它会抛出这一系列错误:
[ WARN:0] global /usr/local/src/opencv-4.4.0/modules/videoio/src/cap_gstreamer.cpp (935) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
[ WARN:0] global /usr/local/src/opencv-4.4.0/modules/videoio/src/cap_gstreamer.cpp (1761) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Internal data stream error.
[ WARN:0] global /usr/local/src/opencv-4.4.0/modules/videoio/src/cap_gstreamer.cpp (515) startPipeline OpenCV | GStreamer warning: unable to start pipeline
Can't receive frame from usb (stream end?).
Exiting.
[ WARN:0] global /usr/local/src/opencv-4.4.0/modules/videoio/src/cap_gstreamer.cpp (480) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
如果有人至少可以尝试为我指出解决此问题的正确方向,我将不胜感激。
您必须指定 V4L 捕获后端才能使用 V4L 控件。 似乎在这里没有指定它,使用gstreamer后端,它用v4l2src实例化一个管道,但你不能在创建后更改分辨率。
所以最简单的解决方案就是使用 V4L2 捕获后端:
usb_cap = cv2.VideoCapture(1, cv2.CAP_V4L2)
或构建一个 gstreamer 管道,您可以在其中指定大小(最好设置帧速率):
pipeline='v4l2src device=/dev/video1 ! video/x-raw,width=1280,height=720 ! videoconvert ! video/x-raw,format=BGR ! appsink drop=1'
usb_cap = cv2.VideoCapture(pipeline, cv2.CAP_GSTREAMER)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.