fc2ブログ
Entry Navigation

OpenCVのビルド

こんにちは。貴之です。
OpenCV(特に顔検出)+Androidを自分の課題としています。
特に個人の検出はPicasaをはじめ、世の中にいろいろあるようです。
面白いのがこちら

驚いたのがイギリスのサリー大学のZdenek Kalalさんのこれには、驚愕しました。

私の方はなんとかOpenCVのCVCameraを起動できたところです。
四苦八苦しましたが、以下やった手順です。

①K3の手順通りCygwinを入れておきます

②NDKとOpenCV2.2をインストールします
OpenCV2.2同梱のREADME.android.txtに
以下のように書いてある通り、C++が拡張されたNDKr4しかコンパイルできないようです。
--------------------------------------------------------------------
Make sure to set the path in the cache for the crystax ndk available
here:
http://www.crystax.net/android/ndk-r4.php
--------------------------------------------------------------------
上記URLからNDKr4を落とします。

OpenCV2.2についてですが、SVNから最新を落とすと、一部記述をコメントアウトしないとビルドエラーを起こしてしまうため、今回はこちらの版を使用しました。

それから
bzip2 -dc OpenCV-2.2.0.tar.bz2 | tar xvf -
と解凍しました。

それをCygwinのユーザーのルートにNDKとOpenCV2.2のディレクトリを
cygwin─home─┬android-ndk-r4-crystax
            └OpenCV-2.2.0
のようにおきます。
このようにしなくてもよいですが、面倒なパスの記述の書き換えが不要なので、このようにデフォルトの配置にしました。

③NDKのパスを環境変数で設定しておく
ex)C:\cygwin\home\<ユーザー>\android-ndk-r4-crystax
を環境変数のPathに設定しておきます。

試しに
android-ndk-r4-crystax\samples\hello-jni\jni
配下で
ndk-build
としてみて、正常にコンパイルできればOKです。できないと以下の作業に失敗します。

④OpenCVライブラリのコンパイル
OpenCV-2.2.0\androidのディレクトリ配下で、README.android.txtに書いてある通り
--------------------------------------------------------------------
mkdir build
cd build
cmake ..
make
--------------------------------------------------------------------

とするとandroid-jni\libs\armeabiとarmeabi-v7aの下にそれぞれ
libandroid-opencv.so
が生成されました。

こちら本当に参考になりました。有難うございます。


⑤サンプルCVCameraのコンパイル
OpenCV-2.2.0\android\apps\CVCamera
配下で
make
とやるとコンパイルが走ります。
libs配下に
libcvcamera.so
が生成されていればOKです。

⑥OpenCVをeclipseのプロジェクトに参加させる
eclipseを開いて先ほど④でコンパイルしたプロジェクト(android-jni)を
File->New->Android Project->Create project from existing source
で指定してプロジェクトに参加させます。

プロジェクトのプロパティを開いて
Androidをクリックし、下の方にあるIs Libraryにチェックを入れます。

⑦サンプルCVCameraをプロジェクトに参加させる
手順⑤で生成したプロジェクト(CVCamera)を手順⑥と同じようにひとまずプロジェクトに参加させます。

同じようにプロジェクトのプロパティを開いて
Androidをクリックし、今度は下の方にあるAddボタンをクリックします。
手順⑥でプロジェクトに参加させたandroid-jniがダイアログに表示されていると思いますので、クリックしてライブラリの追加を行います。

#Is Libraryはここではチェックしません。
Java Build Pathでlibandroid-opencv.soを指定すると起動時に落ちてしまいます。私はここではまってしまいました。

#こちらを読まれることをお勧めします。


⑧いよいよサンプル起動
実機を接続しつつCVCameraのプロジェクトを右クリックして
Run As->AndroidApplicationで起動します。

やっと入り口といったところでしょうか。
スポンサーサイト



15
2011
comment
6

Androidを触り始めた1年を振り返ってみた。

tanakaです。
すいません、仕事の関係でテンパって更新できませんでした。

そうこうしているうちにいつの間にかもう4月、
Android開発チームにも新入社員が増えてだんだん賑やかになってきました。

4月といえば、自分が初めてAndroidに触ったのも4月で、ほぼ1年前の話になります。
当時はまだ、「Androidって何?」くらいの勢いで何も知らないながらも開発言語がJavaであること、それから個人的に好きなSonyEricsson発のスマートフォン「Xperia X10」の発売もあり、ここはいっちょ触ってみようなどと初めてのAndroid端末を手に入れました。

そして、手に入れただけでは飽き足らず、とりあえず自分の使いたいと思ったアプリを作成して実際にAndroidマーケットに公開したりもしました。
最近ではあまり更新できてないんだけれど、更新した後にユーザから「使いやすくなった」とか「不具合出てます」とかって意見をもらった時には正直うれしかった。
実際に自分が作ったものに対する意見をもらえる機会って、下のほうの開発ばかりやってる仕事のほうではあまりななかったので。
「自分が作ったものが誰かの役に立ってる」って思うと、気持ちになります。

