版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
简单移植简单移植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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 巨大儿产后康复护理查房
- 护理安全:患者隐私保护
- Furan-d4-Furfuran-d-sub-4-sub-生命科学试剂-MCE
- 妇科护理案例分享
- 初中道德与法治七年级下册开学第一课教学设计
- 高中地理必修一“天空守望者”大单元教学设计
- “汗”卫健康炽热慧行-高中体育与健康“防暑与热浪应对”主题班会教学设计
- 小学四年级道德与法治班会教学设计:公约“童”行民主协商定班规
- 高二物理“关键期”家长会讲义:赋能自主进阶跨越学科分化
- 【小学劳动·三年级上册】国庆主题劳动项目式学习教案:气球造型艺术献礼祖国华诞
- 2025年铁路车站值班员考试(题库版)附答案
- 测绘成果保密与管理
- 2025年福建省三明市辅警招聘公安基础知识考试题库及答案
- Windows操作系统介绍
- 加盟美宜佳合同跟协议
- 廉洁警示教育培训
- 2025年国家开放大学(电大)《当代中国政治制度概论》期末考试备考题库及答案解析
- 桡骨远端骨折护理课件
- 食品安全管理制度电子版
- 研发区域管理办法
- 四川省广元市2024年中考英语试题(含答案)
评论
0/150
提交评论