2014年4月24日木曜日

TechCrunchHackathon Osakaに参加してきました。画像センシングコンポ(HVC)について

4月12-13日にかけて開催されたTechCrunchHackathon Osakaに参加してきました。
その時に作成したプロダクトに使ったオムロン製 画像センシングコンポ(HVC)について使用した感想を述べたいと思います。

まず、ボードについてはここを参照してください。
オムロンの組み込み向けライブラリOKAO Visionをプロセッサに組み込んでカメラモジュールと合わせて搭載したボード(以下HVC)です。
カメラで取り込んだ映像を解析し、結果を出力します。このボードひとつで顔検出、人体検出、性別推定、年齢推定、視線推定、、目つむり推定、顔向き推定、表情推定、手(のひら)検出、顔認証の各データが取得できます。

ボードとの入出力はUART3.3Vのシリアル通信になります。
評価ボードにはUSB変換基板も付属しているのでPCとの接続は簡単にできます。(変換基板からUSB経由で5V電源を供給しています。)
別で5V電源を供給できればマイコンボードとの接続も簡単かと思います。

今回はチームメイトがMicroUSB変換ケーブルを持っていたので、Nexus7と接続を試してみましたが問題なく接続できました。USBHost機能を持ったAndroid端末も接続できるようです。

さて、実際に使用するときにはプログラムからシリアル通信でコマンドコードを送ることになります。
コマンドコードと受信データはバイトデータなので、それらに対応した開発言語ならどれを使っても開発できます。
サンプルはWindowsデスクトップアプリでした。ハッカソン参加者で使っていた言語はC#、python、JAVA(Android)といったところでしょうか。

センシングの性能としてはボードから1.5~2mくらいまでが解析できる距離(顔認識系)のようです。これはカメラモジュールの性能にもよる可能性があるので、モジュールを交換できるならもう少し距離が延びるかもしれません。

一人分の顔認識にかかる時間は約1秒未満くらいでしょうか、瞬時とはいかないようです。
ボードからは認識時に使った画像データも取得できます。サンプルプログラムではリアルタイムで画像表示して解析データを出力できていたので、もう少し時間があれば色々試せたのかもしれません。

今回使う機会がなかったのは顔認証機能でしたが、マニュアルをちらっと読んでみただけなのですが、認証用の画像データ(もしかすると特徴点データ?)はボード上のフラッシュメモリーに登録するようになっているようです。

センシング機能をボード上ですべて行っているので非力な端末と接続しても、十分な処理速度を保てるのではないでしょうか。

いくつか希望を述べるとすると

1.10種類のアルゴリズムすべてではなくて、機能別バージョンがあってもいいかなと思います。
人体検出+顔検出、顔検出+顔認識(推定系)、全部ありバージョンなどなど・・・顔認証ありバージョンとなしバージョンでもいいかも。 用途として顔認証はなくてもいい場合も十分あると思います。

2.ぜひ企業向けだけではなく個人向けにも販売してほしいです。今回は幸運にも評価ボードを貸していただけたのでよかったのですが、結構興味を持っている個人もいると思います。開発キット7万円はちょっと高いかな・・・・少しでも安くなればいいのですが。

以上簡単ですが、HVCを使ってみた感想でした。






2014年4月16日水曜日

TechCrunchHackathon Osakaに参加してきました。

先週末の土曜日から日曜日にかけて大阪のグランフロントにある大阪イノベーションハブで行われたTechCrunch Hackathon Osakaに参加してきました。

ハードウェア系のハッカソンということで2日間で提供されるハードウェアやWebAPIを利用して、IoTになるプロダクトを作っていきます。

今回結成したチーム(当初6人でしたが、1人途中で用事のため抜けたので最終的に5人)ではセンサーカメラ(オムロン HVC)と音楽API(Gracenote)で何かできないかなということで色々アイデアを考えていました。

最終的には「独居老人を見守ることができるミュージックプレイヤー」を作るということになりました。

全体の構成イメージは下図のようになります。


動作内容としては

1.HVCカメラで対象者を認識し、顔の表情や年齢のパラメーターをサーバーに送信。
2.サーバーで受信したパラメーターを元に年代、ムードなどのクエリを生成してGracenote APIからプレイリスト、ジャケット画像、音源URL等のデータを取得。
3.サーバー上でGracenoteAPIから取得したデータを基にプレイヤー用HTMLを生成して、プレイヤーへ送信。
4.プレイヤーは受信したHTMLを表示。
5.動作中は特定のトリガー(今回はあらかじめ決めていたモーション)で緊急事態を認識してモバイルサービスにアラートを送信。
6.モバイルサービスから緊急受信用のアプリへアラートを送信。

このような構成になりました。

HVCとAndroidタブレットの接続(UART)は当初PocketDuinoを使う必要があるかなと思っていたのですが、HVCに付属の変換基板でそのまま接続することができました。USBホスト機能のある機種はコネクターを合わせるとそのまま接続できます。
ただし、Androidの場合はそのままではシリアル通信ができないのでライブラリとしてPocketDuinoと一緒に公開されているPhysicaloid Libraryを使っています。
HVCを使ったチームのうちAndroidと接続していたのは我々のチームだけのようでした。

次にセンサーから得られた情報を如何にしてGracenoteAPIのクエリにするのかを検討しました。最終的には15種類(年代3種類、感情5種類)のパターンで検索しています。

APIから得られたプレイリストを基にジャケット画像と音源URL(今回はyoutube)を検索してからプレイヤー向けのHTMLを生成してプレイヤーに返すようにしています。

緊急時のアラートについてはプレイヤーが特定の条件を検知した場合にAzureモバイルサービスにアラートを送信してiPhoneアプリで通知を受け取り表示およびアラート音がなるようにしました。

デモのときにアラートがならなかったのが残念です。(多分ネットワークが重く通知が届かなかったのが原因だと思います。)

今回なんとか2日間で動作するプロダクトを作れたのもチームが偶然にも、それぞれ得意分野が違っていて上手くできたのだと思います。一部Android担当された方にタスクが集まってしまった感じではありましけれども。

今回作ったプロダクトをこのままで終わるのはもったいないと思うので何らかの形で続けられたらと、チームメンバーとも話をしています。

後ほど他のチームのプロダクトについても感想を書いてみたいと思います。