固定usb摄像头/dev/video*设备号的方法(固定串口设备号)--树莓派

#问题来源

当我们在树莓派使用CV库调用摄像头时使用cv2.VideoCapture("dev/video0")时,往往需要通过命令:

ls /dev/video*查看设备序列号,因为通常,USB设备插入时,系统会根据检测顺序分配设备号,比如video0、video1等。如果用户有多个摄像头,或者有时插拔顺序不同,设备号就会变化。而在一些需要自动化场景下我们绝对不可能手动查看序列号再修改代码,这时候需要一种方法来固定设备号,不管摄像头插在哪个USB口或者什么时候插入,设备号都保持一致。

#问题解决

要解决这个问题并实现设备号固定,可以通过 udev 规则 为摄像头绑定一个固定的设备名(如 /dev/camera_front),无论物理设备号如何变化,都能通过固定名称访问。

#1.ls /dev/video*查看摄像头序列号

插拔摄像头,分别输入ls /dev/video*观察两次序列号变化,多出来的一对就是摄像头序列号

#2.输入命令

# 假设摄像头当前设备号为 /dev/video0
udevadm info --name=/dev/video0 --attribute-walk

鼠标往下滑并同时不断按enter键,找到以下信息:

ATTRS{idVendor}=="046d"        # 厂商ID(十六进制)
ATTRS{idProduct}=="082d"       # 产品ID(十六进制)
ATTRS{serial}=="1234567890"    # 设备序列号(如果有)

#3.创建 udev 规则文件

#3.1 新建一个 udev 规则文件(文件名格式:数字-名称.rules):

sudo nano /etc/udev/rules.d/99-usb-camera.rules

#3.2 写入规则

按厂商ID和产品ID绑定(这种我失败了)

SUBSYSTEM=="video4linux", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="082d", SYMLINK+="camera_front"

或者按序列号绑定(更精确,需设备支持):

SUBSYSTEM=="video4linux", ATTRS{serial}=="1234567890", SYMLINK+="camera_R"

--camera_Rs是名称,随便起

----12345678/046d/082d是步骤2查找的序列号信息

#3.3重新加载 udev 规则

sudo udevadm control --reload
sudo udevadm trigger

#4验证成果

拔插摄像头,检查设备符号链接是否生成:

ls -l /dev/camera_R  #camera_R是你起的名字

输出应类似:

lrwxrwxrwx 1 root root 6 Jan 1 00:00 /dev/camera_R -> video0

成功后我们就可以用
cv2.VideoCapture("/dev/camera_R")直接访问摄像头啦~~~~~

创作不易,希望鼓励o( ̄▽ ̄)d点赞,欢迎留言评论不足

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值