それから早いもので1年が過ぎて、Android端末も各キャリアから大量に発表されるようになり携帯業界的にも結構激動の1年だったの出はないかと思います。
個人的にも転職してAndroidの開発を行うようになったりと激動の1年だったわけですが、それはまた別の話かな。。。

それはさておき、上述した通り1年でかなりの数のAndroid端末がリリースされ、さらにそれに追い打ちをかけるようにAndroid OSのバージョンアップが行われたりと開発したアプリが動作する環境も増えてそれこそゾッとするほどの機種依存とか出てくるようになるんでしょうかね?
アプリとか開発する側からすると、あまりメーカーごとの作りこみとかして欲しくないですが、そうもいかないんでしょうね。

でもまぁ、それが出来るところがAndroidの良さであるわけだし、実際ユーザーとして使う自分の「Xperia X10」にしてもOSのアップデートが行われて出来ることが増えるのはうれしいことなので仕方がないのかな?

とりあえず、Androidの素敵な未来を想像しながら今回はこの辺で失礼します。

04
2011
comment
0

Android NDK実際に作ってみます??

どうも、K3です。

年度末特有の忙しさを理由に、あやうくブログ更新をサボってしまうところでした。

第2回ということで、今回もNDKネタで行きたいと思います。

前回、ざっくりとですがAndroid NDK環境の導入をする話をしてますが、
おさらい的な話も含め、改めてNDKの概要についてお話します。

NDKとはnative development kitの略でAndroidのnative環境、すなわちLinux-OS環境で
ソフトウェアを作成するためのものです。
現在NDKはVersion5まで進化しており、Activityや画面制御・サウンド等、これまでJava側でしか
作成できなかった領域までも作成できるまでになってきています。

とはいえ、(個人的な見解では)NDKの主な使い方(使い道)は、
・Javaでは速度的に不利な部分
・既にC/C++言語ベースで流通している各種ライブラリの利用
・iPhoneと共通化(iPhoneでもC/C++ソースコードが普通にビルド出来ます)
が主な目的と思います。

また、Nativeライブラリを使うデメリットとして
・アプリサイズが肥大化する
・eclipseとcygwinの開発環境の2重化(面倒)
等があります。

ということで、小規模な機能をNDKでやろうとしてもデメリットが相対的に大きい状態であればあまりやる意味ありません。

さて、小話はこれくらいにしておいてNDKでのプログラミング練習と行きましょう。

1.NDKを利用するプロジェクトの作成
通常のAndroidプロジェクトを作成します。
ちなみにNDKでビルドするとき、Androidプロジェクト生成時に作られる"default.properties"内の
の"Project target"が参照されます。

OpenGL等のバージョン依存があるライブラリ使用時は注意が必要です。
→ターゲットのバージョン番号が合わないとビルド出来ません

また、今回はNDK5環境化でのビルドを行うため、NDK5/samples/ 配下に作成して下さい。
NDK5ディレクトリはNDK version5環境のトップディレクトリとなります。

2. 1.で作成したプロジェクトTOPで、ディレクトリに"jni"ディレクトリを作成

さらに以下のソースを jni/ 配下に作成して下さい!
Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := filetest
LOCAL_SRC_FILES := filetest.cpp

include $(BUILD_SHARED_LIBRARY)


filetest.cpp

#include
#include

#ifdef __cplusplus
extern "C" {
#endif

jstring
Java_com_nextsystem_android_filetest_loadfile( JNIEnv* env,
jobject caller, jstring jFileName )
{
const char *FileName = env->GetStringUTFChars(jFileName, NULL);
jstring retstr;

retstr = env->NewStringUTF(FileName);

// ファイル読込み処理
// ・・・

// native文字列開放をVMに通知
env->ReleaseStringUTFChars(jFileName, FileName);

return retstr;
}

#ifdef __cplusplus
}
#endif


全てのファイルを作成後、プロジェクトディレクトリ内で ndk-build シェルコマンドを実行することで、ライブラリファイル(*.so、shared object形式)が作成されます。


$ ndk-build
Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
Compile++ thumb : filetest <= filetest.cpp
StaticLibrary : libstdc++.a
SharedLibrary : libfiletest.so
Install : libfiletest.so => libs/armeabi/libfiletest.so


どうでしょう?出来ましたか?
次回はファイルの読込みとかやって行く予定です。
NDKv5では、STL(Standard Template Library)が使用できますので、コレも使ってみたいと思います。


04
2011
comment
0

ごあいさつ

こんにちは。みなさん初めまして。貴之といいます。
このたびネクストシステムに入社し、K3とtanakaさんと一緒に運よくAndroid開発を推進しております。

私がAndroidに出会ったのは、昨年の夏のことでした。自分で実際に開発してみて、その魅力や未完成であることの将来への期待なども含めて、一言でいえば「楽しい」につきると思います。

