OAK-1相机被系统识别但未出现在视频设备列表,如何通过OpenCV调用?
OAK-1相机被系统识别但未出现在视频设备列表,如何通过OpenCV调用?
我来帮你梳理下这个问题的解决思路——核心原因是OAK-1这类搭载Movidius MyriadX芯片的相机,默认并不以标准UVC(USB视频类)设备的身份暴露给系统,所以它不会出现在/dev/video*列表里,Cheese这类依赖UVC的工具自然也识别不到。下面给你几个可行的解决方向:
方向一:切换OAK-1到UVC兼容模式
部分OAK设备支持切换到UVC模式,这样系统就会把它当成普通摄像头识别。你可以按以下步骤操作:
- 先安装
usb-modeswitch工具(用于切换USB设备的工作模式):sudo apt update && sudo apt install usb-modeswitch - 针对你的OAK-1设备(VID:03e7,PID:2485)执行模式切换命令:
sudo usb-modeswitch -v 03e7 -p 2485 -J - 切换完成后,重新执行
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




