jetson yolov3 csi
jetson-nano项目:使用csi摄像头运行yolov3-tiny demo
前言
首先jetson-nano的介绍啥的我就不在此赘述了,本文主要是针对yolov3本身不支持csi摄像头的问题提供一种解决方法,便于以后运用到一些同时涉及yolov3和csi摄像头的项目中。
Step 1:安装GStreamer
具体操作方法参考链接https://blog.csdn.net/qq_35759574/article/details/90401535
Step 2:配置GStreamer管道
首先说一下思路:由于yolov3本身不支持csi摄像头,因此需要通过GStreamer来对csi摄像头获取的视频进行预处理,然后提交给yolov3进行识别判定,而这一过程重点就是GStreamer管道的配置,以下是博主的管道配置
// 仅适用于jetson-nano运行yolov3-tiny demo。注意请在darknet的文档页下打开terminal输入
./darknet detector demo cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights "nvarguscamerasrc ! video/x-raw(memory:NVMM), width=1280, height=720, format=NV12, framerate=30/1 ! nvvidconv flip-method=2 ! video/x-raw, width=1280, height=720, format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink"
简单说明一下配置中的一些变量:
首先GS管道的配置是从weights后开始的,前半部分是运行yolov3-tiny demo的一些配置,对于使用yolov3的小伙伴只需要将(yolov3-tiny)改为(yolov3)就能兼容运行了,不过讲道理nano 4g的运行内存跑yolov3难度应该挺大的;(nvarguscamerasrc ! video/x-raw(memory:NVMM), width=1280, height=720, format=NV12, framerate=30/1)这段可以参考官网的示例:https://developer.ridgerun.com/wiki/index.php?title=Jetson_Nano/Gstreamer/Example_Pipelines/Capture_Display
简单来说这段就是配置摄像头获取的画面大小和帧数;然后是(nvvidconv flip-method=2)这段在官网也有示例:
https://developer.ridgerun.com/wiki/index.php?title=Jetson_Nano/Gstreamer/Example_Pipelines/Transforming
作用是旋转画面;最后是(video/x-raw, width=1280, height=720, format=BGRx ! videoconvert ! video/x-raw, format=BGR)
这段的作用是确保来自CSI相机的原始视频转换为BGR色彩空间。
在OpenCV和许多其他程序里,图像都是按照BGR格式存储。如果不转换,后面无法使用
通过图像管道预转换为BGR,我们确保使用这些硬件模块来转换图像而不是CPU(引用自https://blog.csdn.net/CSDNhuaong/article/details/80172296)
用我的话来说就是进行一个格式调整