首页 > 编程问答 >WSL - 网络摄像头 USB:无法通过索引打开摄像头

WSL - 网络摄像头 USB:无法通过索引打开摄像头

时间:2024-07-29 12:20:12浏览次数:10  
标签:python opencv windows-subsystem-for-linux uvc

我已按照本教程进行操作: 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 命令重新连接摄像头。

6. 硬件问题:

  • 在极少数情况下,的摄像头可能存在硬件问题。 尝试将摄像头连接到其他计算机以测试其功能。

调试步骤:

  1. 运行 dmesg 命令查看系统日志中是否有与摄像头相关的错误消息。
  2. 使用 v4l2-ctl -d /dev/video0 --all 命令检查摄像头设置。
  3. 尝试使用其他程序(例如 cheese guvcview )访问摄像头,以查看问题是否出在 OpenCV 代码中。

请尝试以上解决方案,并提供更多信息,例如:

  • 使用的 WSL2 版本。
  • 的 Windows 版本。
  • 使用的 OpenCV 版本。
  • 运行 Python 代码时遇到的完整错误消息。

这将有助于我们更好地诊断问题并提供更具体的解决方案。

标签:python,opencv,windows-subsystem-for-linux,uvc
From: 72255353

相关文章

  • python 将数字前面的字符替换为数字后面的新字符
    我有一些字符串看起来像:*.rem.1.gz和*.rem.2.gz我想将其替换为*.1.trim.gz和*.2.trim.gz1号文件和2号文件相互配对,我想创建一个单独的字符串来同时包含这两个文件。importosallfiles=os.listdirpair=[x.replace("rem.(\d+)","(\d+).trim")forxinall......
  • 使用python打开UNC文件
    如何使用python通过路径打开网络计算机上的文件?我当前正在使用os.startfile但随后出现错误winerror2:无法打开文件。文件路径是正确的,我可以通过win+R打开该文件。感谢您提供的任何帮助。importwin32wnetimportosdefopen_unc_path(unc_path,usern......
  • Python环境:深入理解与构建实践
    Python环境:深入理解与构建实践在当今的软件开发领域中,Python以其简洁的语法、丰富的库支持和广泛的应用场景,成为了众多开发者、数据科学家、机器学习工程师及自动化测试人员的首选语言。然而,要高效地使用Python进行项目开发,深入理解并合理构建Python环境是至关重要的。本文......
  • 界面自动化测试录制工具,让python selenium自动化测试脚本开发更加方便
    自动化测试中,QTP和seleniumIDE都支持浏览器录制与回放功能,简单的来说就像一个记录操作步骤的机器人,可以按照记录的步骤重新执行一遍,这就是脚本录制。个人觉得传统录制工具有些弊端,加上要定制支持我自己的自动化框架(python单机版自动化测试框架源代码),所以自己用javascript写了一个......
  • Python 面试常问问题及应用场景解析
    引言随着Python在数据科学、Web开发、自动化脚本、机器学习等领域中的广泛应用,越来越多的公司开始寻找具备Python技能的人才。因此,在Python面试中,面试官通常会通过一系列问题来评估应聘者的编程基础、问题解决能力和对Python特性的理解程度。本文将涵盖Python面试中最常见的......
  • python 虚拟环境
    python虚拟环境Python的venv模块允许你创建轻量级的“虚拟环境”,这些环境是独立的Python安装,用于项目的依赖隔离。每个虚拟环境都有自己的Python解释器、库和脚本,与系统中安装的Python相互隔离。这意呀着,你可以在一个项目中安装特定版本的库,而不会影响到系统上其他Pyt......
  • 使用 Azure Devops API (Python) 撰写 PR 评论
    在任何地方都找不到直接的方法。如何通过Python中的AzureDevopsAPI将注释添加到拉取请求?可以使用AzureDevOpsPythonAPI将注释添加到拉取请求。以下是执行此操作的方法:1.安装AzureDevOps库:pipinstallazure-devops2.导入必要的类并对的组......
  • Python\Python312\Lib\site-packages\torch\lib\fbgemm.dll
    在此处输入图像描述我正在尝试从HuggingFace导入GPT-2变压器模型,但当我尝试导入它时,遇到错误。即使当我尝试仅导入Torch时,我也会收到相同的错误。我已尝试重新安装Torch并完成了所有操作,包括更新VisualC++Redistributable软件包和更新我的驱动程序,但问题......
  • Python GEKKO 不更新参数
    我正在Python中使用GEKKO来估计弹跳球的轨迹。为此,我需要估计2个变量:e_1(恢复系数)和q_1(每次弹跳时的水平速度损失)。我已为其编写了以下代码,但参数似乎没有更新,尽管解算器已成功执行。参数的初始值与参数的最终优化值相同e_1=0.8和q_1=1代码:imp......
  • Python内置模块常用总结
    目录unittestunittest点击查看代码importunittestfromhtmltestreportimportHTMLTestReportclassTestOne(unittest.TestCase):@classmethoddefsetUpClass(cls)->None:print(f'setUpClass')@classmethoddeftearDownClass......