Androidアプリ上でOpenCVを使えるようにする
下の記事に書きましたが、ネコが自動的に撮影できるアプリを作ろうと思い立ちまして、そのためにはスマートフォンがネコがカメラに写っていることを認識してくれるようにしないといけません。

ネコが撮影できるスマホアプリを作ろうと思う その1
ネコを撮る、それは全人類の夢 ネコって撮影するのが難しいじゃないですか。スマホやカメラ持って追いかけまわしても全然良いカットで撮れない。ぶれぶれのボケボケ、自由気ままなので目線はこっちにくれ...
まぁ、画像の中から認識すると言えば、OpenCVだよねーとここは特にひねりも持たせず即決。
ただ、仕事ではWindows PCアプリ上で、そして前の記事でサーバー上ではOpenCVを動かす事は経験があるけど、アンドロイドのスマホ上で動かしたことなんてないのでまずそれをやってみることにしました。
404 NOT FOUND | Findelight
find delight!
スマホで顔認識アプリを作るまで
AndroidStudioでOpenCVのサンプルを動かすを参考にさせてもらいました。ただ、僕はVer3.0.0を使っているからなのか、このままでは動かないのでちょっと手直ししています。
local.propertiesファイルはこんな感じ。
sdk.dir=*******\\Android\\sdk ndk.dir=*******\\android-ndk-r10e //それぞれのフォルダへのルートを絶対パスで
build.gradleファイルは以下のように記載。
apply plugin: 'com.android.application' android { compileSdkVersion 14 buildToolsVersion "21.1.2" defaultConfig { applicationId "org.opencv.samples.facedetect" minSdkVersion 8 targetSdkVersion 8 ndk { moduleName "detection_based_tracker" } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } sourceSets.main { jni.srcDirs = [] //jniLibs.srcDir 'src/main/libs' } task buildNative(type: Exec, description: 'Compile JNI source via NDK') { def ndkDir = "*****/android-ndk-r10e" //android-ndk-r10eフォルダまでの絶対パス commandLine "$ndkDir/ndk-build.cmd", //.cmdを忘れずに! '-C', file('src/main/jni').absolutePath, '-j', Runtime.runtime.availableProcessors(), 'all', 'NDK_DEBUG=1' } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn buildNative } } dependencies { compile project(':openCVLibrary300') }
とこんな感じで、バッチリ動きます。
モデルが上戸彩さんになっているのは部屋に人間が写っている物がそれしかなかったからです。広告だからいいよね・・・?ちなみに、その場にある画像でテストするっていうのは、コンピュータビジョン界の伝統ですからね。いまだに画像処理界で一番よく使われる女性の顔のサンプル画像はプレイボーイ誌に載っていたグラビアの切り抜きですから。
さて、次はネコを認識するにはどうしたらいいかについて考えたいと思います。
このアプリに関する記事一覧はこちらから。

ネコが撮影できるスマホアプリを作ろうと思う 記事一覧
猫を自動で認識して撮影するアプリ 完成したアプリはこちらです、アンドロイドのみの対応となりますが、カメラをネコに向けると自動でネコの顔を認識して画像を保存していきます。 SnapMeow ...
コメント