2010/12/30

冬休みの工作@Android

今年も残すところあと1日。
私も短いですが冬休みに入っています。

冬休み中にAndroidでちょっとしたアプリを作ろうと画策しています。

作るのは、簡易追跡プログラムです。
どうしてこれを作るのかというと、1月にママリャリのレースがあって、レースのコースをチームで交代交代走るのですが、前のメンバーが拠点に戻ってくるまで自分のチームがコース上のどこにいるのかかがわからないという問題があります。


ここでAndroid端末の出番です。
GPSセンサー搭載、3G回線搭載、バッテリー搭載、かつプログラムも自由に作れるという利点を生かし、自転車の前カゴに発信器側を取り付け、拠点内のもう一台の端末に現在地点の情報を送信するというものです。

今のところ考えている機器構成は下記の通りです。
送信側:IS01+ポータブル充電器(IS03を買ったときにおまけでもらいました)
受信側:IS03+エネループのUSB給電機能付きのもの
備考:IS01とIS03は家族割りの契約にしているので、端末間のCメールは無料

ソフトの機能は下記の通りです。
送信側:
起動して、「送信開始」ボタンを押すとサービスモードに移行し、1分置きにGPSセンサーを起動して現在地点の座標を取得します。
座標を取得したら、座標の情報と精度の情報を通知先の携帯電話(IS03)にCメールで送信します。サービスモードで動作させるので、端末のフタを閉じても動作し続けることができます。受信側から即時更新メールを受信した場合は、即時GPS情報を取得して返信し、停止メールがきた場合は、1分置きにメールを送る機能を停止します。

受信側:
起動して「受信開始」ボタンを押すと、Cメールの着信を監視するようになり、送信側からきたCメールの内容を解析してデータベースに蓄積していきます。蓄積したデータは、KML方式などにして出力し、OruxMapsなどの地図アプリで読み込めるようにします。

GPSとCメールの実験は終わったので、あとはサービスモードの実験を行ってから
実際のアプリ作成に入りたいと思います。

うまくいってもいかなくても、何かしら結果は記録しておきたいと思います。

ではまた。

2010/12/18

OpenCV 2.2+Qt の環境構築

モンハンが一段落したのでこっちを更新。

OpenCV2.2からはQtがサポートされました。
今までちょっと品不足だったボタンなどのGUIコントロールが、これによって拡充されることでしょう。

というわけで、今回はOpenCV2.2とQtを使うための設定を行ってみました。


Qtのインストールの方法はここを参考にしました。
1.まずはQt 4.7 SDKをNokiaからダウンロードします。
2.展開して ./configure を実行します。
3.make と入力してEnterを押します。
4.2時間ぐらいかかるので、何か別の作業をして待ちます。
5. sudo make install を実行すると、インストールされます。
6./usr/local/Trolltech/Qt-4.7.1/bin/ にインストールされていたので、PATHに追加しておきます。

7.OpenCVを再度ビルド。CMakeでQtとQtOpenGLにチェックを入れて、Configureを押します。
8.Qt executableが無い!と怒られたら、/usr/loca/Trolltech/Qt-4.7.1/binを指定すると大人しくなりました。
9.Generateを押してEclipse用のプロジェクトを作ってもらいます。
10.Eclipseでビルド。30分ぐらいかかるのでお茶でも飲んで待ちます。


11.設定はここまで。前回の記事と同じように、OpenCV用プロジェクトの設定をします。
12.ビルドします。
13.ライブラリのフォルダと、ライブラリファイルをプロジェクトに登録しても、 error while loading shared libraries: libopencv_ml.so.2.2:  というメッセージが出ました。
14. LD_LIBRARY_PATHにライブラリのパスを追加すればよいらしいので、プロジェクトを右クリックしてRun As->Run Configurations -> Environmentに
LD_LIBRARY_PATH=/home/kouji/opencv/lib
と追加するとエラーが出なくなりました。

サンプルをビルドしたものを実行すると、以下のようなウィンドウが出てきました。










