2、开发环境搭建:刷机与系统安装、Python环境配置、OpenCV与ONNX Runtime安装

说实话,做边缘设备开发,环境搭建往往是第一个坑。

我见过太多人,算法模型写得漂漂亮亮,一到板子上就跑不起来。为什么?环境没配好。今天咱们就把这事儿一次性搞定。

2.1 刷机与系统安装

先说说刷机。我习惯把刷机比作给板子装操作系统。你买回来的开发板,就像一台没装系统的电脑,得先把系统灌进去。

以我常用的 Jetson Nano 为例,流程其实不复杂:

  1. 准备一张 32GB 以上的 microSD 卡(建议用 Class 10 的,速度有保障)
  2. 下载 JetPack 镜像——NVIDIA 官方提供的系统包,里面包含了 Ubuntu、CUDA、cuDNN 等全套工具
  3. 用 Etcher 或 balenaEtcher 工具烧录——选好镜像文件,选对 SD 卡,点 Flash 就行
  4. 插卡上电——第一次启动会有点慢,耐心等

⚠️ 注意:我曾经因为 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())

如果输出里能看到 CUDATensorrtExecutionProvider,说明环境配置成功了。

嗯,到这里,开发环境就搭好了。下一章咱们开始写第一个行人检测程序。

💡 补充一句:如果你用的是其他边缘设备,比如 RK3588 或树莓派,流程大同小异。核心思路是一样的:系统 -> Python -> 视觉库 -> 推理引擎。只是具体命令和包名会有些差异。