Linux下opencv无法打开摄像头

   日期:2020-08-21     浏览:380    评论:0    
核心提示:RK3399PRO打不开UVC摄像头今天在RK3399PRO上源码编译完opencv,测试神奇的事情发生了,/dev/video0-9标号都占用了,然而并没有插入摄像头。查找了半天原因,准备删除这些设备节点,都不见成效,终于忍不住了,不在我考虑删除,拿出搞ROS期间用过的绝技,linux udev固定设备号/多路USB固定设备号下面就来详细描述这个过程吧!1.问题记录1.1 获得摄像头的index详细情况v4l2-ctl --list-devices如果提示没有v4l2,使用sudo ap

RK3399PRO打不开UVC摄像头

今天在RK3399PRO上源码编译完opencv,测试神奇的事情发生了,/dev/video0-9标号都占用了,然而并没有插入摄像头。
查找了半天原因,准备删除这些设备节点,都不见成效,终于忍不住了,不再去考虑删除,拿出搞ROS期间用过的绝技,linux udev固定设备号/多路USB固定设备号
下面就来详细描述这个过程吧!

1.问题记录

1.1 获得摄像头的index详细情况

v4l2-ctl --list-devices


如果提示没有v4l2,使用sudo apt-get install v4l-utils安装

sudo apt-get install v4l-utils

1.2 查看设备节点情况

ls -l /dev/video* -l

插上uvc摄像头,多了 /dev/video10 和 /dev/video11,此处直接多了两个标号,感觉像是RK3399PRO的bug

2.解决过程

2.1 查看 /dev/video10 和 /dev/video11详细信息

udevadm info --attribute-walk --name=/dev/video10
udevadm info --attribute-walk --name=/dev/video11

2.2 使用udev规则创建usb摄像头挂载点映射

在 /etc/udev/rules.d/*.rules (任意rules下),添加如下规则

SUBSYSTEM=="video*",ATTRS{idVendor}=="05a3",ATTRS{idProduct}=="9750",MODE="0666",SYMLINK+="video1"

`如果只配置ATTRS{idVendor},ATTRS{idProduct}这两个id参数,会随机指定一个 /dev/video10 和 /dev/video11映射到指定的 /dev/video1 ,由于RK3399PRO的bug的存在(插入一个usb摄像头会产生两个video标号),不能满足使用要求。

通过观察2.1的详细信息,发现 /dev/video10 和 /dev/video11的ATTR{index}不同(分别为0、1),又指定ATTR{index}实现分别对应映射

SUBSYSTEM=="video*",ATTRS{idVendor}=="05a3",ATTRS{idProduct}=="9750",ATTR{index}=="0",MODE="0666",SYMLINK+="video0"
SUBSYSTEM=="video*",ATTRS{idVendor}=="05a3",ATTRS{idProduct}=="9750",ATTR{index}=="1",MODE="0666",SYMLINK+="video1"

结果如下:

/etc/udev/rules.d/*.rules里内容如下:

总结:Linux下opencv无法打开摄像头,/dev/video 设备节点被占用,无法删除,转变思路,使用udev规则创建usb摄像头挂载点映射,固定设备节点名称,这样我们就可以继续愉快的开发了。

感谢阅读,我是智科创玩,希望文章能够解决您的问题。
事为之,须极致!

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服