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),这样万一搞崩了,不用从头再来。下一章咱们开始讲测试用例的设计,那才是真正有意思的部分。