MMDeploy项目Android平台构建指南
mmdeploy OpenMMLab Model Deployment Framework 项目地址: https://gitcode.com/gh_mirrors/mm/mmdeploy
前言
本文将详细介绍如何在Linux环境下为Android平台交叉编译构建MMDeploy SDK。MMDeploy是一个开源的模型部署工具链,支持将训练好的深度学习模型高效部署到多种硬件平台。对于移动端部署而言,Android平台的支持尤为重要。
构建流程概述
MMDeploy的Android平台构建采用交叉编译方式,主要分为两个阶段:
- 在Linux平台上构建模型转换工具(Converter)
- 使用Android工具链构建运行在Android设备上的推理SDK
本文重点介绍第二阶段:Android SDK的构建过程。
环境准备
基础工具链安装
CMake安装
CMake是跨平台的构建工具,我们需要安装3.14.0或更高版本。推荐安装3.20.0版本:
wget https://github.com/Kitware/CMake/releases/download/v3.20.0/cmake-3.20.0-linux-x86_64.tar.gz
tar -xzvf cmake-3.20.0-linux-x86_64.tar.gz
sudo ln -sf $(pwd)/cmake-3.20.0-linux-x86_64/bin/* /usr/bin/
Android NDK安装
Android NDK(Native Development Kit)是构建原生Android应用的工具集。我们需要安装19.0或更高版本:
wget https://dl.google.com/android/repository/android-ndk-r23c-linux.zip
unzip android-ndk-r23c-linux.zip
cd android-ndk-r23c
export NDK_PATH=${PWD}
依赖库安装
OpenCV for Android
OpenCV是计算机视觉基础库,Android版本需要单独安装:
export OPENCV_VERSION=4.6.0
wget https://github.com/opencv/opencv/releases/download/${OPENCV_VERSION}/opencv-${OPENCV_VERSION}-android-sdk.zip
unzip opencv-${OPENCV_VERSION}-android-sdk.zip
export OPENCV_ANDROID_SDK_DIR=${PWD}/OpenCV-android-sdk
NCNN推理引擎
NCNN是一个高效的神经网络推理框架,特别适合移动端部署。我们需要从源码构建:
git clone -b 20220721 https://github.com/Tencent/ncnn.git
cd ncnn
git submodule update --init
export NCNN_DIR=${PWD}
export ANDROID_ABI=arm64-v8a
mkdir -p build_${ANDROID_ABI}
cd build_${ANDROID_ABI}
cmake -DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \
-DANDROID_ABI="${ANDROID_ABI}" \
-DANDROID_PLATFORM=android-30 \
-DNCNN_VULKAN=ON \
-DNCNN_DISABLE_EXCEPTION=OFF \
-DNCNN_DISABLE_RTTI=OFF \
-DANDROID_USE_LEGACY_TOOLCHAIN_FILE=False ..
make -j$(nproc) install
OpenJDK(可选)
如果需要使用Java API,还需要安装OpenJDK开发环境。
MMDeploy SDK构建
下面以NCNN作为推理后端,展示如何构建Android平台的SDK和示例程序:
export ANDROID_ABI=arm64-v8a
cd ${MMDEPLOY_DIR}
mkdir -p build_${ANDROID_ABI} && cd build_${ANDROID_ABI}
cmake .. \
-DMMDEPLOY_BUILD_SDK=ON \
-DMMDEPLOY_BUILD_EXAMPLES=ON \
-DMMDEPLOY_BUILD_SDK_JAVA_API=ON \
-DOpenCV_DIR=${OPENCV_ANDROID_SDK_DIR}/sdk/native/jni/abi-${ANDROID_ABI} \
-Dncnn_DIR=${NCNN_DIR}/build_${ANDROID_ABI}/install/lib/cmake/ncnn \
-DMMDEPLOY_TARGET_BACKENDS=ncnn \
-DMMDEPLOY_SHARED_LIBS=OFF \
-DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \
-DANDROID_USE_LEGACY_TOOLCHAIN_FILE=False \
-DANDROID_ABI=${ANDROID_ABI} \
-DANDROID_PLATFORM=android-30 \
-DANDROID_CPP_FEATURES="rtti exceptions"
make -j$(nproc) && make install
构建选项说明
- DMMDEPLOY_BUILD_SDK:是否构建SDK
- DMMDEPLOY_BUILD_EXAMPLES:是否构建示例程序
- DMMDEPLOY_TARGET_BACKENDS:指定推理后端,如ncnn
- DANDROID_ABI:指定目标架构,如arm64-v8a
- DANDROID_PLATFORM:指定目标Android API级别
常见问题
- 版本兼容性问题:确保所有依赖库的版本与MMDeploy要求的版本一致
- 构建失败:检查NDK路径和环境变量设置是否正确
- 性能问题:可以尝试启用Vulkan支持以获得更好的性能
结语
通过本文的指导,开发者可以成功构建适用于Android平台的MMDeploy SDK。构建完成后,可以将生成的库文件和示例程序集成到Android应用中,实现高效的模型推理功能。对于不同的应用场景,可以灵活调整构建选项以满足特定需求。
mmdeploy OpenMMLab Model Deployment Framework 项目地址: https://gitcode.com/gh_mirrors/mm/mmdeploy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考