簡單移植dlib和opencv到Androd平臺進(jìn)行人臉檢測_第1頁
簡單移植dlib和opencv到Androd平臺進(jìn)行人臉檢測_第2頁
簡單移植dlib和opencv到Androd平臺進(jìn)行人臉檢測_第3頁
簡單移植dlib和opencv到Androd平臺進(jìn)行人臉檢測_第4頁
簡單移植dlib和opencv到Androd平臺進(jìn)行人臉檢測_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

簡單移植簡單移植dlib和opencv到Androd平臺進(jìn)??臉檢測_android[object之前一直想做一下人臉檢測,網(wǎng)上一大堆SDK全是收費(fèi)的,而且基本上都不是本地檢測。后來總算找到了dlib官方的demo速度實(shí)在太慢,后面有空會去學(xué)習(xí)一些優(yōu)化經(jīng)驗(yàn),這篇文章直接從編譯開始講起集成,并且使用官方demo以及機(jī)器學(xué)習(xí)模型來進(jìn)行人臉檢測。首先下載dlib與opencv的新版,以及AndroidStudio的NDK工具準(zhǔn)備。\h\hopencv-3.4.4\h之前我想用18的,18dlib現(xiàn)在大部分c庫都有python腳本來進(jìn)行編譯,但是配一些環(huán)境也是麻煩,我們直接用AndroidStudio來進(jìn)行編譯即可。新建一個AndroidStudio的C++提了。直接看編譯的項(xiàng)目結(jié)構(gòu)。我們把下載的dlib庫的的源文件全部copy到cpp目錄下。然后打開我們的才CMakeLists.txtcmake_minimum_required(VERSIONset(DLIB_IN_PROJECT_BUILDfalse)set(BUILD_SHARED_LIBStrue)#編譯成動態(tài)庫set(DLIB_NO_GUI_SUPPORTtrue)#不需要gui支持set(ARM_NEON_IS_AVAILABLEtrue#開啟neon優(yōu)化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-}}}到目前為止其實(shí)已經(jīng)可以編譯出來so文件了,但是最后竟然栽在了System.loadLibrary(“xxx”)上,加載dlib的so掉logger_kernel_1.cpp中的139行。上面的都完成之后,我們執(zhí)行assembleDebug,編譯出來so由于Opencv同樣新建一個AndroidStudio的C++項(xiàng)目,我們將opencv和dlib的庫文件都引入到AndroidStudio中,然后再build.gradle中配置一些編譯參數(shù),并且將opencv和dlib包含到項(xiàng)目中。這些步驟基本都十分雷同,我就不贅述了,大家可以直接參考源碼。我重點(diǎn)說一下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")#包含當(dāng)前目錄的cpp文件add_definitions(-DDLIB_PNG_SUPPORT)#需要加入這個宏定義,不然會導(dǎo)致無法使用))很簡單的功能,就是通過native層返回一個數(shù)組,生成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}關(guān)鍵的檢測代碼,我把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=//機(jī)器學(xué)習(xí)的模型,從sdshape_predictorsp;deserialize("/sdcard/dlibfolder/shape_predictor_68_face_landmarks.dat")>>sp;//導(dǎo)入實(shí)現(xiàn)的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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論