8
7

More than 3 years have passed since last update.

AndroidStudio で OpenCV をインポートする

Last updated at Posted at 2019-11-17

OpenCV

OpenCV( Open Source Computer Vision Library) は、
オープンソースの画像処理のライブラリである。

開発言語は、CPUの特性を活かすためにC/C++が採用されている。
Java、Python、.NET、MATLAB 用のラッパーが用意されている。

プラットフォームは、Windows、macOS、LINUX に加えて、Android、iOSをサポートしている。

OpenCV

Android 用 OpenCV

OpenCV の公式なサポートとして、
Android 用の SDK が用意されている。

C/C++ソースコード、Javaソースコード、ビルド済みの共有ライブラリ(shared object file)が同封されている。

OpenCV の Core 部分は、共有ライブラリとして同封されている。

Java のソースコードは、Android API 21 からサポートされた Camera2 API と Runtime Permission に対応している。

AndroidStudio にインポートできるように build.gradle が同封されている。

8個のサンプルが同封されている。

OpenCV for Android

reference : camera2

developer : アプリの権限をリクエストする

開発環境

  • mcOS : 10.11.6 El Capitan
  • Android Studio : 2.2
  • buildTools : 28.0.3
  • SDK : 26
  • NDK : 20.0.5594570
  • Cmake : 3.6.4111459

  • 実機 : Nexus5
    Android : 6.0.1 Marshmallow

AndroidStudio に OpenCV をインポートする。

OpenCVの公式ドキュメントには、
Eclipse にインポートする手順が掲載されている。

OpenCV4Android SDK : Import OpenCV library and samples to the Eclipse

Android Studio にインポートする手順は。
下記の記事を参考にした。

8個のサンプルを試すにあたり、サンプルごとにインポートしてビルドしていては、効率が悪い。
Android のライブラリ(aar)を作成する。

(1) OpenCV Android SDK をダウンロードする
https://github.com/opencv/opencv/releases
2019年11月時点の最新バージョンは4.1.2。

(2) 新規のプロジェクトを作成する
File -> New -> New Project -> Empty Activity
OpenCV Android SDK の sdk/build.gradle に合わせて、
下記のバージョンを設定する
- compileSdkVersion 26
- minSdkVersion 21
- targetSdkVersion 26

(3) OpenCV の Android SDK をインポートする
File -> New -> Import Module
Module name を 「:sdk」 から「opencv」に変更する。

(4) 依存関係を設定する
File -> Project Structure

(5) Makeする
Build -> Make Projec
いろいろエラーが出るので、
opencv/build.gradle を修正する

opencv/build.gradle を修正する

Makeすると、
いろいろエラーが出るので、
opencv/build.gradle を修正する

buildToolsVersion is not specified.

// app/build.gradle に合わせて、下記を設定する
    buildToolsVersion "28.0.3"

Could not find method doNotStrip() for arguments [*/.so] on object of type

// 下記をコメントアウトする
                // doNotStrip '**/*.so'  // controlled by OpenCV CMake scripts

Expected caller to ensure valid ABI: MIPS

// 実機のCPUに合わせて abiFilters を追加する
        ndk {
            abiFilters 'armeabi-v7a'
        }

Unexpected native build target opencv_jni_shared.

// 下記をコメントアウトする
                // targets "opencv_jni_shared"

下記のようなエラーが出る。
これは、OpenCV の Android SDK にて、廃止予定(Deprecated) の Camera API を使っているため。
注意だけなので、無視しても支障ない。

注意:一部の入力ファイルは非推奨のAPIを使用またはオーバーライドしています。
注意:詳細は、- Xlint:deprecationオプションを指定して再コンパイルしてください。

reference : Camera

AAR(Android Library) に "libc++_shared.so" を同封する

動作確認のためのアプリを実行すると、下記のエラーになる。

dlopen failed: library "libc++_shared.so" not found

libcxx_helper/CMakeLists.txt を実行すると、
同封されるようだが、
私の環境では、機能しなかった。

下記を参考に、
NDKから "libc++_shared.so" をコピーするCMakeLists.txt を作成する。

Android Studio CMake - shared library missing libc++_shared.so? Can CMake bundle this?

 opencv/build.gradle
           //  path (project.projectDir.toString() + '/libcxx_helper/CMakeLists.txt')
            path 'CMakeLists.txt'
 CMakeLists.txt
  configure_file(
    "${ANDROID_NDK}/sources/cxx-stl/${LIB_PATH}/libs/${ANDROID_ABI}/${SO_NAME}" 
    "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${SO_NAME}" 
    COPYONLY)

動作確認する

動作確認のためのアプリを作成する。

(1) 新規のプロジェクトを作成する
File -> New -> New Project -> Empty Activity

(2) aar をインポートする
File -> New -> Import Module -> Import JAR / AAR Package

(3) 依存関係を設定する
File -> Project Structure

(4) MainActivity.java を変更する

 MainActivity.java
// OpenCVがロードできるか確認する
    if(OpenCVLoader.initDebug()){
        Log.d( TAG,  load "OpenCV Successfully" );
    }

(5) ビルドする
Build -> Build APK

(6) 共有ファイルが同封されていることを確認する
Build -> Analyze APK
下記の2つが同封されていることを確認する。
- libopencv_java4.so
- libc++_shared.so
analyze_apk.png

(7) アプリを実行する
Run -> Run app

サンプルコードをgithub に公開した。
- Android のライブラリ(aar)を作成する
https://github.com/ohwada/Android_Samples/tree/master/Opencv412Lib
- 動作確認のためのアプリ
https://github.com/ohwada/Android_Samples/tree/master/Opencv41

関連記事

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7