Jetson Nano实战:CSI相机配置与YOLOv物体检测全流程指南
一、引言
Jetson Nano作为NVIDIA推出的嵌入式AI开发套件,凭借其低功耗、高性能和丰富的接口,成为边缘计算和计算机视觉项目的理想选择。本文将详细介绍如何使用Jetson Nano套件完成CSI相机配置,并部署YOLOv模型进行实时物体检测。通过本文,读者将掌握从硬件连接到模型部署的全流程操作,为后续的AI视觉项目打下坚实基础。
二、硬件准备与连接
2.1 硬件清单
- Jetson Nano开发者套件(B01版本推荐)
- CSI接口摄像头(如Raspberry Pi Camera V2)
- Micro-SD卡(至少32GB,Class 10以上)
- 5V/4A电源适配器(确保稳定供电)
- 显示器、键盘、鼠标(可选,用于初始设置)
2.2 CSI相机连接
- 接口识别:Jetson Nano提供两个CSI接口(CAM0和CAM1),通常使用CAM0。
- 物理连接:将CSI相机的排线插入CAM0接口,注意排线方向(金属触点朝向板内)。
- 固定排线:轻轻压下接口两侧的固定扣,确保排线稳固连接。
常见问题:若相机无法识别,检查排线是否完全插入,或尝试更换CSI接口。
三、系统与环境配置
3.1 操作系统安装
- 下载镜像:从NVIDIA官网下载Jetson Nano的官方镜像(如JetPack 4.6)。
- 烧录镜像:使用Etcher等工具将镜像烧录至Micro-SD卡。
- 首次启动:插入SD卡,接通电源,完成初始设置(语言、时区、用户密码等)。
3.2 驱动与依赖安装
- 更新系统:
sudo apt-get updatesudo apt-get upgrade
- 安装CSI驱动:Jetson Nano默认支持CSI相机,但需确认内核模块已加载:
lsmod | grep gst_v4l2
若无输出,手动加载模块:
sudo modprobe gst_v4l2
- 安装OpenCV(可选,用于图像处理):
sudo apt-get install python3-opencv
四、CSI相机测试与配置
4.1 相机测试
-
使用GStreamer测试:
gst-launch-1.0 nvcamerasrc ! 'video/x-raw(memory:NVMM), width=640, height=480, framerate=30/1' ! nvvidconv ! xvimagesink
若成功,将显示相机画面。
-
使用OpenCV测试:
import cv2cap = cv2.VideoCapture(0) # 0表示默认摄像头while True:ret, frame = cap.read()if ret:cv2.imshow('CSI Camera', frame)if cv2.waitKey(1) == 27: # ESC键退出breakcap.release()cv2.destroyAllWindows()
4.2 分辨率与帧率调整
修改GStreamer管道中的width、height和framerate参数,例如:
gst-launch-1.0 nvcamerasrc ! 'video/x-raw(memory:NVMM), width=1280, height=720, framerate=15/1' ! nvvidconv ! xvimagesink
五、YOLOv模型部署
5.1 环境准备
- 安装PyTorch(Jetson Nano专用版本):
wget https://nvidia.box.com/shared/static/fjtbno0vzoqi06kk4e5e7l3jwjqnvtd3.whl -O torch-1.8.0-cp36-cp36m-linux_aarch64.whlsudo apt-get install python3-pip libopenblas-base libopenmpi-devpip3 install torch-1.8.0-cp36-cp36m-linux_aarch64.whl
- 安装TorchVision:
git clone --branch v0.9.1 https://github.com/pytorch/visioncd visionsudo apt-get install libjpeg-dev zlib1g-devpython3 setup.py install
5.2 YOLOv代码实现
- 下载预训练模型:
wget https://pjreddie.com/media/files/yolov3.weights
-
加载模型与推理:
import cv2import numpy as npimport torchfrom torchvision import transforms# 加载YOLOv3模型(需提前转换权重为Torch格式)model = torch.hub.load('ultralytics/yolov5', 'yolov3') # 或使用自定义模型model.eval()# 相机捕获cap = cv2.VideoCapture(0)while True:ret, frame = cap.read()if not ret:break# 预处理img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)img_tensor = transforms.ToTensor()(img).unsqueeze(0)# 推理with torch.no_grad():predictions = model(img_tensor)# 解析结果(需根据模型输出格式调整)# ...cv2.imshow('YOLOv Detection', frame)if cv2.waitKey(1) == 27:breakcap.release()cv2.destroyAllWindows()
优化建议:
- 使用TensorRT加速推理:通过
trtexec工具将模型转换为TensorRT引擎。 - 量化模型:使用
torch.quantization减少计算量。
六、性能优化与调试
6.1 性能瓶颈分析
-
使用
tegrastats监控资源:sudo /home/nvidia/tegrastats
关注GPU利用率、内存占用和CPU负载。
-
调整模型输入尺寸:减小输入分辨率(如从416x416降至320x320)以提升帧率。
6.2 调试技巧
- 日志记录:在代码中添加
print或logging模块,跟踪推理时间。 - 模型可视化:使用Netron查看模型结构,确认输入输出格式。
七、完整项目示例
7.1 项目结构
yolov_jetson/├── models/ # 存放YOLOv模型文件├── utils/ # 辅助函数(如NMS、画框)├── main.py # 主程序└── requirements.txt # 依赖列表
7.2 主程序示例
# main.pyimport cv2import torchfrom models.experimental import attempt_loadfrom utils.general import non_max_suppression, scale_boxesfrom utils.datasets import letterboxfrom utils.plots import plot_one_box# 加载模型weights = 'yolov3.pt'device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')model = attempt_load(weights, map_location=device)# 相机初始化cap = cv2.VideoCapture(0)while True:ret, img0 = cap.read()if not ret:break# 预处理img = letterbox(img0, new_shape=640)[0]img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, HWC to CHWimg = torch.from_numpy(img).to(device).float() / 255.0if img.ndimension() == 3:img = img.unsqueeze(0)# 推理pred = model(img)[0]# NMSpred = non_max_suppression(pred, conf_thres=0.25, iou_thres=0.45)# 解析结果for det in pred:if len(det):det[:, :4] = scale_boxes(img.shape[2:], det[:, :4], img0.shape).round()for *xyxy, conf, cls in reversed(det):label = f'{model.names[int(cls)]}: {conf:.2f}'plot_one_box(xyxy, img0, label=label, color=(0, 255, 0), line_thickness=2)cv2.imshow('YOLOv Detection', img0)if cv2.waitKey(1) == 27:breakcap.release()cv2.destroyAllWindows()
八、总结与展望
通过本文,读者已掌握Jetson Nano上CSI相机的配置方法,以及YOLOv模型的部署流程。实际项目中,可进一步探索:
- 多相机同步检测
- 模型压缩与量化
- 与ROS等机器人框架集成
Jetson Nano的低功耗与高性能使其成为边缘AI的理想平台,结合YOLOv的实时检测能力,可广泛应用于智能安防、工业检测等领域。