プログラミングに携わること全般に言えることかもしれませんが、特にAndroidでは自分で思い通りに物を作る楽しさ、しかも簡単に、思いもよらず美しく出来たりするとすごく楽しいと感じます。

携帯電話が世に出て今に至るまで本当にたくさんの諸先輩方が何日も徹夜でデバッグし、試験し、納期を守るために死ぬ思いでコードと格闘してきました。今でもその現状はそんなに変わらないかもしれません。しかし今iPhoneやAndroidなどのスマートフォンはそれ以上に開発者にとっての「楽しさ」や「作る喜び>」を再発見させてくれる分野だと思っております。

昨年縁あってAndroidのセキュリティー研究会に参加させて頂いたのですが、その時にコメンテーターの方がおっしゃっていたことは、「AndroidはWindows95の時以来のブームになりつつある」とのことでした。
どのくらいの規模のブームが今後続くかわかりませんが、スマートフォンは世界中の人間の頭脳をさまざまな形で刺激し、豊かな未来を創っていく一因になることは間違いないと思っています。そんな世界にだれもが一石を投じることができるチャンスをさらに大きく開いてくれたのがAndroidではないでしょうか。

楽しく、みんなの役に立ち、さらに多くの人の夢を膨らませるアプリケーションをたくさん世に出せればいいなと思っております。

今年の年頭の挨拶で弊社の社長が「新しいことに積極的に挑戦してほしい」ということを強調していたのですが、私もこの場をお借りしてやったことのないことに挑戦してみようかと思っております。
それは顔認識です。顔認識はAndroidのライブラリに既にあるようですが、私が目指すのは個人の認識です(マジかよ)。
世界中にある集合知とK3とtanakaさんの力をお借りして、楽しくて役に立つアプリケーションを目指して、まずはOpenCVの海にダイブしてみるか・・。

ラッキーにもAndroid用のものが・・・ありがとうございます!

今度お目にかかることには環境が出来上がっていることを目標に頑張ります。
25
2011
comment
0

はじめましてのご挨拶。

はじめまして。
ネクストシステムMobile.Lab Android開発チームのtanakaといいます。
K3の下で開発をやったり、何か良いものは作れないかと試行錯誤する仕事を主にやっています。
自分の記事では、技術的な解説とかは当ブログ・他のページを含めた先輩諸氏にお任せして、自分が開発や試行錯誤時に思った事とかハマった事、気づいた事とかを書いていこうかと思います。


という訳ではじめましての今回は「Android開発チーム」について。


・「Androidってそもそも何?」
Googleが発表したプラットフォームで、決して人造人間ではないです。
最近はスマートフォンが有名ですが、Android電子レンジとかAndroid洗濯機なども開発できるくらい汎用的なものらしいです(見たわけではないので)。
詳しいことはGoogleのページとか見てもらうのが一番なので省略します。


・「Androidの何が素敵」
イロイロあるんだろうけど、とりあえず一番は「オープンソース」であること。
簡単に言うと、「だれでも使える」それから「ソースが公開されている」ってことです。
もちろん権利関係はなんかいろいろあるんですけどその辺は自分にはよくわかりません。
最近流行ってる「Androidケータイ」が、同じ「Android」なのに微妙に違うな、っていうのは各メーカーが頑張ってそれをカスタマイズしてるからだったりします。


・「Androidアプリについて」
いきなり絞り込みますが「スマートフォン」といえば「コレ」的な部分であるところの「アプリ」についてです。
「Android」を使った「スマートフォン」は「AndroidSDK」という開発キットを使うことで「Android」の仕組みを使った「アプリ」開発ができ、コレについても無償で提供されています。
で、「AndroidSDK」を使った「Androidアプリ」についてはこれまた無償で使えるものから様々なものがある「Androidマーケット」に公開したり、公開されている「アプリ」を利用したりできます。


・「で、結局Android開発チームで何をやっているのかというと」
イロイロな「Androidアプリ」の開発とか企画とかをやっていければ良いなと思いつつ、イロイロ試行錯誤しています。
「どんなものを作れば便利だろう」とか「どんなものを作れば楽しいだろう」から始まり「どう作ったら楽にできるだろう」までイロイロ考えてます。
「Android」に限らず「アプリ」って「企画が命!」「インパクト命!」みたいなところがある気がするので難しいです。
もちろんそれだけでは食べていけないので実際に「作る」仕事もしています。


・「そんな中での自分の目標」
「出来る」を増やすことだと思ってます。
「企画」ができても「実現」出来なければ「絵に描いた餅」なので、そんなのは勿体ないことできないし。
あとは、何かしらの「面白いモノ」を作ること。
いつもいつも何かしら考えてます。
考えてたってそうそう思い浮かばないですが。。。。



っていうところで、今回はココまで。
今後ともよろしくお願いします。

17
2011
comment
0