2、开发环境搭建:刷机与系统安装、Python环境配置、OpenCV与ONNX Runtime安装
说实话,做边缘设备开发,环境搭建往往是第一个坑。
我见过太多人,算法模型写得漂漂亮亮,一到板子上就跑不起来。为什么?环境没配好。今天咱们就把这事儿一次性搞定。
2.1 刷机与系统安装
先说说刷机。我习惯把刷机比作给板子装操作系统。你买回来的开发板,就像一台没装系统的电脑,得先把系统灌进去。
以我常用的 Jetson Nano 为例,流程其实不复杂:
- 准备一张 32GB 以上的 microSD 卡(建议用 Class 10 的,速度有保障)
- 下载 JetPack 镜像——NVIDIA 官方提供的系统包,里面包含了 Ubuntu、CUDA、cuDNN 等全套工具
- 用 Etcher 或 balenaEtcher 工具烧录——选好镜像文件,选对 SD 卡,点 Flash 就行
- 插卡上电——第一次启动会有点慢,耐心等
⚠️ 注意:我曾经因为 SD 卡速度太慢,导致系统启动后频繁卡死。折腾了两天才发现是卡的问题。所以,别在这上面省钱。
系统启动后,会进入初始设置界面。设置用户名、密码、时区这些。我建议用户名就用默认的 nvidia,省得后面路径对不上。
2.2 Python 环境配置
系统装好了,接下来就是 Python 环境。Jetson 系列默认带的是 Python 3.6 或 3.8,够用。但我不建议直接用系统自带的 Python 环境做开发。
为什么?你想想看,项目一多,依赖包版本打架是常有的事。A 项目要 OpenCV 4.5,B 项目要 4.7,怎么办?
我的做法是:用虚拟环境隔离。
我个人习惯用 virtualenv 或者 conda。在 Jetson 上,我更推荐 virtualenv,因为 conda 在 ARM 架构下支持没那么好。
# 安装 virtualenv
sudo apt update
sudo apt install python3-pip python3-dev
pip3 install virtualenv
# 创建项目专属环境
virtualenv --python=python3 ped_det_env
# 激活环境
source ped_det_env/bin/activate
看到终端前面多了 (ped_det_env) 这个前缀了吗?嗯,这就对了。你现在就在一个干净的 Python 环境里了。
💡 小技巧:我习惯在项目根目录下建一个 requirements.txt 文件,把所有依赖写进去。这样换机器时,一行命令就能复现环境。
2.3 OpenCV 安装
OpenCV 是计算机视觉的基石。在边缘设备上装 OpenCV,有两条路:
- pip 安装——简单,但功能不全
- 源码编译——麻烦,但能开启 GPU 加速
做行人检测,我建议你走第二条路。为什么?因为实时性要求高,CPU 跑 OpenCV 根本扛不住。
源码编译的步骤大致如下:
# 安装依赖
sudo apt install build-essential cmake git pkg-config
sudo apt install libjpeg-dev libtiff5-dev libpng-dev
sudo apt install libavcodec-dev libavformat-dev libswscale-dev
# 下载源码
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
# 编译(记得开启 CUDA)
cd opencv
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
..
make -j4
sudo make install
编译过程比较久,Jetson Nano 上大概要 1-2 小时。我一般会泡杯咖啡,或者先去写文档。
🔑 关键点:编译时一定要加上 -D WITH_CUDA=ON。不然你装的就是个"阉割版" OpenCV,GPU 用不上,检测速度会慢很多。
2.4 ONNX Runtime 安装
ONNX Runtime 是微软开源的推理引擎。说白了,它就是个"模型运行器"。你训练好的模型转成 ONNX 格式,它就能帮你跑起来。
在 Jetson 上安装 ONNX Runtime,我踩过不少坑。最稳妥的方式是:
# 安装 ONNX Runtime(Jetson 专用版本)
pip3 install onnxruntime-gpu
# 验证安装
python3 -c "import onnxruntime; print(onnxruntime.__version__)"
如果上面这条命令没报错,恭喜你,环境搭好了。
但如果你遇到 libcuda.so.1: cannot open shared object file 这种错误,别慌。这通常是因为 CUDA 路径没配好。
# 添加 CUDA 路径到环境变量
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda/bin:$PATH
我建议把这行加到 ~/.bashrc 里,这样每次打开终端就不用重新设了。
⚠️ 注意:ONNX Runtime 的版本要和 CUDA 版本匹配。我曾经因为版本不对,推理结果全是 NaN,查了三天才发现是兼容性问题。具体版本对应关系,去 ONNX Runtime 官方文档查一下。
2.5 验证环境
环境搭好了,咱们跑个简单测试,看看能不能正常工作:
import cv2
import onnxruntime as ort
import numpy as np
# 检查 OpenCV 是否支持 CUDA
print("OpenCV 版本:", cv2.__version__)
print("CUDA 支持:", cv2.cuda.getCudaEnabledDeviceCount())
# 检查 ONNX Runtime 是否可用
print("ONNX Runtime 版本:", ort.__version__)
print("可用 provider:", ort.get_available_providers())
如果输出里能看到 CUDA 和 TensorrtExecutionProvider,说明环境配置成功了。
嗯,到这里,开发环境就搭好了。下一章咱们开始写第一个行人检测程序。
💡 补充一句:如果你用的是其他边缘设备,比如 RK3588 或树莓派,流程大同小异。核心思路是一样的:系统 -> Python -> 视觉库 -> 推理引擎。只是具体命令和包名会有些差异。