jetson yolov3 csi


原文链接: 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"

简单说明一下配置中的一些变量:

  1. 首先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
    简单来说这段就是配置摄像头获取的画面大小和帧数;

  2. 然后是(nvvidconv flip-method=2)这段在官网也有示例:
    https://developer.ridgerun.com/wiki/index.php?title=Jetson_Nano/Gstreamer/Example_Pipelines/Transforming
    作用是旋转画面;

  3. 最后是(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)
    用我的话来说就是进行一个格式调整

Step 3:效果展示

在这里插入图片描述

`