logo
0
0
Login
opencv lib

编译环境

fork 本仓库后 点击云原生开发环境 启动环境,选择 vscode 连接

编译

# 在项目根目录下执行 # 编译 make # 清理 make clean

编译产物

编译产物

运行请参考 examples/yolov8

模型转化

流程 pt -> onnx -> rknn

官方提供的模型为 onnx 格式,只需要 onnx -> rknn 转化即可

如果是第三方模型或者自训练模型,需要 pt -> onnx -> rknn 转化

pt -> onnx

# 使用官方的 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

onnx -> rknn

convert.py 提供了 onnx -> rknn 的能力

python3 ./convert.py ../model/yolov8n.onnx rv1126b

导出成功后会生成 yolov8.rknn

other

增加 ffmpeg x264

mkdir -p /workspace/3rdparty/opencv_ffmpeg
x264
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
ffmpeg
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
opencv-ffmpeg
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

other

./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