本文主要是介绍【ncnn android】算法移植(九)——DBface android移植,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这里主要记录将DBface移植到android平台上的记录。
1. requirements
- 192.7142,android studio的版本
- ndk的版本为:
19.2.5345600是不行的,21.1.6352462
2. 其他
- android安装apk的时候,“安装异常”
在"project"—“android”----“Gradle Scripts”—"gradle.properties"中加入一句android.injected.testOnly=false
- 项目中cmake文件的写法
cmake_minimum_required(VERSION 3.4.1)#include头文件目录
include_directories(include) // ncnn的头文件#source directory源文件目录
file(GLOB MTCNN_SRC *.h *.cpp *.c) // 项目源文件
set(MTCNN_COMPILE_CODE ${MTCNN_SRC})#添加ncnn库
add_library(libncnn STATIC IMPORTED )
set_target_properties(libncnnPROPERTIES IMPORTED_LOCATION${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libncnn.a)#编译为动态库
add_library(mtcnn SHARED ${MTCNN_COMPILE_CODE}) // java中用mtcnn库就可以调用jni函数了#添加工程所依赖的库
find_library( log-lib log )
target_link_libraries( mtcnnlibncnnandroidjnigraphicsz${log-lib} )
-
在jni.cpp中需要将模型声明为static
static DBface *dBface;
或者static ncnn::Net model
-
android项目build.gradle的写法
apply plugin: 'com.android.application'android {compileSdkVersion 29buildToolsVersion "29.0.3"defaultConfig {applicationId "com.example.ncnntest1"minSdkVersion 21targetSdkVersion 29versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"externalNativeBuild {cmake {arguments "-DANDROID_TOOLCHAIN=clang"cFlags "-fopenmp -O2 -fvisibility=hidden -fomit-frame-pointer -fstrict-aliasing -ffunction-sections -fdata-sections -ffast-math "cppFlags "-fopenmp -O2 -fvisibility=hidden -fvisibility-inlines-hidden -fomit-frame-pointer -fstrict-aliasing -ffunction-sections -fdata-sections -ffast-math "arguments "-DANDROID_STL=c++_shared", "-DANDROID_CPP_FEATURES=rtti exceptions"cppFlags ""cppFlags "-std=c++14"cppFlags "-frtti"cppFlags "-fexceptions"}}ndk {abiFilters 'armeabi-v7a'// , 'arm64-v8a' //,'x86', 'x86_64', 'armeabi'stl "gnustl_static"}}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}externalNativeBuild {cmake {path "src/main/cpp/CMakeLists.txt"version "3.10.2"}}
}dependencies {implementation fileTree(dir: 'libs', include: ['*.jar'])implementation 'androidx.appcompat:appcompat:1.1.0'implementation 'androidx.constraintlayout:constraintlayout:1.1.3'testImplementation 'junit:junit:4.12'androidTestImplementation 'androidx.test.ext:junit:1.1.1'androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
- ndk设置了处理器的内核类型。
'armeabi-v7a'
-
改app的名字
-
在写c++推理代码的时候,注意入口参数为ncnn::Mat,不要用cv::Mat。所以需要在调用前把数据整理好。
-
看很多ncnn android例子都是在java中读取模型之后传入c++。而官方的例子,是在c++中载入模型,这样更有利于前后端分离。
这篇关于【ncnn android】算法移植(九)——DBface android移植的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!