简介:本文详细介绍Jetson Nano套件中CSI相机的配置方法及YOLOv物体检测模型的部署流程,涵盖硬件连接、驱动安装、模型训练与优化等关键步骤,适合开发者快速上手实现边缘端实时物体检测。
Jetson Nano是NVIDIA推出的边缘计算开发套件,专为AIoT场景设计,其GPU算力可达472 GFLOPS(FP16),支持4K视频编解码。CSI(Camera Serial Interface)相机通过MIPI CSI-2协议与Jetson Nano的15针接口直连,相比USB相机具有更低的延迟和更高的带宽。典型应用场景包括智能监控、机器人视觉、工业质检等需要实时处理的场景。
sudo apt update && sudo apt upgrade -y更新软件包,安装必要工具:
sudo apt install -y python3-pip cmake gitpip3 install --upgrade pip setuptools
Jetson Nano默认已集成CSI驱动,但需验证内核模块:
lsmod | grep tegra_video # 应显示tegra_video_csi等模块sudo modprobe tegra_video_csi # 手动加载(通常自动加载)
对于非标准CSI相机,需修改设备树:
/boot/tegra194-p3448-0000-p3449-0000-b00.dtbdtc工具反编译:
sudo apt install device-tree-compilerdtc -I dtb -O dts -o decompiled.dts /boot/tegra194-p3448-0000-p3449-0000-b00.dtb
vi_camera节点参数,添加相机支持(需参考具体相机规格)通过GStreamer验证相机流:
gst-launch-1.0 nvcamerasrc ! 'video/x-raw(memory:NVMM),width=1280,height=720,framerate=30/1' ! nvvideoconvert ! autovideosink
正常应显示相机画面,若出现花屏需检查:
PyTorch安装(推荐1.8.0+CUDA 10.2):
wget https://nvidia.box.com/shared/static/fjtbno0vpoiq7x7j82c3sj17grjqr739.whl -O torch-1.8.0-cp36-cp36m-linux_aarch64.whlpip3 install torch-1.8.0-cp36-cp36m-linux_aarch64.whlpip3 install torchvision numpy opencv-python
YOLOv代码准备:
git clone https://github.com/ultralytics/yolov5cd yolov5pip3 install -r requirements.txt
models/yolov5s.yaml,在卷积层后添加QuantStub和DeQuantStub
from torch.quantization import quantize_dynamicmodel = torch.load('yolov5s.pt')quantized_model = quantize_dynamic(model, {torch.nn.Conv2d}, dtype=torch.qint8)
python export.py --weights yolov5s.pt --include onnx
/usr/src/tensorrt/bin/trtexec --onnx=yolov5s.onnx --saveEngine=yolov5s.trt --fp16
import cv2import torchfrom models.experimental import attempt_load# 加载模型model = attempt_load('yolov5s.trt', map_location='cuda:0')model.eval()# 初始化CSI相机cap = cv2.VideoCapture('nvarguscamerasrc ! video/x-raw(memory:NVMM),width=640,height=480 ! nvvidconv ! appsink', cv2.CAP_GSTREAMER)while True:ret, frame = cap.read()if not ret: break# 预处理img = cv2.resize(frame, (640, 640))img = img.transpose(2, 0, 1).astype('float32') / 255.0img = torch.from_numpy(img).unsqueeze(0).to('cuda:0')# 推理with torch.no_grad():pred = model(img)[0]# 后处理(需实现NMS和可视化)# ...cv2.imshow('Detection', frame)if cv2.waitKey(1) == 27: break
nvidia-smi -l 1监控GPU内存占用export CUDA_LAUNCH_BLOCKING=1
echo performance | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
sudo nvpmodel -m 0 # MODE_0_WATT (最大性能)# 或自定义模式:sudo nvpmodel -q --query-freqs
sudo chrt -f 99 python3 detect.py # 设置实时优先级
import osos.sched_setaffinity(0, {0}) # 绑定到CPU0
相机无输出:
dmesg | grep csi是否有硬件错误/dev/video0是否存在模型推理错误:
torch.cuda.is_available()确认GPU可用系统崩溃:
cat /sys/class/thermal/thermal_zone0/temp(单位毫摄氏度)
export GSTREAMER_DEBUG=3gst-launch-1.0 nvcamerasrc ! ...
journalctl -b > system_log.txt
nvcamerasrc的sync属性实现帧同步本指南覆盖了从硬件连接到算法部署的全流程,开发者可根据实际需求调整参数。建议首次实现时先验证单个模块功能,再逐步集成。对于生产环境部署,需重点考虑异常处理机制和系统稳定性设计。