おお!
ボタンとかが出てきてる!

チェックボックスを作れたり、文字をオーバレイでかけるらしいです。
詳しくはリファレンスの方を参照ください。

これでOpenCVを使ったアプリケーションも見栄えがよくなるはず!

ではまた。



------------OpenCV 2.2 + Qt Setup--------------------------
1. Download Qt4.7 SDK from nokia.
2. Extract SDK
3. Run ./configure
4. Run make ( it takes about 2 hour)
5. Run sudo make install    to install Qt.
6. Add /usr/local/Trolltech/Qt-4.7.1/bin/  to $PATH.
7. Build OpenCV2.2 with Qt and QtOpenGL option.
8. If "Qt executable not found" message shown, set
/usr/loca/Trolltech/Qt-4.7.1/bin to executable path.
9. Click "Generate" to create project.
10. Build OpenCV with Eclipse.
11. Create OpenCV project and write your code.

2010/12/07

OpenCV 2.2 + Ubuntu10.4 + eclipseの環境構築方法

2日前にOpenCV2.2がリリースされました。
ソースにAndroidというフォルダがあり、ワクワクしながら資料を読むと、
「Ubuntuでやってね」
的な文言がありました。Windowsじゃだめか。。。

というわけでUbuntu10.4をインストールしてからの格闘ログです。
(一応動いたけど、正しい方法かは分かりません。。。)
Ubuntu10.4を最新の状態に更新。

OpenCV2.2.0.tar.bz2をダウンロードして~/opencv2.2 に解凍。
システム->システム管理->SynapticパッケージマネージャでCMakeおよび依存するパッケージを取得。
cmake-qt-guiも取得。

GCC4.3以降も必要なので取得しようと思ったら、最初から入っていたようなのでそのまま続行。

libgtk2.0-devおよび依存するパッケージを取得。


アプリケーション->プログラミング->CMAKE を起動。

ソースとビルド先に/home/ユーザ名/opencv2.2と指定。
左下のConfigureをクリック。

Eclipseで開発するので、「Eclipse CDT4」を選択。コンパイラはデフォルトのまま。
2回ぐらいConfigureをクリックして、Generateを押す。

なんかファイルがいろいろとできているので、Eclipseを開いてフォルダからプロジェクトをインポートし、ビルド。
20分ぐらい放置。

を参考に、

EclipseのProject ->properties ->C/C++ General->Paths and Symbolsの
IncludesにあるGNU C(C言語で開発するので)のInclude directoriesに、
/home/ユーザ名/opencv2.2/include
を追加。

Librariesタブに
opencv_core
opencv_imgproc
opencv_highgui
opencv_ml
opencv_video
opencv_features2d
opencv_calib3d
opencv_objdetect
opencv_contrib
opencv_legacy
を1個ずつ追加。

Library Pathsに
/home/ユーザ名/opencv2.2/lib
を追加。

プロジェクトをビルド。
"opencv2/video/***.hpp"がありません とエラーが出た。。
/home/ユーザ名/opencv2.2/include/opencv2 を確認。
確かに何もない。。。。

/home/ユーザ名/opencv2.2/modulesのフォルダに、それっぽいものを発見。
/home/ユーザ名/opencv2.2/modules/core のincludeフォルダのを、
/home/ユーザ名/opencv2.2/にコピー。 マージしますか?と聞かれるのでマージする。
/home/ユーザ名/opencv2.2/include/opencv2/core フォルダができる。
modulesフォルダの中にあるその他のフォルダも同じようにコピーする。


再度ビルド。












表示できた!

ライブラリとインクルードパスはプロジェクトごとに指定しないとダメみたいです。
いい方法はないかなぁ。。。

ではまた。


----------------------------------------------------------------------------
How to install OpenCV2.2 on Unbuntu10.4+Eclipse

Download OpenCV2.2.0.tar.bz2 
Extract to ~/opencv2.2

install cmake(and other packages)
install cmake-qt-gui
install gcc4.3 (or higher version)
install libgtk2.0-dev and others.

