mirror of
https://github.com/open-mmlab/mmdeploy.git
synced 2025-01-14 08:09:43 +08:00
build opencv for aarch64 with videoio enabled (#1343)
* build opencv for aarch64 with videoio enabled * update doc * update * update * update
This commit is contained in:
parent
18c6ae57cf
commit
b0a350d49e
@ -192,11 +192,7 @@ backend_config = dict(
|
|||||||
|
|
||||||
### Host 交叉编译
|
### Host 交叉编译
|
||||||
|
|
||||||
mmdeploy 提供 2 种交叉编译方式:
|
若 host 是 Ubuntu 18.04 及以上版本,推荐脚本编译:
|
||||||
|
|
||||||
1. 执行编译脚本(推荐)
|
|
||||||
|
|
||||||
在 Ubuntu 主机上,执行如下命令:
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
bash tools/scripts/ubuntu_cross_build_rknn.sh <model>
|
bash tools/scripts/ubuntu_cross_build_rknn.sh <model>
|
||||||
@ -204,7 +200,7 @@ bash tools/scripts/ubuntu_cross_build_rknn.sh <model>
|
|||||||
|
|
||||||
命令中的参数 model 表示瑞芯微芯片的型号,目前支持 rv1126,rk3588。
|
命令中的参数 model 表示瑞芯微芯片的型号,目前支持 rv1126,rk3588。
|
||||||
|
|
||||||
2. 手动配置环境并编译
|
以下是对脚本中编译过程的说明。
|
||||||
|
|
||||||
如下表所示,瑞芯微提供了 2 套 RKNN API 工具包,对应于不同的芯片型号。而每套 RKNN API 工具包又分别对应不同的 gcc 交叉编译工具。
|
如下表所示,瑞芯微提供了 2 套 RKNN API 工具包,对应于不同的芯片型号。而每套 RKNN API 工具包又分别对应不同的 gcc 交叉编译工具。
|
||||||
|
|
||||||
@ -215,27 +211,41 @@ bash tools/scripts/ubuntu_cross_build_rknn.sh <model>
|
|||||||
|
|
||||||
以支持的 rv1126 和 rk3588 为例,mmdeploy 在 ubuntu18.04 上的交叉编译过程如下:
|
以支持的 rv1126 和 rk3588 为例,mmdeploy 在 ubuntu18.04 上的交叉编译过程如下:
|
||||||
|
|
||||||
- rv11126
|
- **rv11126**
|
||||||
|
|
||||||
````shell
|
1. 下载 RKNN API 包
|
||||||
# 1. 下载 RKNN API 包
|
|
||||||
|
```shell
|
||||||
git clone https://github.com/rockchip-linux/rknpu
|
git clone https://github.com/rockchip-linux/rknpu
|
||||||
export RKNPU_DIR=$(pwd)/rknpu
|
export RKNPU_DIR=$(pwd)/rknpu
|
||||||
|
```
|
||||||
|
|
||||||
# 2. 准备 gcc 交叉编译工具
|
2. 准备 gcc 交叉编译工具
|
||||||
|
|
||||||
|
```shell
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install gcc-7-arm-linux-gnueabihf
|
sudo apt-get install gcc-arm-linux-gnueabihf
|
||||||
sudo apt-get install g++-7-arm-linux-gnueabihf
|
sudo apt-get install g++-arm-linux-gnueabihf
|
||||||
|
```
|
||||||
|
|
||||||
# 3. 下载 OpenCV
|
3. 源码安装 OpenCV
|
||||||
## 在rknpu2中,有opencv-linux-armhf库。路径是 rknpu2/examples/3rdparty/opencv/opencv-linux-armhf
|
|
||||||
git clone https://github.com/rockchip-linux/rknpu2
|
```shell
|
||||||
export RKNPU2_DIR=$(pwd)/rknpu2
|
git clone https://github.com/opencv/opencv --depth=1 --branch=4.6.0 --recursive
|
||||||
|
cd opencv
|
||||||
|
mkdir -p build_arm_gnueabi && cd build_arm_gnueabi
|
||||||
|
cmake .. -DCMAKE_INSTALL_PREFIX=install \
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-gnueabi.toolchain.cmake \
|
||||||
|
-DBUILD_PERF_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTS=OFF -DCMAKE_BUILD_TYPE=Release
|
||||||
|
make -j $(nproc) && make install
|
||||||
|
export OpenCV_ARM_INSTALL_DIR=$(pwd)/install
|
||||||
|
```
|
||||||
|
|
||||||
|
4. 编译 mmdeploy SDK
|
||||||
|
|
||||||
# 3. 编译 mmdeploy SDK
|
|
||||||
```shell
|
```shell
|
||||||
cd /path/to/mmdeploy
|
cd /path/to/mmdeploy
|
||||||
mkdir -p build && rm -rf build/CM* && cd build
|
mkdir -p build && cd build
|
||||||
cmake .. \
|
cmake .. \
|
||||||
-DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/arm-linux-gnueabihf.cmake \
|
-DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/arm-linux-gnueabihf.cmake \
|
||||||
-DMMDEPLOY_BUILD_SDK=ON \
|
-DMMDEPLOY_BUILD_SDK=ON \
|
||||||
@ -243,25 +253,45 @@ cmake .. \
|
|||||||
-DMMDEPLOY_BUILD_EXAMPLES=ON \
|
-DMMDEPLOY_BUILD_EXAMPLES=ON \
|
||||||
-DMMDEPLOY_TARGET_BACKENDS="rknn" \
|
-DMMDEPLOY_TARGET_BACKENDS="rknn" \
|
||||||
-DRKNPU_DEVICE_DIR=${RKNPU_DIR}/rknn/rknn_api/librknn_api \
|
-DRKNPU_DEVICE_DIR=${RKNPU_DIR}/rknn/rknn_api/librknn_api \
|
||||||
-DOpenCV_DIR=${RKNPU2_DIR}/examples/3rdparty/opencv/opencv-linux-armhf/share/OpenCV
|
-DOpenCV_DIR=${OpenCV_ARM_INSTALL_DIR}/lib/cmake/opencv4
|
||||||
make -j$(nproc) && make install
|
make -j$(nproc) && make install
|
||||||
````
|
```
|
||||||
|
|
||||||
- rk3588
|
- **rk3588**
|
||||||
|
|
||||||
|
1. 下载 RKNN API 包
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# 1. 下载 RKNN API 包
|
|
||||||
git clone https://github.com/rockchip-linux/rknpu2
|
git clone https://github.com/rockchip-linux/rknpu2
|
||||||
export RKNPU2_DEVICE_DIR=$(pwd)/rknpu2/runtime/RK3588
|
export RKNPU2_DEVICE_DIR=$(pwd)/rknpu2/runtime/RK3588
|
||||||
|
```
|
||||||
|
|
||||||
# 2. 准备 gcc 交叉编译工具
|
2. 准备 gcc 交叉编译工具
|
||||||
|
|
||||||
|
```shell
|
||||||
git clone https://github.com/Caesar-github/gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu
|
git clone https://github.com/Caesar-github/gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu
|
||||||
export RKNN_TOOL_CHAIN=$(pwd)/gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu
|
export RKNN_TOOL_CHAIN=$(pwd)/gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu
|
||||||
export LD_LIBRARY_PATH=$RKNN_TOOL_CHAIN/lib64:$LD_LIBRARY_PATH
|
export LD_LIBRARY_PATH=$RKNN_TOOL_CHAIN/lib64:$LD_LIBRARY_PATH
|
||||||
|
```
|
||||||
|
|
||||||
# 3. 编译 mmdeploy SDK
|
3. 下载 opencv 预编译包
|
||||||
|
|
||||||
|
```shell
|
||||||
|
git clone https://github.com/opencv/opencv --depth=1 --branch=4.6.0 --recursive
|
||||||
|
cd opencv
|
||||||
|
mkdir -p build_aarch64 && cd build_aarch64
|
||||||
|
cmake .. -DCMAKE_INSTALL_PREFIX=install
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-gnu.toolchain.cmake \
|
||||||
|
-DBUILD_PERF_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTS=OFF -DCMAKE_BUILD_TYPE=Release
|
||||||
|
make -j $(nproc) && make install
|
||||||
|
export OpenCV_AARCH64_INSTALL_DIR=$(pwd)/install
|
||||||
|
```
|
||||||
|
|
||||||
|
4. 编译 mmdeploy SDK
|
||||||
|
|
||||||
|
```shell
|
||||||
cd /path/to/mmdeploy
|
cd /path/to/mmdeploy
|
||||||
mkdir -p build && rm -rf build/CM* && cd build
|
mkdir -p build && cd build
|
||||||
export LD_LIBRARY_PATH=$RKNN_TOOL_CHAIN/lib64:$LD_LIBRARY_PATH
|
export LD_LIBRARY_PATH=$RKNN_TOOL_CHAIN/lib64:$LD_LIBRARY_PATH
|
||||||
cmake \
|
cmake \
|
||||||
-DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/rknpu2-linux-gnu.cmake \
|
-DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/rknpu2-linux-gnu.cmake \
|
||||||
@ -269,7 +299,7 @@ cmake \
|
|||||||
-DMMDEPLOY_BUILD_SDK_CXX_API=ON \
|
-DMMDEPLOY_BUILD_SDK_CXX_API=ON \
|
||||||
-DMMDEPLOY_TARGET_BACKENDS="rknn" \
|
-DMMDEPLOY_TARGET_BACKENDS="rknn" \
|
||||||
-DMMDEPLOY_BUILD_EXAMPLES=ON \
|
-DMMDEPLOY_BUILD_EXAMPLES=ON \
|
||||||
-DOpenCV_DIR=${RKNPU2_DEVICE_DIR}/../../examples/3rdparty/opencv/opencv-linux-aarch64/share/OpenCV
|
-DOpenCV_DIR=${OpenCV_AARCH64_INSTALL_DIR}/lib/cmake/opencv4
|
||||||
make -j $(nproc) && make install
|
make -j $(nproc) && make install
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -19,10 +19,10 @@ install_rknpu_toolchain() {
|
|||||||
echo "ubuntu 18.04 is minimum requirement, but got $ubuntu_version"
|
echo "ubuntu 18.04 is minimum requirement, but got $ubuntu_version"
|
||||||
wget wget https://developer.arm.com/-/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
|
wget wget https://developer.arm.com/-/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
|
||||||
tar -xvf gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
|
tar -xvf gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
|
||||||
ln -sf $(pwd)/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc /usr/bin/arm-linux-gnueabihf-gcc
|
sudo ln -sf $(pwd)/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc /usr/bin/arm-linux-gnueabihf-gcc
|
||||||
ln -sf $(pwd)/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ /usr/bin/arm-linux-gnueabihf-g++
|
sudo ln -sf $(pwd)/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ /usr/bin/arm-linux-gnueabihf-g++
|
||||||
else
|
else
|
||||||
sudo apt install -y gcc-7-arm-linux-gnueabihf g++-7-arm-linux-gnueabihf
|
sudo apt install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
|
||||||
fi
|
fi
|
||||||
arm-linux-gnueabihf-gcc --version
|
arm-linux-gnueabihf-gcc --version
|
||||||
arm-linux-gnueabihf-g++ --version
|
arm-linux-gnueabihf-g++ --version
|
||||||
@ -40,22 +40,44 @@ install_rknpu_toolchain() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
install_rknpu2_toolchain() {
|
install_rknpu2_toolchain() {
|
||||||
|
sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
|
||||||
|
aarch64-linux-gnu-g++ --version
|
||||||
|
aarch64-linux-gnu-gcc --version
|
||||||
git clone https://github.com/Caesar-github/gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu.git
|
git clone https://github.com/Caesar-github/gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu.git
|
||||||
git clone https://github.com/rockchip-linux/rknpu2.git
|
git clone https://github.com/rockchip-linux/rknpu2.git
|
||||||
export RKNN_TOOL_CHAIN=$(pwd)/gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu
|
export RKNN_TOOL_CHAIN=$(pwd)/gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu
|
||||||
|
export LD_LIBRARY_PATH=$RKNN_TOOL_CHAIN/lib64:$LD_LIBRARY_PATH
|
||||||
export RKNPU2_DIR=$(pwd)/rknpu2
|
export RKNPU2_DIR=$(pwd)/rknpu2
|
||||||
}
|
}
|
||||||
|
|
||||||
build_ocv() {
|
build_ocv_arm_gnueabi() {
|
||||||
if [ ! -e "opencv" ];then
|
if [ ! -e "opencv" ];then
|
||||||
git clone https://github.com/opencv/opencv --depth=1 --branch=4.6.0 --recursive
|
git clone https://github.com/opencv/opencv --depth=1 --branch=4.6.0 --recursive
|
||||||
fi
|
fi
|
||||||
if [ ! -e "opencv/build_rknpu" ];then
|
if [ ! -e "opencv/build_arm_gnueabi" ];then
|
||||||
mkdir -p opencv/build_rknpu
|
mkdir -p opencv/build_arm_gnueabi
|
||||||
fi
|
fi
|
||||||
cd opencv/build_rknpu
|
cd opencv/build_arm_gnueabi
|
||||||
rm -rf CMakeCache.txt
|
rm -rf CMakeCache.txt
|
||||||
cmake .. -DCMAKE_INSTALL_PREFIX=$(pwd)/install -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-gnueabi.toolchain.cmake \
|
cmake .. -DCMAKE_INSTALL_PREFIX=install -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-gnueabi.toolchain.cmake \
|
||||||
|
-DBUILD_PERF_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTS=OFF -DCMAKE_BUILD_TYPE=Release
|
||||||
|
good_nproc
|
||||||
|
jobs=$?
|
||||||
|
make -j${jobs} && make install
|
||||||
|
export OPENCV_PACKAGE_DIR=$(pwd)/install/lib/cmake/opencv4
|
||||||
|
cd -
|
||||||
|
}
|
||||||
|
|
||||||
|
build_ocv_aarch64() {
|
||||||
|
if [ ! -e "opencv" ];then
|
||||||
|
git clone https://github.com/opencv/opencv --depth=1 --branch=4.6.0 --recursive
|
||||||
|
fi
|
||||||
|
if [ ! -e "opencv/build_aarch64" ];then
|
||||||
|
mkdir -p opencv/build_aarch64
|
||||||
|
fi
|
||||||
|
cd opencv/build_aarch64
|
||||||
|
rm -rf CMakeCache.txt
|
||||||
|
cmake .. -DCMAKE_INSTALL_PREFIX=install -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-gnu.toolchain.cmake \
|
||||||
-DBUILD_PERF_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTS=OFF -DCMAKE_BUILD_TYPE=Release
|
-DBUILD_PERF_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTS=OFF -DCMAKE_BUILD_TYPE=Release
|
||||||
good_nproc
|
good_nproc
|
||||||
jobs=$?
|
jobs=$?
|
||||||
@ -82,12 +104,10 @@ build_mmdeploy_with_rknpu() {
|
|||||||
-DMMDEPLOY_TARGET_BACKENDS="rknn" \
|
-DMMDEPLOY_TARGET_BACKENDS="rknn" \
|
||||||
-DRKNPU_DEVICE_DIR="${RKNPU_DIR}"/rknn/rknn_api/librknn_api \
|
-DRKNPU_DEVICE_DIR="${RKNPU_DIR}"/rknn/rknn_api/librknn_api \
|
||||||
-DOpenCV_DIR="${OPENCV_PACKAGE_DIR}"
|
-DOpenCV_DIR="${OPENCV_PACKAGE_DIR}"
|
||||||
make -j$(nproc) && make install
|
|
||||||
|
|
||||||
good_nproc
|
good_nproc
|
||||||
jobs=$?
|
jobs=$?
|
||||||
make -j${jobs}
|
make -j${jobs} && make install
|
||||||
make install
|
|
||||||
|
|
||||||
ls -lah install/bin/*
|
ls -lah install/bin/*
|
||||||
}
|
}
|
||||||
@ -109,13 +129,11 @@ build_mmdeploy_with_rknpu2() {
|
|||||||
-DMMDEPLOY_BUILD_EXAMPLES=ON \
|
-DMMDEPLOY_BUILD_EXAMPLES=ON \
|
||||||
-DMMDEPLOY_TARGET_BACKENDS="rknn" \
|
-DMMDEPLOY_TARGET_BACKENDS="rknn" \
|
||||||
-DRKNPU2_DEVICE_DIR="${RKNPU2_DIR}/runtime/${device_model}" \
|
-DRKNPU2_DEVICE_DIR="${RKNPU2_DIR}/runtime/${device_model}" \
|
||||||
-DOpenCV_DIR="${RKNPU2_DIR}"/examples/3rdparty/opencv/opencv-linux-aarch64/share/OpenCV
|
-DOpenCV_DIR="${OPENCV_PACKAGE_DIR}"
|
||||||
make -j$(nproc) && make install
|
|
||||||
|
|
||||||
good_nproc
|
good_nproc
|
||||||
jobs=$?
|
jobs=$?
|
||||||
make -j${jobs}
|
make -j${jobs} && make install
|
||||||
make install
|
|
||||||
|
|
||||||
ls -lah install/bin/*
|
ls -lah install/bin/*
|
||||||
}
|
}
|
||||||
@ -126,6 +144,8 @@ print_success() {
|
|||||||
echo "----------------------------------------------------------------------"
|
echo "----------------------------------------------------------------------"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
echo "the current workspace: $(pwd)"
|
||||||
|
|
||||||
if [ ! -e "../mmdeploy-dep" ];then
|
if [ ! -e "../mmdeploy-dep" ];then
|
||||||
mkdir ../mmdeploy-dep
|
mkdir ../mmdeploy-dep
|
||||||
fi
|
fi
|
||||||
@ -135,17 +155,19 @@ device_model=$(echo "$1" | tr [:lower:] [:upper:])
|
|||||||
case "$device_model" in
|
case "$device_model" in
|
||||||
RK1808|RK1806|RV1109|RV1126)
|
RK1808|RK1806|RV1109|RV1126)
|
||||||
install_rknpu_toolchain
|
install_rknpu_toolchain
|
||||||
build_ocv
|
build_ocv_arm_gnueabi
|
||||||
cd ../mmdeploy
|
cd ../mmdeploy
|
||||||
build_mmdeploy_with_rknpu
|
build_mmdeploy_with_rknpu
|
||||||
;;
|
;;
|
||||||
RK3566|RK3568)
|
RK3566|RK3568)
|
||||||
install_rknpu2_toolchain
|
install_rknpu2_toolchain
|
||||||
|
build_ocv_aarch64
|
||||||
cd ../mmdeploy
|
cd ../mmdeploy
|
||||||
build_mmdeploy_with_rknpu2 "RK356X"
|
build_mmdeploy_with_rknpu2 "RK356X"
|
||||||
;;
|
;;
|
||||||
RK3588|RV1106)
|
RK3588|RV1106)
|
||||||
install_rknpu2_toolchain
|
install_rknpu2_toolchain
|
||||||
|
build_ocv_aarch64
|
||||||
cd ../mmdeploy
|
cd ../mmdeploy
|
||||||
build_mmdeploy_with_rknpu2 "$device_model"
|
build_mmdeploy_with_rknpu2 "$device_model"
|
||||||
;;
|
;;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user