茨城県つくば市でモバイルアプリ(iPhone、Android)のプログラミングをする日記です。あとWordPress、Raspberry Pi、Arduinoなど。

モバイルアプリ開発@つくば

OpenCV for AndroidをAndroid Studioにインポートする

投稿日:2017年1月16日 更新日:

こんばんは、okuzawatsです。
OpenCV、すごいですね。
無料で使えるのに、メッチャ画像処理してくれます。
OpenCVをAndroidアプリで使ってみたい!
って思ったんですが、Android用に「OpenCV for Android」が用意されていました。

ということで、OpenCV for AndroidをAndroid Studioにインポートする手順をメモしておきます。
使用しているのはMac版のAndroid Studio、バージョンは2.3.3、OpenCV for Androidのバージョンは3.2.0です。

OpenCVは、オープンソースの画像認識ライブラリです。
インテルが開発・公開しており、MacなどのUnix系OS、Linux、Windows、Android、iOSなどに対応しています。
今回は、OpenCVのAndroid用ライブラリ「OpenCV for Android」をAndroidのIDE「Android Studio」にインポートしていきます。

OpenCVとは、Intelによって開発された、画像認識に関連する機能のライブラリのことである。

OpenCVは、コンピュータビジョンと呼ばれる、画像認識・解析に関するコンピューティング技術が主な用途として想定されている。
C言語、C++によって記述することが可能であり、WindowsやLinuxなど複数のプラットフォームに対応している。
BSDライセンスに基づくオープンソースソフトウェア(OSS)として提供されているため、誰でも無償で利用することができる。

出典:OpenCVとは - IT用語辞典 Weblio辞書

OpenCV for AndroidをAndroid Studioにインポートする手順

OpenCV for Androidのダウンロード

まずは、OpenCVのウェブサイトからOpenCV for Androidのライブラリをダウンロードします。
OpenCVのウェブサイトはこちらです。

OpenCV | OpenCV

download opencv for android

OpenCVのウェブサイトの右の方にある「OpenCV for Android」のリンクを選択するとダウンロードが始まります。
ダウンロード容量は246MBくらいです。
Zipファイルがダウンロードされるので、ダウンロード終了後に解凍します。

import opencv for android

OpenCV for Androidモジュールの追加

OpenCV for AndroidのZipファイルを解凍したら、中に入っているライブラリをAndroid Studioにインポートしていきます。
Android StudioでOpenCVをインポートすべきプロジェクトを開いた後、メニューからFile > New > Import Module...と選択します。

import opencv for android

解凍したディレクトリの中にあるsdk > javaをSource directoryとして選択。
解凍先のディレクトリはどこでも大丈夫です。
Module nameは勝手にopenCVLibrary320となってくれた気がします。
パスをきちんと選択したらNext。

import opencv for android

Android Studioが英語で何か言ってきます。

The ADT project imoprter can identify some jar files and even whole source copies of libraries, and replace them with Gradle dependencies. However, it cannot figure out which exact version of the library to use, so it will use the latest. If your project needs to be adjusted to compile with the latest library, you can either import the project again and disable the following options, or better yet, update your project.

要約すると、Gradleの依存性をjarファイルとライブラリのソースで置き換えるけど、どのバージョンのライブラリを使えばいいのかわからないから最新版を使うね。
最新版のライブラリをコンパイルしてプロジェクトで使いたい時は、もう一回プロジェクトにインポートして以下のオプションを無効にしてね、と言っています。

今回はすべてチェックがついたままFinishを押せば大丈夫そうですね。

OpenCV for Androidライブラリの追加

次にライブラリをプロジェクト内に追加していきます。
必要なのは、解凍したディレクトリの中にあるsdk > native > libsというディレクトリの中身です。
この中身をすべて、Android Studioのプロジェクト内に持っていきます。
libsディレクトリごとコピーしておきます。

import opencv for android

Android Studioのプロジェクトウィンドウの上で、コピーしたlibsディレクトリを画像のjniLibsの階層にペーストします。
ペーストしたらディレクトリの名前をlibsからjniLibsという名前に変更しておきます。
画像のような階層構造にならない場合は、画像の「Project▼」と表示されているあたりで表示を切り替えてみましょう。

ちなみにJNIというのはJava Native Interfaceの略です。
C言語などで書かれたライブラリなどをJavaから呼べるようにしてくれたりするやつです。
AndroidでJNIを使う時は、上記の位置にjniLibsディレクトリを作ってその中にネイティブのライブラリを入れるお約束ですね。

Java Native Interface(JNI)とは、Javaの1レイヤーである。
JNIを用いると、Java Virtual Machine(JVM)上で動作しているJavaのコードから、CやC++、アセンブリのような他の言語で記述されたネイティブなアプリケーションやライブラリを呼び出すことが可能になる。

出典:ゼロから学ぶJNI:Java Native Interface - builder by ZDNet Japan

モジュールの依存関係の設定

import opencv for android

モジュールの依存性を解決します。

Android StudioのメニューからFile > Project Structureを開いて、"app"のDependenciesタブを開きます。
この画面で、左下にある「+」ボタンを押すと先ほど追加した「openCVLibrary320」というモジュールが追加できるので、追加します。
画像は既に追加した状態です。

openCVLibrary320が画面内に追加されたら、OKを押します。

次に、Android StudioのプロジェクトウィンドウからopenCVLibrary320ディレクトリを探し、その中にあるbuild.gradleを編集します。

先にアプリレベルのbuild.gradle(ビルド設定が書いてあるファイルです)を開いて、その中身を確認します。
プロジェクトの設定によって数字は変わってきますが、おおよそこんな感じの内容が書いてある箇所があると思います。

上記の箇所から、compileSdkVersionbuildToolsVersionminSdkVersiontargetSdkVersionの横にある数字を、それぞれopenCVLibrary320のbuild.gradleの対応する箇所に転記します。

ここまででビルドが通るようになったのではないかと思います。

OpenCV for Androidを実機/エミュレータで実行

以下の記事を見ると、「Android実機ではOpenCV Managerのインストールが自動的にGoogle Playを介して行われるので正常に動作するのですが、エミュレータで実行しようとするとエラーが発生しアプリが落ちます」と書いてあります。
自分の環境だと、良くわかりませんが特に問題なく実行できました。

OpenCV for AndroidをAndroid Studioに導入するメモ - Qiita

まだまだ書くことがありますが、長くなってきたので一旦ここまで。あとで続きを書きます(多分)

-Android

Copyright© モバイルアプリ開発@つくば , 2017 AllRights Reserved Powered by AFFINGER4.