树莓派接多个USB摄像头,使用opencv打开指定的某一个摄像头

问题描述:

在树莓派上使用多个USB摄像头时,如何确定各个摄像头所对应的id?
比如,当有两个摄像头时,我尝试一个为cv2.VideoCapture(0),一个为cv2.VideoCapture(1),通过看捕获的图像,可以确定各摄像头的id,但这个顺序不是固定的,树莓派在通电的时候,哪一个摄像头先通电的,哪一个就是0,下一个就是1,2,3,4,5…
但这样毕竟很被动,在我们的代码上就很麻烦了,没办法确定摄像头是那一个!


现在我们就来解决这个问题(全网首份保姆级教程):

1.查看USB摄像头的ID

在终端上输入lsusb

lsusb

树莓派接多个USB摄像头,使用opencv打开指定的某一个摄像头_第1张图片
我这里使用了2个USB摄像头,通过插拔,确定摄像头的ID是哪个!


2.将端口重映射到新的固定的名字:

将端口重映射到新的固定的名字,并且设置其权限为可读。使用对应的id端口映射到固定的名字上(看不懂无所谓,按教程来,往下走)
终端输入:

sudo vi /etc/udev/rules.d/rplidar.rules

1.按i,进入编辑模式
2.复制以下代码,修改ID,自定义设备的名字

KERNEL=="video*", ATTRS{idVendor}=="038f", ATTRS{idProduct}=="6001", MODE:="0777", SYMLINK+="people_video"

树莓派接多个USB摄像头,使用opencv打开指定的某一个摄像头_第2张图片
3.按Esc,输入 :wq (保存退出)
创建生效后重新插拔一下USB摄像头


3.查看USB摄像头是否重映射:

ls -l /dev |grep video

树莓派接多个USB摄像头,使用opencv打开指定的某一个摄像头_第3张图片
我这里两个摄像头都映射成功了!


4.在树莓派python上的应用:

平时我们是这样子使用的:
cap = cv2.VideoCapture(0) # 打开USB摄像头对象

现在精准打开某个摄像头

cap = cv2.VideoCapture("/dev/people_video")  # 打开人体识别摄像头
cap = cv2.VideoCapture("/dev/goods_video")  # 打开物体识别摄像头

总结:理论上不管USB摄像头插在那个usb端口上,什么时候上电,都能通过 /dev/people_video (自己定义的名字)打开相对应的摄像头

遇到的问题:

树莓派接多个USB摄像头,使用opencv打开指定的某一个摄像头_第4张图片

你可能感兴趣的:(树莓派,Linux,opencv,python,usb)