我已按照本教程进行操作: https://github.com/dorssel/usbipd-win/wiki/WSL-support#usbip-client-tools
我成功将 USB 摄像头与 WSL2 连接,但无法连接打开摄像头。
$lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 046d:08cb Logitech, Inc. Mic (Notebooks Pro)
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
我的摄像头 USB 是 Logitech, Inc. Mic (Notebooks Pro) 和我的程序:
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
if ret:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
cv2.destroyAllWindows()
它显示
[ WARN:[email protected]] global /io/opencv/modules/videoio/src/cap_v4l.cpp (889) open VIDEOIO(V4L2:/dev/video0): can't open camera by index
我已使用 v4l-utils 来查询容器的视频设备
v4l2-ctl --list-devices
Failed to open /dev/video0: No such file or directory
我在设备驱动程序中添加了一些配置,如 @NotTheDr01ds 所说,现在我的相机使用命令显示在 WSL2 中
v4l2-ctl --list-devices
UVC Camera (046d:08c9) (usb-vhci_hcd.0-1):
/dev/video0
/dev/video1
但是当我尝试运行我的程序时,它显示
[ WARN:[email protected]] global /io/opencv/modules/videoio/src/cap_v4l.cpp (1000) tryIoctl VIDEOIO(V4L2:/dev/video0): select() timeout.
相机的灯亮了,但是无法捕捉到任何东西。我已经尝试过以下命令:
lsmod
rmmod uvcvideo
modprobe uvcvideo nodrop=1 timeout=5000
但它显示错误
rmmod uvcvideo
rmmod: ERROR: Module uvcvideo is builtin.
我还没有找到任何解决方案。有什么建议吗??
看来在将 USB 摄像头连接到 WSL2 并通过 OpenCV 访问时遇到了常见问题。错误信息表明的系统虽然识别了摄像头,但无法打开视频流。
以下是可能导致此问题的几个原因和解决方案:
1. 权限问题:
-
确保在 WSL2 中以具有访问
/dev/video0
的权限的用户身份运行代码。 可以尝试使用sudo
运行的 Python 脚本。 -
检查
/dev/video0
的权限。 可以使用ls -l /dev/video0
查看。 确保的用户或所属组拥有读写权限。可以使用sudo chmod a+rw /dev/video0
添加权限。
2. 驱动程序问题:
-
虽然提到相机在 WSL2 中可见,但驱动程序可能仍然存在问题。 尝试更新驱动程序:
- 在 Windows 中,打开设备管理器,找到的摄像头,右键单击并选择“更新驱动程序”。
-
也可以尝试在 WSL2 中卸载并重新加载
uvcvideo
模块:bash sudo modprobe -r uvcvideo sudo modprobe uvcvideo
3. 资源冲突:
- 其他程序(例如在 Windows 中运行的视频会议软件)可能正在使用摄像头。 确保没有其他程序在使用摄像头。
4. OpenCV 版本和配置:
- 确保使用的是最新版本的 OpenCV。 较旧的版本可能存在与 WSL2 的兼容性问题。
-
还可以尝试使用不同的视频后端。 在的 Python 代码中,尝试将
cv2.VideoCapture(0)
更改为cv2.VideoCapture(0, cv2.CAP_DSHOW)
或cv2.VideoCapture(0, cv2.CAP_V4L2)
。
5. USBIP 连接问题:
-
虽然已成功连接摄像头,但连接可能不稳定。 尝试断开摄像头连接并重新连接:
-
在 Windows 中,使用
usbipd -d
命令断开摄像头连接。 -
使用
usbipd -a
命令重新连接摄像头。
-
在 Windows 中,使用
6. 硬件问题:
- 在极少数情况下,的摄像头可能存在硬件问题。 尝试将摄像头连接到其他计算机以测试其功能。
调试步骤:
-
运行
dmesg
命令查看系统日志中是否有与摄像头相关的错误消息。 -
使用
v4l2-ctl -d /dev/video0 --all
命令检查摄像头设置。 -
尝试使用其他程序(例如
cheese
或guvcview
)访问摄像头,以查看问题是否出在 OpenCV 代码中。
请尝试以上解决方案,并提供更多信息,例如:
- 使用的 WSL2 版本。
- 的 Windows 版本。
- 使用的 OpenCV 版本。
- 运行 Python 代码时遇到的完整错误消息。
这将有助于我们更好地诊断问题并提供更具体的解决方案。
标签:python,opencv,windows-subsystem-for-linux,uvc From: 72255353