基於android studio開發的 opencv關於android人臉識別的DEMO

(2018年11月23日 在 <a href="revise_181123">鏈接 </a> 補充了一個新的BUG)

一個新項目的導入 可能會遇到多個問題,就這些問題 做個 解決集合,以便日後回顧,

版本 : android studio3.1.4 ,opencv-3.4.1-android-sdk

首先 我們要給 IDE 安裝 ndk 的環境:

        打開 AS的 Settings:      File->Settings

image.png


(PS: 好像是這些。。。。具體的忘記了。。。  ̄□ ̄||)


Apply 後 就等着 下載安裝吧~~~~~


環境弄好後 我們開始 看具體的 實施步驟:


一、下載OpenCV android 的SDK ,

       (2018年9月10日最新版) https://sourceforge.net/projects/opencvlibrary/files/opencv-android/3.4.1/opencv-3.4.1-android-sdk.zip/download

二、導入項目

    image.png

    image.png

    image.png


    8、next完後直接 finish就好了。

           不過 項目導入後 還沒完,接下來


    image.png


    image.png

    

    image.png


image.png


include ':openCVLibrary341'



然而這時候 還沒有結束: 

    我在編譯後報出了 一個問題:

    image.png


這是因爲 OpenCV 的 compileSdkVersion 太低了

image.png


我這裏是 改成了和 27 就編譯通過了


到這裏 導入工作 也就進行了一半了:

    接下來 還要導入 .so文件,.mk文件

這些文件分別在:

    1、.so文件:

            image.png


    2、.mk文件在


image.png


然後接下來 在 android studio 的 src/main目錄下 分別 新建 jni 和 jniLibs兩個目錄,如圖

    image.png


然後將 之前 的    ....\OpenCV-android-sdk\samples\face-detection\jni  目錄下的所有文件複製到項目的jni目錄下


然後將       .....\OpenCV-android-sdk\sdk\native\libs 目錄下的所有內容複製到 jniLibs目錄下

        如圖:

image.png


這時候 還要配置下 jni 的目錄,配置方式如圖:

    image.png

    

externalNativeBuild{
    ndkBuild{
        path }
}



ok 我們編譯下看看~~~


結果 Duang的一下 搞了一個錯誤~~~

image.png


其實 這個東西 就是在我們剛剛 複製過來的 Android.mk中

image.png


只要將這個 按照我們自己的實際路徑改一下 就ok了


image.png


這樣再次編譯 ok 通過了~ 贊一個先


不過這裏先說一下 配置還是有問題的, 但是我們先使用OpenCV 中的 simple 看看吧 

    simple 路徑:OpenCV-android-sdk\samples\face-detection

    因爲這是個 Eclipse的項目, 我就簡單的將 Samples 中的相關代碼 複製到 項目中了。主要有這幾樣東西:


    1、OpenCV-android-sdk\samples\face-detection\res\raw 這個目錄中是 人臉用到的文件所以是必須的


    2、OpenCV-android-sdk\samples\face-detection\src\org\opencv\samples\facedetect     目錄中是 activity文件 和一個工具的java文件


    3、需要用到的權限(在這裏我沒遇到什麼問題,所以就不多說了)

        

    <uses-permission android:name="android.permission.CAMERA"/>

    <uses-feature android:name="android.hardware.camera" android:required="false"/>

    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>

    <uses-feature android:name="android.hardware.camera.front" android:required="false"/>

    <uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>


    4、

image.png


5、最後 還有FdActivity 的 layout 別忘了


ok 這個時候 可以運行 看看了,不過我可以提前說明,現在運行會崩潰的~~~

不過沒關係 我們看一下bug~~~

09-10 11:17:15.555 21819-21819/com.example.china_yzh.demoopencv E/zygote64: No implementation found for long com.example.china_yzh.demoopencv.DetectionBasedTracker.nativeCreateObject(java.lang.String, int) (tried Java_com_example_china_1yzh_demoopencv_DetectionBasedTracker_nativeCreateObject and Java_com_example_china_1yzh_demoopencv_DetectionBasedTracker_nativeCreateObject__Ljava_lang_String_2I)

09-10 11:17:15.555 21819-21819/com.example.china_yzh.demoopencv D/AndroidRuntime: Shutting down VM

09-10 11:17:15.557 21819-21819/com.example.china_yzh.demoopencv E/AndroidRuntime: FATAL EXCEPTION: main

    Process: com.example.china_yzh.demoopencv, PID: 21819

    java.lang.UnsatisfiedLinkError: No implementation found for long com.example.china_yzh.demoopencv.DetectionBasedTracker.nativeCreateObject(java.lang.String, int) (tried Java_com_example_china_1yzh_demoopencv_DetectionBasedTracker_nativeCreateObject and Java_com_example_china_1yzh_demoopencv_DetectionBasedTracker_nativeCreateObject__Ljava_lang_String_2I)

        at com.example.china_yzh.demoopencv.DetectionBasedTracker.nativeCreateObject(Native Method)

        at com.example.china_yzh.demoopencv.DetectionBasedTracker.<init>(DetectionBasedTracker.java:9)

        at com.example.china_yzh.demoopencv.FdActivity$1.onManagerConnected(FdActivity.java:91)

        at com.example.china_yzh.demoopencv.FdActivity.onResume(FdActivity.java:149)

        at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1361)

        at android.app.Activity.performResume(Activity.java:7361)

        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3765)

image.png


出錯的原因 就是我上面紅色 標出的內容:

No implementation found for long com.example.china_yzh.demoopencv.DetectionBasedTracker.nativeCreateObject


這個問題 我是找了好久 才 弄明白的。。。。

其實 這個就是我之前 導包是 留下的那個問題 ,  之前在 jni目錄下 導入了 四個文件 分別是


image.png


之前 OpenCV.mk找不到 是因爲 Android.mk 


這次的錯誤 是後面兩個 文件 , 一個 .ccp文件 和一個 .h文件。


我們來看看文件的內容:


image.png


看到這個是不是覺得眼熟 ,沒錯 我們之前的 bug中 有類似的 文本說明:

image.png


很簡單 將 上面說的 .h和.cpp中的 所有 都改成這個目錄就好了,(ps:這裏的內容是因項目路徑而異的,根據實際情況來)


image.png


不用擔心 Replace吧~


image.png


改完後 我們再來運行看看 

perfect ~~~




<a name="revise_181123">修改日期:2018年11月23日</a>

修改原因:遇見新的BUG

BUG: Android NDK: APP_STL gnustl_static is no longer supported.  

        AS 不再支持 gnustl_static 要換成 c++_static 或作者 c++_shared(是不是這麼寫的忘記了。。。不過報錯的時候會有顯示的)

修改位置:

image.png









來看看 運行效果


image.png


額 可能邊上兩個太黑了 -_-||~~~ 我不是有意的 。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章