JetRacer(JetsonNano)CSI摄像头二次调用需要重启问题Could not initialize camera. Please see error trace.

问题描述:

       JetRacer小车的自动跟随实验例程中,用interactive_regression.ipynb文件进行收集数据和训练模型,用road_following.ipynb文件进行测试。两个文件都涉及到摄像头的调用,但是在摄像头被调用初始化之后,第二次初始化摄像头总是会报错,即使中断前面调用摄像头的程序也是如此。报错如下图,“Could not initialize camera. Please see error trace.“

问题分析:

       Opencv的文档

https://docs.opencv.org/master/d8/dfe/classcv_1_1VideoCapture.html#a57c0e81e83e60f36c83027dc2a188e80

下图高亮代码处,把GStreamer pipeline string和cv2.CAP_GSRREAMER传入cv2.VideoCapture()函数进行捕获视频流,在未释放该视频流之前,不能二次对摄像头进行初始化,所以屡屡报错。

 ​​​​

 

理论上,self.cap.release()方法会在特定情况下被自动调用以释放摄像头,该情况描述如下图高亮处。但是VideoCapture::open方法在csi_camera.py文件中并未调用,而VideoCapture destructor可能(妄自猜测)在我们简单中断JupyterLab内核时并没有被调用,所以导致release()方法一直没有被调用,从而导致摄像头没有被释放,二次调用报错。

解决方案:

       既然知道是因为release()方法没有被调用,那么我们在csi_camera.py文件里手动添加释放摄像头的方法就可以啦。如下图:

       然后,在用完摄像头之后,调用该方法,运行结果如下,成功释放摄像头,红色报错是因为释放了摄像头,图像无法继续获取,后续可以在本文件或这其他文件继续使用摄像头啦!

注意:

只在JupyterLab上更改jetcam文件夹里的csi_camera.py文件不会生效,因为自动跟随例程序引入的模块是/usr/local/lib/python3.6/dist-packages/jetcam-0.0.0-py3.6.egg/jetcam/csi_camera.py。由于我们进入JetsonNano开发板的Linux系统不方便,所以建议把JupyterLab上/jetcam/jetcam/csi_camera.py文件和/jetcam/jetcam/camera.py文件复制到例程当前文件夹,做修改并正确引入,即可解决问题。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值