在安卓平台编译人脸检测模型

1. 动态库的编译

  • 下载tencent_ncnn对应的源码
  • 在src/main/下新建jni目录,将下载好的ncnn源码文件导入
  • 我这里使用的是cmake编译工具,当然大家可以使用ndk编译工具进行编译
  • 安装cmake构建工具,在File-Setting - Android SDK - SDK Tools - 勾选CMake进行安装下载
  • 查看local.properties文件中是否有cmake.dir
cmake.dir=C\:\\Users\\TH\\AppData\\Local\\Android\\Sdk\\cmake\\3.10.2.4988404
sdk.dir=C\:\\Users\\TH\\AppData\\Local\\Android\\Sdk
  • 在build.gradle中屏蔽dependencies中引用的所有依赖库
  • 在android{}中添加cmake版本和文件路径
android{ 
      externalNativeBuild {
        cmake {
            version "3.10.2"
            path file('src/main/jni/CMakeLists.txt')
        }
   }
}
  • 基于tencent_ncnn库进行封装对外提供nativate函数调用
  • 编写对应的CMakeLists.txt文件
project(lenovoncnn)
cmake_minimum_required(VERSION 3.10)
set(ncnn_DIR ${CMAKE_SOURCE_DIR}/ncnn-20231027-android-vulkan/${ANDROID_ABI}/lib/cmake/ncnn)
find_package(ncnn REQUIRED)
add_library(lenovoncnn SHARED mtcnn.cpp mtcnn_jni.cpp)
target_link_libraries(lenovoncnn ncnn)
  • 在应用程序包下创建对应JNI的接口函数
  • 导入模型到资源目录下assets
  • 进行build构建编译,编译后的动态库会在build - intermedites - cmake下,会有不同cpu架构可用的动态库
  • 仓库代码路径:https://gitee.com/network-anti-addiction/compile.git

2. 编译后的动态库调用

  • 新建子module 包名为编译库对应的包名。
  • 将编译后的动态库导入lib下
  • 在build.gradle中进行配置
android {

    defaultConfig {
        ndk {
            abiFilters 'x86', 'armeabi-v7a', 'arm64-v8a', 'x86_64'
        }
    }

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

}

  • 在子module包下创建对应的nativate method 调用System.loadLibrary("")进行加载动态库
  • 在app主module下进行模型存放及模型调用
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容