这里主要记录将DBface移植到android平台上的记录。

1. requirements

  • 192.7142,android studio的版本
  • ndk的版本为:19.2.5345600是不行的,21.1.6352462

2. 其他

  1. android安装apk的时候,“安装异常”
    在"project"—“android”----“Gradle Scripts”—"gradle.properties"中加入一句android.injected.testOnly=false
    【ncnn android】算法移植(九)——DBface android移植_第1张图片
  2. 项目中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(libncnn        PROPERTIES 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( mtcnn        libncnn        android        jnigraphics        z        ${log-lib} )
  1. 在jni.cpp中需要将模型声明为static
    static DBface *dBface;或者static ncnn::Net model

  2. android项目build.gradle的写法

apply plugin: 'com.android.application'android {    compileSdkVersion 29    buildToolsVersion "29.0.3"    defaultConfig {        applicationId "com.example.ncnntest1"        minSdkVersion 21        targetSdkVersion 29        versionCode 1        versionName "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 false            proguardFiles 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'
  1. 改app的名字
    【ncnn android】算法移植(九)——DBface android移植_第2张图片

  2. 在写c++推理代码的时候,注意入口参数为ncnn::Mat,不要用cv::Mat。所以需要在调用前把数据整理好。

  3. 看很多ncnn android例子都是在java中读取模型之后传入c++。而官方的例子,是在c++中载入模型,这样更有利于前后端分离。

更多相关文章

  1. Android 进程和线程模型
  2. [Android] Android进程和线程模型
  3. android 查看apk中资源文件
  4. Android xml资源文件animal动画解析
  5. Android的线程模型
  6. Android 资源文件中的符号含义与说明: @ ?
  7. Android点击事件的四种写法

随机推荐

  1. android 布局文件属性说明
  2. Android面试必备知识点总结
  3. Android安卓51个开源代码
  4. android 问题总结
  5. Android(安卓)总结
  6. 上百个Android开源项目分享
  7. android之组件1
  8. android 环境搭建 windows 和linux 环境
  9. 自定义ListView中的分割线
  10. actionbar设置menu以及获取item实例