Jetson Xavier NX 配置(六)—— 连接CSI和USB摄像头进行Yolov5实时目标检测

【环境:Ubuntu18.04系统,python虚拟环境,vscode编写】

概要:
本文涉及以下多种方式的组合尝试:

  • CSI摄像头orUSB摄像头
  • 单个摄像头or多个摄像头
  • TensorRT加速or不加速

目录:

1、CSI摄像头连接

1.1 终端连接打开摄像头

1.2 代码读取帧

2、遇到的一些报错(python虚拟环境)

3、用摄像头视频流进行实时的Yolov5检测

4、用摄像头视频流进行实时的tensorrt加速的Yolov5检测

5、 同时调用多个usb摄像头进行YOLOv5实时检测


1、CSI摄像头连接

        第一次见到这种小的排线摄像头,怎么连到开发板上呢:接口轻轻往上拉开(建议用指甲),CSI摄像头扁扁的一端有银色裸露的部分,那部分对着接口里面有金属突出的那一面,插入接口以后把接口按下去关上。

1.1 终端连接打开摄像头

        检查摄像头是否已连接      : 

ls /dev/video* 

        已连接的话会返回"/dev/video0"或"/dev/video1"(0/1取决于摄像头连的哪一个接口)

        终端一行代码连接摄像头,显示于屏幕上:

nvgstcapture

1.2 代码读取帧

目的:为了之后对摄像头视频进行其它处理,需要能够读取到视频流的每一帧。

两种方式: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路径,虚拟环境下也有一个同名的文件所以不能直接复制,把里面那一行复制进去即可。

2、遇到的一些报错(python虚拟环境)

无论是cv2方法还是jetcam方法,都在一开始无法捕捉到csi摄像头,即使在终端是可以打开摄像头的。

报错1jetcam could not initialize camera     

报错2error: (-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版本相同即可,没什么坏处)

3、用摄像头视频流进行实时的Yolov5检测

对于csi摄像头: 
        jetyolo项目
        直接使用参考博文的代码
参考:Yolov5-Serial-CSI_Demo · 语雀

对于usb摄像头:
        在运行yolo的detect.py时将source从原先的本地图片视频路径改成 0或者1或者2,对应摄像头序号,即可。

4、用摄像头视频流进行实时的tensorrt加速的Yolov5检测

对于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博客

5、 同时调用多个usb摄像头进行YOLOv5实时检测

(文件目录:下载/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/

对于使用CSI摄像头进行Yolov5实时检测,可以按照以下步骤进行配置: 1. 首先,确保你的CSI摄像头已经正确连接到设备上,并且可以正常工作。 2. 在运行Yolov5的detect.py时,将source参数设置为CSI摄像头的序号。根据引用\[2\]中的说明,可以将source设置为0、1或2,对应不同的摄像头序号。 3. 如果你使用的是Deepstream 5.0,可以按照引用\[3\]中的指示,在Deepstream 5.0目录下运行相应的命令来启动Yolov5实时检测。 综上所述,你可以通过设置source参数为CSI摄像头的序号来使用Yolov5进行CSI摄像头实时检测。 #### 引用[.reference_title] - *1* *2* [Jetson Xavier NX 配置)—— 连接CSIUSB摄像头进行Yolov5实时目标检测](https://blog.csdn.net/yishengjuncat/article/details/121925465)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [yolov5s模型转tensorrt+deepstream检测+CSIUSB摄像头检测](https://blog.csdn.net/weixin_54603153/article/details/120079220)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值