You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

OAK-1相机被系统识别但未出现在视频设备列表,如何通过OpenCV调用?

OAK-1相机被系统识别但未出现在视频设备列表,如何通过OpenCV调用?

我来帮你梳理下这个问题的解决思路——核心原因是OAK-1这类搭载Movidius MyriadX芯片的相机,默认并不以标准UVC(USB视频类)设备的身份暴露给系统,所以它不会出现在/dev/video*列表里,Cheese这类依赖UVC的工具自然也识别不到。下面给你几个可行的解决方向:

方向一:切换OAK-1到UVC兼容模式

部分OAK设备支持切换到UVC模式,这样系统就会把它当成普通摄像头识别。你可以按以下步骤操作:

  1. 先安装usb-modeswitch工具(用于切换USB设备的工作模式):
    sudo apt update && sudo apt install usb-modeswitch
    
  2. 针对你的OAK-1设备(VID:03e7,PID:2485)执行模式切换命令:
    sudo usb-modeswitch -v 03e7 -p 2485 -J
    
  3. 切换完成后,重新执行ls /dev/video*,看看是否出现了新的视频设备节点。如果有,就可以直接用OpenCV的VideoCapture调用对应的设备号(比如新出现的/dev/video2就用cv.VideoCapture(2))。

方向二:退而求其次,用DepthAI配合OpenCV处理(虽然你不想用,但这个方案最稳定)

如果UVC模式切换失败,其实DepthAI库并没有你想象的那么复杂,它可以直接调用OAK-1的摄像头,并且能把捕获的帧转换成OpenCV的Mat格式,完全满足你用OpenCV处理画面的需求。这里给你一个极简示例代码:

import depthai as dai
import cv2

# 创建相机管道
pipeline = dai.Pipeline()
# 配置彩色相机
cam_rgb = pipeline.createColorCamera()
cam_rgb.setPreviewSize(640, 480)  # 设置预览分辨率
cam_rgb.setInterleaved(False)     # 非交错格式,适配OpenCV

# 创建输出流
xout_rgb = pipeline.createXLinkOut()
xout_rgb.setStreamName("rgb")
cam_rgb.preview.link(xout_rgb.input)

# 启动设备并捕获画面
with dai.Device(pipeline) as device:
    q_rgb = device.getOutputQueue(name="rgb", maxSize=4, blocking=False)
    while True:
        in_rgb = q_rgb.get()
        # 转换成OpenCV可用的帧格式
        frame = in_rgb.getCvFrame()
        cv2.imshow("OAK-1 Camera", frame)
        # 按q键退出
        if cv2.waitKey(1) == ord('q'):
            break
cv2.destroyAllWindows()

额外排查点

  • 确认你的OAK-1固件是否支持UVC模式:有些旧版本固件可能没有这个功能,可以尝试更新固件(不过更新过程需要用到DepthAI工具)。
  • 检查系统权限:确保当前用户属于video用户组,执行sudo usermod -aG video $USER,然后重新登录试试。

备注:内容来源于stack exchange,提问作者Thaidy Deguchi

火山引擎 最新活动