Jetson Orin Nano 实战:解决CSI摄像头绿色画面与YOLOv5部署全流程
刚拿到Jetson Orin Nano时,那种兴奋感就像孩子拿到新玩具。但当我兴冲冲地连接CSI摄像头准备跑YOLOv5时,屏幕上却出现了一片诡异的绿色——这恐怕是许多开发者遇到的第一个"欢迎仪式"。本文将带你系统解决这个经典问题,并完成完整的YOLOv5部署。
1. 问题诊断:为什么CSI摄像头显示异常
1.1 硬件与协议差异
CSI摄像头与USB摄像头的工作机制截然不同:
| 特性 | CSI摄像头 | USB摄像头 |
|---|---|---|
| 接口协议 | MIPI CSI-2 | USB Video Class (UVC) |
| 数据处理 | 需要专用ISP处理 | 已编码的压缩流 |
| Linux设备 | /dev/video0 | /dev/video1 |
| 典型分辨率 | 3280×2464 (IMX219) | 640×480 |
关键发现:当OpenCV未启用GStreamer支持时,CSI摄像头的数据流无法正确解析,导致绿色画面。
1.2 验证摄像头状态
先确认硬件连接正常:
# 列出视频设备 ls /dev/video* # 测试CSI摄像头 nvgstcapture-1.0如果看到绿色画面,继续以下诊断:
import cv2 print(cv2.getBuildInformation()) # 检查GStreamer是否为YES2. 编译支持GStreamer的OpenCV
2.1 卸载冲突包
sudo pip3 uninstall opencv-python sudo apt-get purge libopencv*2.2 准备编译环境
sudo apt-get update sudo apt-get install -y \ cmake g++ git \ libgstreamer1.0-dev \ libgstreamer-plugins-base1.0-dev \ libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev2.3 编译安装OpenCV 4.5.4
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.4.zip unzip opencv.zip && cd opencv-4.5.4 mkdir build && cd build关键配置选项:
cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D WITH_GSTREAMER=ON \ -D WITH_CUDA=ON \ -D CUDA_ARCH_BIN='8.7' \ -D BUILD_EXAMPLES=OFF ..编译优化技巧:
make -j$(nproc) # 使用所有核心 sudo make install3. YOLOv5环境部署
3.1 PyTorch for Jetson选择
JetPack 5.1.1对应的正确组合:
wget https://nvidia.box.com/shared/static/ssf2v7pf5i245fk4i0q926hy4imzs2ph.whl -O torch-1.14.0a0+44dac51c.nv23.02-cp38-cp38-linux_aarch64.whl pip3 install torch-1.14.0a0+44dac51c.nv23.02-cp38-cp38-linux_aarch64.whl3.2 安装YOLOv5
git clone https://github.com/ultralytics/yolov5 cd yolov5 pip3 install -r requirements.txt测试USB摄像头:
python3 detect.py --source 0 --weights yolov5n.pt4. DeepStream集成方案
4.1 安装DeepStream 6.2
sudo apt-get install \ libssl1.1 libgstreamer1.0-0 \ gstreamer1.0-plugins-good gstreamer1.0-plugins-bad下载对应版本的SDK包后:
sudo tar -xvf deepstream_sdk_v6.2.0_jetson.tbz2 -C / cd /opt/nvidia/deepstream/deepstream-6.2 sudo ./install.sh4.2 配置CSI摄像头参数
编辑/opt/nvidia/deepstream/deepstream-6.2/samples/configs/deepstream-app/source1_csi_dec_infer_resnet_int8.txt:
[source0] enable=1 type=5 # CSI类型 camera-width=1280 camera-height=720 camera-fps-n=30 camera-csi-sensor-id=05. DeepStream-Yolo融合部署
5.1 模型转换
git clone https://github.com/marcoslucianops/DeepStream-Yolo.git cd yolov5 python3 ../DeepStream-Yolo/utils/gen_wts_yoloV5.py -w yolov5n.pt5.2 自定义推理配置
修改config_infer_primary_yoloV5.txt:
[property] custom-network-config=yolov5n.cfg model-file=yolov5n.wts5.3 编译运行
cd /opt/nvidia/deepstream/deepstream-6.2/sources/DeepStream-Yolo CUDA_VER=11.4 make -C nvdsinfer_custom_impl_Yolo deepstream-app -c deepstream_app_config.txt6. 性能优化技巧
6.1 内存管理
修改zRAM配置:
sudo nano /etc/systemd/nvzramconfig.sh # 将mem = $(("${totalmem}"/2/"${NRDEVICES}")*1024) # 改为 mem = $(("${totalmem}"*2/"${NRDEVICES}")*1024)6.2 实时监控
使用jtop观察资源占用:
sudo pip3 install -U jetson-stats jtop当看到CSI摄像头终于正常显示画面,YOLOv5的检测框准确框住目标时,那种成就感让人忘记所有调试的煎熬。建议在深夜调试时准备些零食——你永远不知道下一个问题会消耗多少时间。