【环境:Ubuntu18.04系统,python虚拟环境,vscode编写】
概要:
本文涉及以下多种方式的组合尝试:
目录:
1、CSI摄像头连接
1.1 终端连接打开摄像头
1.2 代码读取帧
2、遇到的一些报错(python虚拟环境)
3、用摄像头视频流进行实时的Yolov5检测
4、用摄像头视频流进行实时的tensorrt加速的Yolov5检测
5、 同时调用多个usb摄像头进行YOLOv5实时检测
第一次见到这种小的排线摄像头,怎么连到开发板上呢:接口轻轻往上拉开(建议用指甲),CSI摄像头扁扁的一端有银色裸露的部分,那部分对着接口里面有金属突出的那一面,插入接口以后把接口按下去关上。
检查摄像头是否已连接 :
ls /dev/video*
已连接的话会返回"/dev/video0"或"/dev/video1"(0/1取决于摄像头连的哪一个接口)
终端一行代码连接摄像头,显示于屏幕上:
nvgstcapture
目的:为了之后对摄像头视频进行其它处理,需要能够读取到视频流的每一帧。
两种方式:cv2直接读取帧或者用jetcam模块(其实本质也是通过cv2.VideoCapture来读取,只不过封装好了而已,更便捷)
jetcam安装:
git clone https://github.com/NVIDIA-AI-IOT/jetcam
cd jetcam
sudo python3 setup.py install
发现问题:安装完发现 vscode检测不到刚安装的模块
原因:默认安装在本地/usr/lib/python3.6/dist-packages目录下,所以进入python虚拟环境中import jetcam会失败
可能的解决方法1:
在settings.json中,添加模块安装的文件夹路径,例如:
{
"python.autoComplete.extraPaths": ["/usr/lib/python3.6/dist-packages"]
}
可能的解决方法2:把安装到本地路径的文件拷贝到虚拟环境
找到本地路径,复制jetcam相关的两个文件(一个文件夹,一个.egg文件)到python虚拟环境的site-packages下。本地路径下还有一个easy-install.pth路径,虚拟环境下也有一个同名的文件所以不能直接复制,把里面那一行复制进去即可。
无论是cv2方法还是jetcam方法,都在一开始无法捕捉到csi摄像头,即使在终端是可以打开摄像头的。
报错1:jetcam could not initialize camera
报错2:error: (-215:Assertion failed) size.width>0 && size.height>0 in function ‘imshow‘
还有一个size.width>0的报错,读本地的视频也会这样,查了好久,没有中文路径,反斜杠也没有问题。
最后发现各种报错的根本原因是opencv的版本和设置问题, 因为不会源代码重新编译,所以最便捷的操作是,当初安装开发板系统的时候是默认在本地安装了opencv的,默认路径在/usr/lib/python3.6/dist-packages下,把cv2的文件夹复制到python虚拟环境的site-packages下(为了保险起见把几个包全都复制过去了,只要两个环境的python版本相同即可,没什么坏处)
对于csi摄像头:
jetyolo项目
直接使用参考博文的代码
参考:Yolov5-Serial-CSI_Demo · 语雀
对于usb摄像头:
在运行yolo的detect.py时将source从原先的本地图片视频路径改成 0或者1或者2,对应摄像头序号,即可。
对于csi摄像头:
【暂未解决csi摄像头的tensorrt方式加速检测】
对于usb摄像头:
(文件目录:downloads/forYolo/tensorrtx/yolov5/下的yolo_trt_usb.py)
参考博文的代码修改之处:根据自己摄像头的序号修改:cap = cv2.VideoCapture(1)
# 此处我的0号是csi摄像头,1号是usb摄像头
优点:非常适合做实时的事情,帧率在30-60左右,很高;约有1s延迟
参考:【究极缝合】Jeston Nano环境配置+部署yolov5(master)+Tensorrt加速+usb摄像头测试_鱼鱼症患者的博客-CSDN博客
(文件目录:下载/yolov5master/下的最普通的detect.py)
方法:开启多个terminal同时运行两个detect.py,摄像头源source参数改一下即可:python3 detect.py --source 1
问题1:加到第3个摄像头时,终端运行卡顿直至死机
问题2:如果运行tensorrt加速的yolo检测,无法实现多个摄像头同时检测,打开另一个程序的同时会把上一个进程kill掉
未尝试:csi摄像头是否能和usb摄像头同时运行检测?
参考:
Jeston Nano打开CSI摄像头_哔哩哩哩的博客-CSDN博客
Jetson nano——使用jetcam官方库调用双CSI摄像机,JetsonNano,JetCam,摄像头
Jetson Nano 2GB 系列文章(7):通过 OpenCV 调用 CSI/USB 摄像头 - 知乎
Youtube上发现了个Jetson NX的视频,蛮不错的:
https://toptechboy.com/category/jetson-xavier-nx/#google_vignette
B站也能找到:https://www.bilibili.com/video/av328423873/