目錄
1 環境搭建
2 交叉編譯opencv
3 模型訓練
4 模型轉換
4.1 pt模型轉onnx模型
4.2 onnx模型轉rknn模型
4.2.1 安裝rknn-toolkit
4.2.2 onn轉成rknn模型
5 升級npu驅動
6 C++推理源碼demo
6.1 原版demo
6.2 增加opencv讀取圖片的代碼
7 交叉編譯x264 ffmepg和opencv
7.1 交叉編譯x264
7.1.1 下載源碼
7.2.2 配置、編譯、安裝
7.2 交叉編譯ffmpeg
7.2.1 下載源碼
7.2.2 配置、編譯、安裝
7.2.3 測試ffmpeg命令
7.3 交叉編譯opencv
7.3.1 修改cmake文件
7.3.2 配置和cmake
7.3.3 編譯、安裝
8 讀取視頻文件以及獲取攝像頭視頻進行推理
8.1 讀取視頻進行推理
8.2 獲取攝像頭視頻進行推理
9 模型預編譯
10 利用瑞芯微的SDK獲取攝像頭視頻進行推理
參考文獻:
1 環境搭建
安裝adb,安裝交叉編譯工具鏈,安裝rknn_toolkit等方法步驟見我的另一篇博客。
RV1109_RV1126 EVB開發板環境搭建及使用總結_rv1109開發板-CSDN博客
2 交叉編譯opencv
交叉編譯opencv的方法見我的另一篇博客
ubuntu交叉編譯opencv-CSDN博客
3 模型訓練
模型訓練首先下載GitHub - ultralytics/ultralytics: Ultralytics YOLO11 ??
然后具體的訓練方法網上資源很多,我這篇博客重點介紹模型轉換和部署,至于模型訓練不再展開。
4 模型轉換
4.1 pt模型轉onnx模型
瑞芯微的C++示例代碼是針對瑞芯微修改后的模型結構進行推理的,所以在轉模型的時候需要用瑞芯微修改后的工程進行模型轉換,下載下面的工程
https://github.com/airockchip/ultralytics_yolov8
然后需要安裝必要的庫,其實前面訓練yolov8的時候搭建了環境,那么這里轉模型就用一樣的環境就行,瑞芯微的這個ultralytics_yolov8相比官方的yolov8,只是在導出模型的時候進行了一些修改,對于訓練模型,他和官方的ultralytics倉庫是一樣的。
按照上面的步驟就可以轉出onnx模型。
4.2 onnx模型轉rknn模型
4.2.1 安裝rknn-toolkit
·首先安裝rknn-toolkit,去這個網址下載
Releases · rockchip-linux/rknn-toolkit · GitHub
然后
conda create -n rv1126_1.7.5_chw python=3.8
conda activate rv1126_1.7.5_chw
tar xzvf rknn-toolkit-v1.7.5-packages.tar.gz
cd packages
pip install rknn_toolkit-1.7.5-cp38-cp38-linux_x86_64.whl
然后可以用下面的命令測試是否安裝成功
python
from rknn.api import RKNN
4.2.2 onn轉成rknn模型
下載GitHub - airockchip/rknn_model_zoo
然后
conda activate rv1126_1.7.5_chw
cd examples/yolov8/python
python convert.py ../model/dugong_20250212.onnx rv1126
報錯
W rknn-toolkit version: 1.7.5
Traceback (most recent call last):File "convert.py", line 41, in <module>rknn = RKNN(verbose=False)File "/root/anaconda3/envs/rv1126_1.7.5_chw/lib/python3.8/site-packages/rknn/api/rknn.py", line 78, in __init__self.config()File "/root/anaconda3/envs/rv1126_1.7.5_chw/lib/python3.8/site-packages/rknn/api/rknn.py", line 753, in configreturn self.rknn_base.config(args)File "rknn/api/rknn_base.py", line 73, in rknn.api.rknn_base.RKNNBase.configFile "/root/anaconda3/envs/rv1126_1.7.5_chw/lib/python3.8/site-packages/rknn/base/acuitylib/__init__.py", line 1, in <module>from acuitylib.optimize.optimizer import OptimizerFile "/root/anaconda3/envs/rv1126_1.7.5_chw/lib/python3.8/site-packages/rknn/base/acuitylib/__init__.py", line 1, in <module>from acuitylib.optimize.optimizer import OptimizerFile "rknn/base/acuitylib/optimize/optimizer.py", line 128, in init rknn.base.acuitylib.optimize.optimizerFile "rknn/base/acuitylib/optimize/rules/high_performance/model_pruning.py", line 3, in init rknn.base.acuitylib.optimize.rules.high_performance.model_pruningFile "/root/anaconda3/envs/rv1126_1.7.5_chw/lib/python3.8/site-packages/torch/__init__.py", line 29, in <module>from .torch_version import __version__ as __version__File "/root/anaconda3/envs/rv1126_1.7.5_chw/lib/python3.8/site-packages/torch/torch_version.py", line 3, in <module>from pkg_resources import packaging # type: ignore[attr-defined]
ImportError: cannot import name 'packaging' from 'pkg_resources' (/root/anaconda3/envs/rv1126_1.7.5_chw/lib/python3.8/site-packages/pkg_resources/__init__.py)
解決方法
pip install --upgrade setuptools
5 升級npu驅動
我轉模型的時候用的rknn-toolkit 1.7.5,那么板子的驅動我也升級為1.7.5吧,升級方法
https://github.com/rockchip-linux/rknpu/tree/master
adb push drivers/linux-armhf-puma/* /
adb push drivers/npu_ko/galcore_puma.ko /lib/modules/galcore.ko
6 C++推理源碼demo
6.1 原版demo
C++推理demo也在
https://github.com/airockchip/rknn_model_zoo/tree/main
然后找到rknn_model_zoo-main/examples/yolov8
具體編譯方法在github上也有,這里為了方便我又寫了個腳本build.sh
#!/bin/bash: <<'COMMENT'
./build-linux.sh -t <target> -a <arch> -d <build_demo_name> [-b <build_type>] [-m]-t : target (rk356x/rk3588/rk3576/rv1106/rk1808/rv1126)-a : arch (aarch64/armhf)-d : demo name-b : build_type(Debug/Release)-m : enable address sanitizer, build_type need set to Debug
Note: 'rk356x' represents rk3562/rk3566/rk3568, 'rv1106' represents rv1103/rv1106, 'rv1126' represents rv1109/rv1126# Here is an example for compiling yolov5 demo for 64-bit Linux RK3566.
./build-linux.sh -t rk356x -a aarch64 -d yolov5
...
COMMENT./build-linux.sh -t rv1126 -a armhf -d yolov8
然后直接sh build.sh就可以編譯了,不用每次都去敲命令。
編譯完之后用xftp把install整個文件夾傳到rv1126開發板,然后執行
./rknn_yolov8_demo ./model/yolov8.rknn ./model/bus.jpg
由于我這個模型沒有預編譯&#