Run application->programing->cmake

source :  /home/your user name/opencv2.2
build to: /home/your user name/opencv2.2

Click "Configure" button.
Select "Eclipse CDT4" .
Click "Configure" button.

Click "Generate" button.

Close cmake.

Run Eclipse and import & build project.

For Next, please see below page.




2010/12/05

OpenCV 2.2がリリースされました

本日、OpenCV2.2がリリースされた模様です。

OpenCV Wiki

新機能のところで気になったのが下記の点です。
・highguiのバックエンドとしてQtが試験的に採用されたようです。
   これでもっとGUIが高機能になるのかな?

・GPUサポート  NVidiaのCUDAをサポートしたようです。

・Androidでも使えるようになったそうです。ただし、手順が複雑そうなので私が手をつけるのは結構先になりそうな気がします。



AndroidでOpenCVを使うためには、開発環境にUbuntuが必要とのことなので、
Ubuntu10.4 TLSをインストールしてみました。
昔よりも使いやすくなっています。SSDにインストールすると10秒ぐらいで起動するとの噂も。

無線LANのドライバインストールで時間がかかりましたが、なんとか稼働するようになっています。やっぱりLinux系はドライバで苦労するみたいですね。。。


EclipseとADTもインストール済み。
あとはOpenCV2.2を入れるぐらいです。

明日か明後日に公式Wikiを見ながらインストールしてみたいと思います。
インストールがうまくいったら、手順をまとめて記事にしようかな。

ではまた。

2010/12/04

Android端末を入手

先日、IS01を入手しました。
目的はAndroid端末に搭載されている各種センサー(GPS、加速度、磁気、もちろんカメラも)で遊ぶためです。

まずは書籍やWebサイトを参考にしてAndroidの開発環境を整えました。
Windows7にEclipse IDE for Java Developersという組み合わせです。


まずは買った書籍の紹介でも。

初めてのAndroid(オライリー)
Androidアプリの開発の基本が順序だてて書かれているのでわかりやすいです。
現在はこれを読みながら練習作品を作成中。この書籍は絶版となっているみたいですが、
そのうちAndroid2.1か2.2に対応したものがまた新しく出版されるのではないでしょうか。

ANDROID HACKS(オライリー)
GPSの使い方や、サービスの登録方法など、初めてのAndroidの後に読むとよさそうなTIPS集です。
最後のほうにデバッグについて書かれているので、今のところこの部分を重宝してます。


Android Developer's Cookbook
Kindleで初めて買った書籍。2000円ぐらいだったので買いました。
全部英語なのでちょっと抵抗はありましたが、結構サクサク読めました。
端末の比較も載っていて面白かったです。値段も電子版は安いので結構オススメです。
初めてのAndroidよりも内容が濃い感じがしました。  日本語版があればなぁ。。。。。


まずはセンサを使ったアプリを作ってみようと思います。


ではまた。

2010/12/01

ジオラマ風加工プログラム 遅いことが判明

一週間ぶりの更新。


前回作ったジオラマ風加工プログラムですが、実は1回の処理に80msぐらいかかっていることが
わかりました。

実行時間の計測は、以下のようなコードで行っているのですが、

double t = (double)cvGetTickCount();
//ここで何らかの処理をする
t= (double)cvGetTickCount() - t;
double freq=cvGetTickFrequency();
printf( "処理時間: %gms\n", t/(freq*1000.) );

測定する範囲を間違えており、10msと間違った結果になっていた模様です。


実際の実行時間は下記の通りでした。
・画像のサイズ:800x600ピクセルのカラー画像

ぼかし処理:15msから20ms
RGB空間からHSV空間への変換&H,S,Vへの分離 10ms~15ms
彩度(Saltation)の調整 1ms以下
HSV空間からRGB空間への変換  25ms~30ms

ぼかし処理はいいとして、色空間の変換に時間がかかっているようです。


ん~、 変換のアルゴリズムを調べて自分で書いたほうがいいのかなぁ。。


ではまた。