fork 本仓库后 点击云原生开发环境 启动环境,选择 vscode 连接
# 在项目根目录下执行
# 编译
make
# 清理
make clean
编译产物

运行请参考 examples/yolov8
流程 pt -> onnx -> rknn
官方提供的模型为 onnx 格式,只需要 onnx -> rknn 转化即可
如果是第三方模型或者自训练模型,需要 pt -> onnx -> rknn 转化
# 使用官方的 ultralytics 镜像,避免和开发环境的 py 库冲突
docker run -it --rm -v /workspace:/workspace -w /workspace ultralytics/ultralytics:latest /bin/bash
yolo export model=yolov8n.pt format=onnx opset=12
导出成功后会生成:yolov8n.onnx
convert.py 提供了 onnx -> rknn 的能力
python3 ./convert.py ../model/yolov8n.onnx rv1126b
导出成功后会生成 yolov8.rknn
mkdir -p /workspace/3rdparty/opencv_ffmpeg
cd /workspace/3rdparty/opencv_ffmpeg
git clone https://code.videolan.org/videolan/x264.git
mv x264/ x264-code/
mkdir -p /workspace/3rdparty/opencv_ffmpeg/x264
cd /workspace/3rdparty/opencv_ffmpeg/x264-code
./configure --prefix=/workspace/3rdparty/opencv_ffmpeg/x264 \
--host=arm-linux-gnueabihf \
--cross-prefix=/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf- \
--enable-static \
--disable-shared \
--disable-cli
make -j$(nproc)
make install
rm -rf /workspace/3rdparty/opencv_ffmpeg/x264-code
cd /workspace/3rdparty/opencv_ffmpeg
wget -O ffmpeg-8.0.tar.gz https://www.ffmpeg.org/releases/ffmpeg-8.0.tar.gz
tar -xzvf ffmpeg-8.0.tar.gz
mv ffmpeg-8.0 ffmpeg-code
mkdir -p /workspace/3rdparty/opencv_ffmpeg/ffmpeg
cd /workspace/3rdparty/opencv_ffmpeg/ffmpeg-code
./configure --prefix=/workspace/3rdparty/ffmpeg \
--cross-prefix=/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf- \
--target-os=linux \
--arch=arm \
--extra-cflags="-I/workspace/3rdparty/x264/include" \
--extra-ldflags="-L/workspace/3rdparty/x264/lib" \
--enable-cross-compile \
--enable-shared \
--disable-static \
--enable-gpl \
--enable-libx264
make -j$(nproc)
make install
rm -rf /workspace/3rdparty/opencv_ffmpeg/ffmpeg-code
rm -rf /workspace/3rdparty/opencv_ffmpeg/ffmpeg-8.0.tar.gz
cd /workspace/3rdparty/opencv_ffmpeg
git clone https://github.com/opencv/opencv.git
mv opencv/ opencv-code
mkdir -p /workspace/3rdparty/opencv_ffmpeg/opencv
mkdir -p /workspace/3rdparty/opencv_ffmpeg/opencv-build
cd /workspace/3rdparty/opencv_ffmpeg/opencv-build
# # clear build tmp files
# rm -rf CMakeCache.txt CMakeFiles
cmake ../opencv-code \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_PROCESSOR=arm \
-DCMAKE_C_COMPILER=/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc \
-DCMAKE_CXX_COMPILER=/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/workspace/3rdparty/opencv_ffmpeg/opencv \
\
-DWITH_FFMPEG=ON \
-DFFMPEG_INCLUDE_DIR=/workspace/3rdparty/opencv_ffmpeg/ffmpeg/include \
-DFFMPEG_LIBRARIES="/workspace/3rdparty/opencv_ffmpeg/ffmpeg/lib/libavcodec.so;/workspace/3rdparty/opencv_ffmpeg/ffmpeg/lib/libavformat.so;/workspace/3rdparty/opencv_ffmpeg/ffmpeg/lib/libavutil.so;/workspace/3rdparty/opencv_ffmpeg/ffmpeg/lib/libswscale.so" \
\
-DWITH_GSTREAMER=OFF \
-DWITH_OPENCL=OFF \
-DWITH_TBB=OFF \
-DWITH_QT=OFF \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=OFF \
-DBUILD_TESTS=OFF \
-DBUILD_PERF_TESTS=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_JPEG=ON \
-DBUILD_PNG=ON \
-DBUILD_ZLIB=ON \
\
-DCMAKE_EXE_LINKER_FLAGS="-L/workspace/3rdparty/opencv_ffmpeg/ffmpeg/lib -L/workspace/3rdparty/opencv_ffmpeg/x264/lib" \
-DCMAKE_C_FLAGS="-I/workspace/3rdparty/opencv_ffmpeg/ffmpeg/include -I/workspace/3rdparty/opencv_ffmpeg/x264/include" \
-DCMAKE_CXX_FLAGS="-I/workspace/3rdparty/opencv_ffmpeg/ffmpeg/include -I/workspace/3rdparty/opencv_ffmpeg/x264/include"
make -j$(nproc)
make install
# check ffmpeg support
strings /workspace/3rdparty/opencv_ffmpeg/opencv/lib/libopencv_videoio.so | grep -i ffmpeg
rm -rf /workspace/3rdparty/opencv_ffmpeg/opencv-code
拷贝以下文件夹到开发板
/workspace/3rdparty/opencv_ffmpeg/ffmpeg -> /userdata/ffmpeg/workspace/3rdparty/opencv_ffmpeg/x264 --> /userdata/x264/workspace/3rdparty/opencv_ffmpeg/opencv -> /userdata/opencv执行命令
cd ~/ffmpeg/bin
export LD_LIBRARY_PATH=/userdata/ffmpeg/lib:/userdata/x264/lib:/userdata/opencv/lib:$LD_LIBRARY_PATH
./ffmpeg -i raw_input.mp4 -threads 0 -f mp4 -movflags +faststart decoded_output.mp4
./build-linux.sh -t -a -d <build_demo_name> [-b <build_type>] [-m] -t : target (rk356x/rk3576/rk3588/rv1106/rv1126b/rv1126/rk1808) -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,'rv1126b' is different from 'rv1126'.
以编译64位Linux RK3566的yolov5 demo为例:
./build-linux.sh -t rk356x -a aarch64 -d yolov5
# error
export GCC_COMPILER=/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf
./build-linux.sh -t rv1126b -a armhf -d yolov8
# ok
# export GCC_COMPILER=/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf
# cd /workspace/3rdparty/rknpu2/Linux/armhf_uclibc
# ln -sf librknnmrt.so librknnrt.so
# clean
rm -rf ./install/
rm -rf ./build/
# download model
cd examples/yolov8/model
chmod +x *.sh
./download_model.sh
# convert model
cd ../python
python3 ./convert.py ../model/yolov8n.onnx rv1126b
# build
./build-linux.sh -t rv1126b -a armhf -d yolov8
使用 default 镜像运行,并挂载 /workspace 目录
docker run -it --rm -v /workspace:/workspace cnbcool/default-dev-env:latest /bin/bash