3、测试环境搭建:硬件平台选型(树莓派、Jetson、RK3588等)、操作系统配置、驱动与SDK安装

好,咱们进入第三章。说实话,测试环境搭建这件事,看着像个体力活,但往往决定了你后面所有工作的成败。我见过太多团队,算法调得飞起,一上板子就崩,最后发现是驱动版本没对齐。嗯,咱们今天就把这事彻底捋清楚。

3.1 硬件平台选型:别只看算力,要看生态

选硬件,说白了就是选「你愿意为它踩多少坑」。我个人习惯是:先看社区活跃度,再看官方文档质量,最后才看纸面算力。你想想看,一个冷门芯片,跑分再高,遇到问题连个问的人都没有,那才叫绝望。

目前端侧AI视觉识别的主流平台,我按适用场景分成三类:

平台 算力(INT8) 典型功耗 我的评价
树莓派 4B/5 0.1~0.5 TOPS 5~15W 入门学习、原型验证首选,但别指望跑实时检测
Jetson Nano/Orin NX 0.5~70 TOPS 10~40W 工业级部署,生态最成熟,我项目里用得最多
RK3588 6 TOPS(NPU) 8~20W 国产性价比之王,但SDK坑多,需要耐心

我的选型建议:

  • 如果你只是做课程实验、跑跑MobileNet,树莓派5足够了。但别想着跑YOLOv8实时——我试过,帧率只有3~5fps,卡得怀疑人生。
  • 如果你要做产品原型,直接上Jetson Orin NX。虽然贵,但CUDA生态太香了,很多坑别人已经替你踩过了。
  • 如果你要量产降本,RK3588是当前最优解。但要做好心理准备:它的RKNN工具链,我刚开始用的时候,光环境配置就折腾了两天。

3.2 操作系统配置:别用桌面版,用Lite版

很多新手上来就装Ubuntu Desktop,然后发现系统占了一半内存。我个人的经验是:端侧设备,能跑命令行就别开图形界面。

具体配置建议:

  • 树莓派:用Raspberry Pi OS Lite(64位),不要装Desktop版。我曾在项目里为了省事装了桌面版,结果摄像头采集延迟高了30ms,排查了半天才发现是桌面合成器在抢CPU。
  • Jetson:用NVIDIA官方提供的JetPack。注意,JetPack 5.x以上才支持Orin系列。我踩过一个坑:用JetPack 4.6刷Orin NX,结果WiFi模块驱动不兼容,折腾了一下午才发现是版本问题。
  • RK3588:官方推荐Ubuntu 20.04或Debian 11。但要注意,RK3588的NPU驱动只支持Linux内核5.10以上版本。我建议直接用Firefly或友善之臂提供的官方固件,自己编译内核容易翻车。

一个小技巧:装完系统后,第一件事是关闭交换分区。端侧设备用SD卡或eMMC,频繁读写交换分区会严重缩短寿命。我一般用 sudo swapoff -a 然后注释掉fstab里的swap行。

3.3 驱动与SDK安装:最磨人的环节

嗯,这里我要多说几句。驱动安装这件事,看起来就是几条命令的事,但实际执行起来,版本依赖、内核头文件缺失、权限问题……每个都能让你卡半天。

3.3.1 摄像头驱动

视觉识别嘛,摄像头是核心输入。我建议统一用USB摄像头(UVC协议),兼容性最好。

# 检查摄像头是否被识别
lsusb
# 查看视频设备节点
ls /dev/video*
# 测试摄像头(需要安装v4l-utils)
sudo apt install v4l-utils
v4l2-ctl --list-devices
v4l2-ctl -d /dev/video0 --list-formats

我曾经遇到过一个问题:摄像头在lsusb里能看到,但/dev/video0就是不出来。后来发现是内核缺少UVC驱动模块。解决办法:

sudo modprobe uvcvideo
# 如果报错,检查内核版本
uname -r
# 安装对应内核头文件
sudo apt install linux-headers-$(uname -r)

注意:树莓派上如果用CSI摄像头(比如IMX219),需要先运行 sudo raspi-config 启用Camera接口。我刚开始用的时候不知道这个,折腾了半小时以为摄像头坏了。

3.3.2 NPU/GPU驱动

这部分是重头戏。不同平台的安装方式差异很大:

  • Jetson:JetPack自带CUDA和TensorRT,不需要单独装。但要注意,每次刷机后要运行 sudo apt update && sudo apt upgrade,因为NVIDIA会不定期推送驱动补丁。
  • RK3588:需要安装RKNN驱动。官方提供了deb包,但依赖关系很复杂。我建议直接用他们提供的Docker镜像,省去环境配置的烦恼。
# RK3588安装RKNN驱动示例(以Firefly固件为例)
# 1. 下载RKNN Toolkit2
git clone https://github.com/rockchip-linux/rknn-toolkit2.git
cd rknn-toolkit2

# 2. 安装依赖
pip install -r requirements_cp310.txt

# 3. 安装RKNN包
pip install package/rknn_toolkit2-1.5.0-cp310-cp310-linux_aarch64.whl

# 4. 验证安装
python -c "from rknn.api import RKNN; print('RKNN installed successfully')"

避坑指南:我曾经在RK3588上装RKNN时,一直报"librockchip_mpp.so"找不到。后来发现是系统里缺少多媒体库。解决办法:

sudo apt install librga-dev librga2
sudo apt install rockchip-mpp rockchip-mpp-dev

嗯,这种依赖问题在国产芯片上特别常见。我的建议是:先看官方Wiki的「环境要求」章节,把依赖包一次性装全,别等报错了再一个个补。

3.3.3 推理框架SDK

最后一步,安装推理框架。我一般推荐用ONNX Runtime作为中间层,这样模型转换一次,可以在多个平台上跑。

# 安装ONNX Runtime(以Jetson为例)
# 注意:Jetson是aarch64架构,不能用x86的包
wget https://github.com/microsoft/onnxruntime/releases/download/v1.15.1/onnxruntime-linux-aarch64-1.15.1.tgz
tar -xzf onnxruntime-linux-aarch64-1.15.1.tgz
cd onnxruntime-linux-aarch64-1.15.1

# 安装Python包
pip install onnxruntime-1.15.1-cp38-cp38-linux_aarch64.whl

# 验证
python -c "import onnxruntime; print(onnxruntime.get_device())"

我的习惯:装完所有驱动和SDK后,我会写一个简单的测试脚本,跑一遍摄像头采集→预处理→推理→后处理的完整流程。哪怕只是输出一个随机张量,也能确认整个链路是通的。这一步能帮你省下后面大量的调试时间。

好了,环境搭建这部分就到这里。说实话,这个过程确实有点枯燥,但它是你后面所有工作的基石。我建议你每装完一个组件,都做个快照(用dd命令备份SD卡或eMMC),这样万一搞崩了,不用从头再来。下一章咱们开始讲测试用例的设计,那才是真正有意思的部分。