版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
简单移植简单移植dlib和opencv到Androd平台进⾏⼈脸检测_android[object之前一直想做一下人脸检测,网上一大堆SDK全是收费的,而且基本上都不是本地检测。后来总算找到了dlib官方的demo速度实在太慢,后面有空会去学习一些优化经验,这篇文章直接从编译开始讲起集成,并且使用官方demo以及机器学习模型来进行人脸检测。首先下载dlib与opencv的新版,以及AndroidStudio的NDK工具准备。\h\hopencv-3.4.4\h之前我想用18的,18dlib现在大部分c库都有python脚本来进行编译,但是配一些环境也是麻烦,我们直接用AndroidStudio来进行编译即可。新建一个AndroidStudio的C++提了。直接看编译的项目结构。我们把下载的dlib库的的源文件全部copy到cpp目录下。然后打开我们的才CMakeLists.txtcmake_minimum_required(VERSIONset(DLIB_IN_PROJECT_BUILDfalse)set(BUILD_SHARED_LIBStrue)#编译成动态库set(DLIB_NO_GUI_SUPPORTtrue)#不需要gui支持set(ARM_NEON_IS_AVAILABLEtrue#开启neon优化set(DLIB_PNG_SUPPORTtrue)#打开PNG支持add_library(native-libSHAREDsrc/main/cpp/native-#Finally,youneedtotellCMakethatthisprogram,assignment_learning_ex,#dependsondlib.Youdothatwiththisstatement:然后打个build.gradle,主要就是配置一些cpuapplyplugin:applyplugin:'kotlin-applyapplyplugin:'kotlin-android-extensions'android{compileSdkVersion28defaultConfig{applicationId"pile"minSdkVersion23targetSdkVersionversionCodeversionNametestInstrumentationRunner"android.support.test.runner.AndroidJUnitRunner"externalNativeBuild{cmakeabiFilters'armeabi-}}}buildTypesdebugexternalNativeBuild{cmake{arguments'-DANDROID_PLATFORM=android-28','-DANDROID_TOOLCHAIN=clang',cFlags'-O3','-fsigned-char','-Wformat','-mfpu=neon','-mfloat-abi=softfp-frtti'//fulloptimization,chardatatypeisinlinecppFlags'-O3','-fexceptions','-fsigned-char',"-frtti-std=c++14",'-Wformat'}}minifyEnabledfalsedebuggabletrueproguardFilesgetDefaultProguardFile('proguard-android.txt'),'proguard-}}}到目前为止其实已经可以编译出来so文件了,但是最后竟然栽在了System.loadLibrary(“xxx”)上,加载dlib的so掉logger_kernel_1.cpp中的139行。上面的都完成之后,我们执行assembleDebug,编译出来so由于Opencv同样新建一个AndroidStudio的C++项目,我们将opencv和dlib的库文件都引入到AndroidStudio中,然后再build.gradle中配置一些编译参数,并且将opencv和dlib包含到项目中。这些步骤基本都十分雷同,我就不赘述了,大家可以直接参考源码。我重点说一下cmake以及c++代码。简单加入两个socmake_minimum_requiredcmake_minimum_required(VERSION3.4.1)set(PATH_TO_NATIVE${PATH_TO_MEDIACORE}/src/main/cpp)set(PATH_TO_PRE_BUILTinclude_directories(BEFORE${PATH_TO_MEDIACORE}/libs/include/)file(GLOBFFMPEG_DECODE_SOURCE"*.cpp")#包含当前目录的cpp文件add_definitions(-DDLIB_PNG_SUPPORT)#需要加入这个宏定义,不然会导致无法使用))很简单的功能,就是通过native层返回一个数组,生成bitmapclassclassMainActivity:AppCompatActivity()overridefunonCreate(savedInstanceState:Bundle?){valprogress=ProgressDialog(this)btn_detect.setOnClickListener{thread{valbyte=valb=Bitmap.createBitmap(byte,384,250,Bitmap.Config.ARGB_8888)runOnUiThread{}}}}}}companionobject//Usedtoloadthe'native-lib'libraryonapplicationinit}}privateexternalfun}native-简单返回一个intexternextern"C"JNIEXPORTjintArrayJNICALLJava_com_ty_opencvtest_MainActivity_detect(JNIEnv*env,jobject){jintArrayintArray=env-constjint*buf=reinterpret_cast<constjint*>(test_faced());env->SetIntArrayRegion(intArray,0,384*250,buf);return}关键的检测代码,我把demo检测人脸,每张脸保存68使用Opencv##include<dlib/image_processing/frontal_face_detector.h>#include<dlib/image_processing/render_face_detections.h>#include<dlib/image_processing.h>#include<dlib/gui_widgets.h>#include<dlib/image_io.h>#include<iostream>#include<opencv2/opencv.hpp>usingnamespacedlib;usingnamespacestd;#include<android/log.h>#defineLOG_TAG#defineLOGD(...)((void)android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,VA_ARGSuchar*test_faced(){try{//frontal_face_detectordetector=//机器学习的模型,从sdshape_predictorsp;deserialize("/sdcard/dlibfolder/shape_predictor_68_face_landmarks.dat")>>sp;//导入实现的pngarray2d<rgb_pixel>load_image(img,"/sdcard/dlibfolder/header.png");constrectangle&rectOri=get_rect(img);////constrectangle&rectUp=floatscalY=rectUp.bottom()/rectOri.bottom();floatscalX=rectUp.right()/rectOri.right();LOGD("%f==%f",scalY,scalX);//opencvcv::Mattemp;//Nowtellthefacedetectortogiveusalistofbounding//aroundallthefacesinthe//std::vector<rectangle>dets=std::vector<full_object_detection>for(unsignedlongj=0;j<dets.size();++j){full_object_detectionshape=sp(img,dets[j]);}if(!shapes.empty())for(inti=0;i<68;i++)LOGD("%d==%d",shapes[0].part(i).x(),circle(temp,cvPoint(static_cast<int>(shapes[0].part(i).x()/sca
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 车库危房加固方案范本
- 厂区地面处理方案范本
- 企业增资定价方案范本
- 施工方案 定义
- 防盗门发泡胶施工方案
- 保洁用品技术方案范本
- 隧道进出口暗拱施工方案
- 骨折患者的康复训练指导
- 大学生党员思想总结-关注全球气候变化等共同挑战贡献青年智慧
- 2026年自考00301民事诉讼法学(二)试题及答案
- hc工法组合桩施工方案
- 公司租赁个人车辆合同范本3篇
- 清洁教室劳动课件
- 第一单元《1.多彩的亚洲美术》课件-浙人美版初中美术七年级下册
- 无人机保险相关知识培训课件
- 课件:深入学习习近平总书记关于教育的重要论述
- 医院 全员安全生产责任制
- 超声内镜在胰腺疾病诊疗中的应用
- 供应链协同对农村电商发展的机制分析
- CIP、SIP工艺流程操作说明书
- 桩基施工安全措施方案
评论
0/150
提交评论