今度はandroidに手を出してみてます。かたりぃなです。
ずいぶんと前にいじってみたときはeclipseでコード書いて色々遊んでた気がします。
今どうなってるのかと調べてみると、eclipse用のandroid開発アドオンのサポート終わったらしく、
今後はAndroidStudioでよろしくとのこと。
http://developer.android.com/intl/ja/tools/help/adt.html
私は言われたとおりにやるのが嫌いな天邪鬼な性格なので、なんか他の方法でanroidで遊べないかなぁと調べてみました。
できればマルチプラットフォームでAndroidとWindows両方一度に開発みたいにできたらかっこいい。
候補
- C#でゴリゴリ書く for VS2015
- JavaScriptで書く for VS2015
- SilverLight+C# for VS2015
なんかVisualStudioに偏ってるけど、どんなものか大雑把に整理
VisualStudio2015を使って、C#でゴリゴリ書く
C#で記述したコードを走らせるためには.Netフレームワークが必要。
windows以外の環境ではxamalin上で走らせる(昔はmonoとか呼ばれてたアレですね)
VisualStudio2015を使って、JavaScriptで書く
JavaScriptとHTML5使ってブラウザ上で動作するものを書く。
ブラウザを内包するアプリという形。下回りはCordova。
上記2つはこのページで軽く説明がありました。
特集:次期Visual Studioの全貌を探る:Visual Studio 2015におけるクロスプラットフォーム開発の選択肢 (2/3) - @IT
MSDNのページのほうが情報量は多いけど、偏ってる。当然といえば当然ですが。
SilverLight + C#
そろそろ終わるんじゃないかな。
Flashの対抗馬として頑張ろうとしてたけど、イマイチ感が拭えない。
時代はJavaScriptとHTML5な感はあるけど、そこまで魅力を感じない。
やっぱり自分はネイティブな言語のほうが好きなんだなぁと。
というわけでAndroidStudio試してみることにしました。
Androidでhelloworldやっててもつまらないので、opencv走らせてみた。
AndroidStudioのインストール
そのままインストール。
JavaSDK, NDKなど関連するものまとめて入れる。
OpenCV3.0のインストール
OpenCV4Androidがあるのでそれを使いましょう。
このあたりの情報を参考にすればいけるはず。
Android StudioでOpenCV for Androidを使用する | Smartphone-Zine
OpenCV3.0.0 for AndroidStudio - Qiita
opencv.orgではeclipseを使った設定方法しか記述されていないのが辛い。
ANDROID | OpenCV
GradleでNDK-Buildできるよう設定する
C/C++でコード書きたい病を患っているので、設定する。
せっかくopencv放り込むんだから、C/C++から叩きたいですよね。
こういうビルドツールの情報調べるたびに思うのだけど、統一できないものなのかな。
C/C++出身としてはmakeでいいやんとか思ってしまう。
NDK-Buildの設定の前に、Gradleを2.5にアップグレードしないとAndroidStudioに怒られるのでやっておく。
表記法が大幅に変わっている様子。
このあたりのサイトを参考にしました
AndroidStudioでNDK(JNI)を活用する 準備編 - Qiita
Experimental Plugin User Guide - Android Tools Project Site
OpenCVのサンプルコードを動かしてみる
OpenCV-android-sdkのsamplesにあるコード動かすだけ。
OpenCVがあればカメラなんかの入出力回りも面倒見てくれるのでラクですね。
ちょっと気になったのでAndroidのAPIを直接叩いてカメラ動かす方法を調べてみた。
AndroidのカメラAPI
Androidとしてはカメラ周りのAPI(android.hardware.camera)が非推奨になってた。
特定のAPIバージョン以上では、cameraの代わりcamera2を使いなさいとのこと。
android.hardware.camera2 | Android Developers
仕様が随分と変わってイベントハンドラを登録して、それに対応する処理を書いていくことになりそう。
カメラプレビューに対する加工も楽にできるかもしれません。
(OpenCVのJava-IFにあるカメラAPI叩けば、Mat形式でフレームデータもらえるのでこれが一番ラクだと思います。)
WindowsのカメラAPI
ついでに調べてみました。
こちらは撮影・記録時はイベントハンドラによる処理を行えますが、プレビューの各フレームに対する処理はできなさそうです。
(たとえば色調補正をしたいとか。)
MediaCapture Class (Windows)
Windowsのカメラを使って、プレビューの各フレームに対する処理をしたい時は、Microsoft Media Foundationに従ってプログラミングする必要がありそうです。
たとえば、mediacapture-API一覧にあるStartPreviewToCustomSinkAsync と AddEffectAsync を使うために、引数IMediaExtensionを自作するなど。
Overview of the Media Foundation Architecture (Windows)
メディアストリームに対する変換の例はmediacaptureのサンプルでグレースケール化するというものがあります。
またカスタムメディアシンクを使ったサンプルはカスタムメディアシンクから得た映像をDirect3Dでレンダリングするというものがあります。
どちらもMediaFoundationを使ったサンプルプログラムに含まれているので、Windowsでも何かやりたい時はこのあたりを参考にすればよさそうです。
軽く流し読みしたところ、ただのCOMっぽい。