我正在尝试通过 WSL2 (Ubuntu) 中的 OpenCV 访问我的网络摄像头。我发现这博客文章中解释了如何将 USB 设备连接到 WSL2。usbipd wsl list
在 Windows 命令提示符中运行会列出以下设备:
> usbipd wsl list
BUSID VID:PID DEVICE STATE
1-1 0c45:6725 Integrated Webcam Not attached
1-2 046d:c534 USB Input Device Not attached
1-3 0cf3:e007 Qualcomm QCA61x4A Bluetooth Not attached
1-4 27c6:639c Goodix Moc Fingerprint Not attached
2-2 8564:7000 USB Mass Storage Device Not attached
这里我的机器的集成网络摄像头是一个带有的 USB 设备BUSID 1-1
。我跑去usbipd wsl attach --busid 1-1
将我的集成网络摄像头连接到 WSL。
现在从 WSL 中输入lsusb
以下内容列出设备:
> lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 0c45:6725 Microdia Integrated_Webcam_HD
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
看起来集成网络摄像头已成功连接到 WSL(列为Microdia Integrated_Webcam_HD
)。
这是用于访问网络摄像头的代码:
import cv2
import sys
source = cv2.VideoCapture(0)
win_name = 'Camera Preview'
cv2.namedWindow(win_name, cv2.WINDOW_NORMAL)
while cv2.waitKey(1) != 27: # Escape
has_frame, frame = source.read()
if not has_frame:
break
cv2.imshow(win_name, frame)
source.release()
cv2.destroyWindow(win_name)
这里cv2.VideoCapture()
以索引作为参数。OpenCV文档提及:
如果我使用作为参数运行上面的代码0
,我会得到以下输出:
[ WARN:[email protected]] global /io/opencv/modules/videoio/src/cap_v4l.cpp (889) open VIDEOIO(V4L2:/dev/video0): can't open camera by index
我已将 USB 设备连接到 WSL,但仍然无法访问集成网络摄像头。如果您能提供任何解决此问题的建议,我将不胜感激!
答案1
TL;DL:我遇到了同样的问题,有人在评论中提到的这个 GitHub 对我有用:
https://github.com/PINTO0309/wsl2_linux_kernel_usbcam_enable_conf
我花了一整天时间尝试了很多解决方法,但这是唯一对我有用的方法。
我事先就知道这是与 WSL Kernel 相关的问题,因为网络摄像头在 Virtual Box 上运行的 Ubuntu 22.04 虚拟机上运行良好。
GitHub 页面上没有指定,但你需要先:
1 - 安装usbipd-win
您可以在此处执行所有步骤: https://github.com/dorssel/usbipd-win/wiki/WSL-support
在您设法将您的设备连接到 WSL 之后,并且它会通过命令显示lsusb
,您可以按照他们的教程进行操作。
2-按照此存储库中描述的步骤进行操作
https://github.com/PINTO0309/wsl2_linux_kernel_usbcam_enable_conf
他们在这里描述的所有内容,您都可以在usbipd
安装完成后自行完成,但最大的区别是,他们已经预先配置了一个 .config 文件来编译内核,以便网络摄像头正常工作。(对我来说,它就像魔术一样有效)
我在Windows 11 Pro Build 22621
,我的网络摄像头是集成的,兼容uvcvideo
,我将在这里发布完整的规格:
$ v4l2-ctl -d /dev/video0 --all
Driver Info:
Driver name : uvcvideo
Card type : Integrated_Webcam_HD: Integrate
Bus info : usb-vhci_hcd.0-1
Driver version : 5.15.90
Capabilities : 0x84a00001
Video Capture
Metadata Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
Width/Height : 640/480
Pixel Format : 'MJPG' (Motion-JPEG)
Field : None
Bytes per Line : 0
Size Image : 614989
Colorspace : Default
Transfer Function : Default (maps to Rec. 709)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization : Default (maps to Full Range)
Flags :
Crop Capability Video Capture:
Bounds : Left 0, Top 0, Width 640, Height 480
Default : Left 0, Top 0, Width 640, Height 480
Pixel Aspect: 1/1
Selection Video Capture: crop_default, Left 0, Top 0, Width 640, Height 480, Flags:
Selection Video Capture: crop_bounds, Left 0, Top 0, Width 640, Height 480, Flags:
Streaming Parameters Video Capture:
Capabilities : timeperframe
Frames per second: 30.000 (30/1)
Read buffers : 0
brightness 0x00980900 (int) : min=-64 max=64 step=1 default=0 value=0
contrast 0x00980901 (int) : min=0 max=95 step=1 default=0 value=0
saturation 0x00980902 (int) : min=0 max=100 step=1 default=64 value=64
hue 0x00980903 (int) : min=-2000 max=2000 step=1 default=0 value=0
white_balance_temperature_auto 0x0098090c (bool) : default=1 value=1
gamma 0x00980910 (int) : min=100 max=300 step=1 default=100 value=100
gain 0x00980913 (int) : min=1 max=8 step=1 default=1 value=1
power_line_frequency 0x00980918 (menu) : min=0 max=2 default=2 value=1 (50 Hz)
0: Disabled
1: 50 Hz
2: 60 Hz
white_balance_temperature 0x0098091a (int) : min=2800 max=6500 step=1 default=4600 value=4600 flags=inactive
sharpness 0x0098091b (int) : min=1 max=7 step=1 default=2 value=2
backlight_compensation 0x0098091c (int) : min=0 max=3 step=1 default=3 value=3
exposure_auto 0x009a0901 (menu) : min=0 max=3 default=3 value=3 (Aperture Priority Mode) 1: Manual Mode
3: Aperture Priority Mode
exposure_absolute 0x009a0902 (int) : min=9 max=625 step=1 default=157 value=157 flags=inactive
exposure_auto_priority 0x009a0903 (bool) : default=0 value=0
下面是我的相机工作的截图(当然,我把手指放在了它前面,但图像很好) 相机与来自 PINTO0309 的 github 教程脚本配合使用