読者です 読者をやめる 読者になる 読者になる

プログラミング好きな脳の引き出し

某高専ロボコニストの溢れた知識の掃き溜め。機械学習とか画像処理とか電子工作とか、技術的なことからちょっとしたことまで。プログラミングの関するものは大体好きです

AndroidStudio2.0でOpenCV3.1(sample編)

Android開発 メモ 画像処理

 ちょっとアイデアが浮かび、Androidで画像処理を利用したアプリを作りたいな~と思ったので古くなったAndroidStudio1.5+OpenCV3.0の環境を更新し、AndroidStudio2.0+OpenCV+3.1へ移行することに。AndroidStudio+OpenCVの環境構築というのはn番煎じでしょうが、自分用メモも兼ねて公開します。

 なお、ここでの説明ではOSはWindows8.1を使い、AndroidStudio2.0とNDKは既にインストールされているものとします。NDKはr12を使用します。

概要

まずこのページではOpenCV for Androidのダウンロードから簡単なサンプルの動作までを行います。NDKが必要なサンプルのビルドや自作ソフトにOpenCVを組み込む、というのは後日行います。

1.OpenCV for Androidのダウンロード

 OpenCVの公式ページからOpenCV for Androidをダウンロードします。公式ページ右側のLATESTDOWNLOADSからOpenCV for Androidをクリックすることで最新バージョンのダウンロードが出来ます。又、画面上の目次からDOWNLOADSをクリックすることで開くDownloadページでは最新バージョンを含めたこれまでのバージョン全てのダウンロードリンクが纏められているのでそちらでダウンロードすることもできます。ダウンロード完了後、適当なディレクトリに配置、解凍してください。ここではD:\OpenCV内で解凍したとして説明をします。

2.AndroidStudioにサンプルをインポート

 AndroidStudioを起動し、File→New→Import Projectをクリック、解凍したフォルダ内にあるsamples/15-puzzleを選択します。

f:id:ewvss:20160421004742j:plain

 

Nextをクリックします。

f:id:ewvss:20160421004835p:plain

Finishをクリックします。

これでサンプルのインポートが完了しました。

3.設定の変更

インポートは完了しましたが、この状態ではまだビルドを実行することが出来ません。build.gradleで設定されている、compileSdkVersionとminSdkVersionを適切な値に設定しなければなりません。変更しなければならないbuild.gradleは2つあります。まずはOpenCVLibraryのbuild.gradleです。

apply plugin: 'com.android.library'

android {
compileSdkVersion 14
buildToolsVersion "23.0.3"

defaultConfig {
minSdkVersion 8
targetSdkVersion 21
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}

 恐らくこのようになっていると思います。変更するべき場所はcompileSdkVersionとminSdkVersionです。以下のように変更してください。

    compileSdkVersion 14 → 21に
        minSdkVersion 8 → 21に

変更後はこのようになります。

apply plugin: 'com.android.library'

android {
compileSdkVersion 21
buildToolsVersion "23.0.3"

defaultConfig {
minSdkVersion 21
targetSdkVersion 21
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}

 次にOpenCVSample15Puzzleのbuild.gradleを変更します。

apply plugin: 'com.android.application'

android {
compileSdkVersion 14
buildToolsVersion "23.0.3"

defaultConfig {
applicationId "org.opencv.samples.puzzle15"
minSdkVersion 8
targetSdkVersion 21
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}

dependencies {
compile project(':openCVLibrary310')
}

多少構造は先程のものと違いますが、変更する箇所は同じです。変更後は以下のようになります。

apply plugin: 'com.android.application'

android {
compileSdkVersion 21
buildToolsVersion "23.0.3"

defaultConfig {
applicationId "org.opencv.samples.puzzle15"
minSdkVersion 21
targetSdkVersion 21
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}

dependencies {
compile project(':openCVLibrary310')
}

ここまで変更できたらGradleを同期してください。これでGradleの設定は完了です。

4.プログラムの修正

次にプログラムのエラー箇所を修正します。Puzzle15Activityを開いてください。恐らく下図のようにエラーが発生していると思います。

f:id:ewvss:20160420223213j:plain

このエラーはLog.iメソッドに渡すTAGが23文字を超えて長過ぎる為に発生しています。22行目で定義されているTAG変数を適当に23文字以内になるよう修正してください。これでビルドが出来るようになりました。

5.ビルド&実行

ビルドして実行をする前にまだしていない方はAndroidにOpenCVManagerをインストールしてください。

play.google.com

AndroidをPCとUSB接続し、実行してみてください。成功すればAndroid上でカメラの画像が15個に分割されバラバラに並べられたパズルアプリが起動します。カメラの画像が写っていない空欄の横にある欄をタッチすると空欄と場所が入れ替わる、15パズルのようです。

 

これでAndroidStudio2.0でOpenCV3.1のサンプルプログラムのビルドと実行は終了です。お疲れ様でした。次回はNDKを使ったサンプルプログラムのビルドと実行をします。

次回:

mlcppcnncpppp.hatenablog.com