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

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

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

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

ubuntu上python使用opencv调用usb摄像头无故掉线以后重连摄像头。_第1张图片

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

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

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

ubuntu上python使用opencv调用usb摄像头无故掉线以后重连摄像头。_第2张图片

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

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

lsusb -t

ubuntu上python使用opencv调用usb摄像头无故掉线以后重连摄像头。_第3张图片 

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

ll /sys/bus/usb/devices

ubuntu上python使用opencv调用usb摄像头无故掉线以后重连摄像头。_第4张图片

查看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 打开摄像头就行了。 

你可能感兴趣的:(opencv,ubuntu,python)