版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025遼寧沈陽盛京資產(chǎn)管理集團(tuán)有限公司所屬子公司沈陽華海錕泰投資有限公司所屬子公司招聘5人筆試考試備考試題及答案解析
- 2025年南平浦城縣醫(yī)療單位醫(yī)療類儲備人才引進(jìn)考試筆試備考題庫及答案解析
- 版本化軟件部署-洞察及研究
- 2025香蕉種植產(chǎn)業(yè)市場行情供需分析及投資計(jì)算規(guī)劃分析研究報告
- 2025香煙生產(chǎn)產(chǎn)業(yè)供求格局與投資前景規(guī)劃分析審議報告
- 閉環(huán)腦機(jī)接口系統(tǒng)-洞察及研究
- 大數(shù)據(jù)分析在精準(zhǔn)醫(yī)療中的應(yīng)用-洞察及研究
- 2025預(yù)制菜行業(yè)的市場趨勢與競爭戰(zhàn)略研究報告
- 2025預(yù)制菜行業(yè)產(chǎn)量增長供需關(guān)系結(jié)構(gòu)分析餐飲渠道投資機(jī)會行業(yè)競爭報告
- 2025預(yù)制菜加工企業(yè)連鎖發(fā)展行業(yè)供需良性及供應(yīng)鏈規(guī)劃分析報告書
- 鋼筋棚拆除合同范本
- 斷絕親子協(xié)議書
- 【MOOC答案】《光纖光學(xué)》(華中科技大學(xué))章節(jié)作業(yè)期末慕課答案
- 小學(xué)生班級管理交流課件
- DB21T 3722.7-2025高標(biāo)準(zhǔn)農(nóng)田建設(shè)指南 第7部分:高標(biāo)準(zhǔn)農(nóng)田工程施工質(zhì)量評定規(guī)范
- 近八年寧夏中考數(shù)學(xué)試卷真題及答案2024
- 超星爾雅學(xué)習(xí)通《帶您走進(jìn)西藏(西藏民族大學(xué))》2025章節(jié)測試附答案
- 超星爾雅學(xué)習(xí)通《科學(xué)計(jì)算與MATLAB語言(中南大學(xué))》2025章節(jié)測試附答案
- 綠色簡約風(fēng)王陽明傳知行合一
- 【MOOC】宇宙簡史-南京大學(xué) 中國大學(xué)慕課MOOC答案
- 重精管理培訓(xùn)
評論
0/150
提交評論