ubuntu上python使用opencv调用usb摄像头无故掉线以后重连摄像头。

项目中使用opencv调用usb摄像头,运行过程中,会出现摄像头掉线的情况。猜测掉线原因是硬件相关,可能是摄像头,也可能是usb线和端口。

这里主要介绍两种掉线情况以及代码重连摄像头的方式。

1.第一种情况,设备在线

当camera读取图片失败时候,可以通过opencv的方法,释放摄像头再打开

camera.release()
camera = cv.VideoCapture(0)

2.第二种情况,设备不在线

video4 和 video5掉线,实际上usb还连着电脑。

碰到这种情况,可以先查看当前usb所在的上级hub。

lsusb -t

 

比如摄像头所在的BUS 01,Port 2 

ll /sys/bus/usb/devices

查看usb的上一级。

然后通过命令行将其重置,需要root权限。 

echo -n "0000:00:14.0" | tee /sys/bus/pci/drivers/xhci_hcd/unbind
echo -n "0000:00:14.0" | tee /sys/bus/pci/drivers/xhci_hcd/bind

也可以用python代码重置

def resetUsbHub(key, hub):
    result = os.system('echo "{}"|sudo -S sh ./usbUnbind.sh {}'.format(key, hub))
    logger.info("卸载usb结果:{}".format(result))
    if result == 0:
        result = os.system('echo "{}"|sudo -S sh ./usbBind.sh {}'.format(key, hub))
        logger.info("加载usb结果:{}".format(result))

sh文件内容 

echo $1|sudo tee /sys/bus/pci/drivers/xhci_hcd/unbind

重置以后就可以发现又能找到video4 和 video5。后续就继续通过opencv 打开摄像头就行了。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值