首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WSL - webcam USB :不能按索引打开摄像机

WSL - webcam USB :不能按索引打开摄像机
EN

Stack Overflow用户
提问于 2022-05-16 07:10:06
回答 1查看 2.4K关注 0票数 2

我遵循了本教程:https://github.com/dorssel/usbipd-win/wiki/WSL-support#usbip-client-tools

我成功地将我的USB摄像头与我的WSL2连接起来,但无法打开相机。

代码语言:javascript
运行
复制
$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

我的摄像头是Logitech公司的麦克风(笔记本专业),我的程序:

代码语言:javascript
运行
复制
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()

它显示了

代码语言:javascript
运行
复制
[ WARN:0@0.009] global /io/opencv/modules/videoio/src/cap_v4l.cpp (889) open VIDEOIO(V4L2:/dev/video0): can't open camera by index

我使用v4l-utils查询容器的视频设备。

代码语言:javascript
运行
复制
v4l2-ctl --list-devices
Failed to open /dev/video0: No such file or directory

我在设备驱动程序中添加了一些配置,比如@NotTheDr01ds说,现在我的相机用命令显示在WSL2中

代码语言:javascript
运行
复制
v4l2-ctl --list-devices
UVC Camera (046d:08c9) (usb-vhci_hcd.0-1):
        /dev/video0
        /dev/video1

但是当我试图运行我的程序时,它显示了

代码语言:javascript
运行
复制
[ WARN:0@10.310] global /io/opencv/modules/videoio/src/cap_v4l.cpp (1000) tryIoctl VIDEOIO(V4L2:/dev/video0): select() timeout.

照相机的光线是开着的,但不能捕捉到任何东西。我尝试了以下命令:

代码语言:javascript
运行
复制
lsmod
rmmod uvcvideo
modprobe uvcvideo nodrop=1 timeout=5000

但它所显示的错误

代码语言:javascript
运行
复制
rmmod uvcvideo
rmmod: ERROR: Module uvcvideo is builtin.

我还没有找到任何解决办法。有什么建议吗?

EN

Stack Overflow用户

发布于 2022-05-16 12:57:46

到目前为止,我还不能给出一个完整的答案,但到目前为止,我对WSL2下的摄像头支持的了解如下:

  • 第一步是通过USB/IP共享摄像头,但不幸的是,这只是过程的一部分。
  • 默认情况下,WSL2 2的内核也不包括任何媒体驱动程序,因此您肯定需要将它们添加到内核中: sudo apt安装构建-基本的挠性bison矮人libssl-dev libelf-dev libncurses-dev mkdir ~/src cd ~/src git克隆-深度=1 https://github.com/microsoft/WSL2-Linu x-Kernel.git使KCONFIG_CONFIG=Microsoft/config-wsl menuconfig 启用下列选项。所有这些都应该是内置的,而不是模块。该选项的旁边应该有"*“,而不是"M":
代码语言:javascript
运行
复制
- Select Device Drivers -> Enable Multimedia support
代码语言:javascript
运行
复制
- Select Multimedia support -> Media Drivers: Enable Media USB Adapters
代码语言:javascript
运行
复制
- Select Media USB Adapters: Enable USB Video Class (UVC)
代码语言:javascript
运行
复制
- Save the config to "Microsoft/config-wsl.uvc" (or whatever you want to call it)
代码语言:javascript
运行
复制
- Exit menuconfig

让KCONFIG_CONFIG=Microsoft/config-wsl.uvc

代码语言:javascript
运行
复制
- (A bit fuzzy on the details here since it's been a few weeks since I did it) Copy the platform `bzImage` to a location on your Windows drive.
代码语言:javascript
运行
复制
- Update the `.wslconfig` file in your _Windows_ user profile directory to point to the new kernel (see [here](https://learn.microsoft.com/en-us/windows/wsl/wsl-config#configuration-setting-for-wslconfig) for starters).
代码语言:javascript
运行
复制
- `wsl --shutdown` and restart to load the new kernel
代码语言:javascript
运行
复制
- Confirm it is in play with `uname -a`
代码语言:javascript
运行
复制
- Still working on this part, but it seems to help if you disable the device driver for the camera in Windows.  Otherwise Linux and Windows will be fighting for control.

即使有了所有这些,我还没能捕捉到视频。我至少可以让相机出现在WSL2之后,就像v4l2-ctl --list-devices所证明的那样。

希望这至少能帮你取得一些进展。我想知道你是否完全解决了这个问题。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72255353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档