Kinectで店員を呼ぶ装置:openFrameworksのaddonをいくつか紹介
テライ
客員研究員のテライです。
2014年3月27日に開催される技術体験イベントに向けて私が作る「kinectで店員さんを呼ぶ装置」は、
- お客さんが手を上げたらkinectで検知する
- 店員呼び出しモードに切り替わる
- 離れた場所にいる店員さんが応答キーを押す
- お客さんと店員さんが会話できて注文できる。店員の映像が客側に投影される
- 注文が終わったら、店員さんが終了キーを押す
- 最初の状態に戻る
という仕組みを予定しており、現状は以下の動画の通りになっています。
ここで使っている機能(アドオン)は、openFrameworksでのインスタレーションでよく用いられるものですので、どういう用途でどういう機能を使っているかを共有できればと思い、まとめてみます。
手を上げたらkinectで検知する
openFrameworksのofxOpenNIアドオンを使います。openFrameworksの最新版0.8.0には標準アドオンとしてofxKinectというKinectを簡単に利用できる別のアドオンが組み込まれていますが、ofxKinectは深度カメラで撮影した3次元情報を取得はできるのですが、手や顔の検出といったことはできないようです。そのため、ofxOpenNIにするかofxKinectにするか、用途に応じた使い分けが必要です。
今回のように、手や顔の検出やジェスチャー認識、人体の骨格ポーズ検出などはofxOpneNIを通じてKinectを利用します。
店員の映像を取得・表示する
こちらはopenFrameworksの標準機能であるofVideoGrabberを利用して、Macbookについているカメラの映像を利用します。
お客さん用アプリと店員用アプリを別アプリにして通信する
このプロジェクトでは、Macbookをプロジェクタに接続し、デュアルディスプレイ表示させます。プロジェクタにはお客さん用の画面をフルスクリーンで表示(A)し、Macbook本体側には店員用の画面を表示(B)させます。AとBとはそれぞれ別のopenFrameworks製アプリです。
A側で手を挙げたことを検知したら、B側に知らせる通信機能を実装するため、ofxOSCアドオンを利用します。
ofxOSCでは、送信側と受信側という役目をアプリに実装することで一方向の通信ができますが、AとB両方のアプリに対し、送信と受信の両方の機能(オブジェクト)を実装することもできました。これで「Aが検知してBに知らせ、(注文が終わったあとは)BからAに対して交信終了の信号を送る」という相互通信ができました。
もちろん変数を受け渡すこともできますので、呼び出し時の信号、ビデオ会話開始の信号、会話終了の信号を判別するために、ことなる変数値を受け渡すこともできます。
Bアプリの画面をAアプリに共有する
Bの店員側のアプリでは、店員さんがMacのカメラに映った自分を確認しながら話ができるようになっています。この時、Bアプリ上で表示されている店員さんの映像を、プロジェクタ側(Aアプリ側)でも表示させる必要があります。
こういう場合はofxSyphonアドオンを使って、一方のアプリの画像をもう一方に送信し、リアルタイムの画面同期を実現することができます。
パラメーター調整用のGUIを用意する
ofxGUIアドオンを利用することで、アプリ上でパラメーター調整をするためのGUI(グラフィックユーザーインターフェース)を簡単に実装することができ、今回のサンプルではお客さんがどのくらい手を挙げたら、呼び出しモードにするかを決めるパラメーター調整用に用いています。
お客用の画面左上に表示されているスライダー群がそれにあたりますが、ofxGUIのサンプルにあるように、キーボードでGUIの表示・非表示を切り替えるようにもできますし、設定を外部ファイルに保存・読み込みさせる機能も簡単に実装できます。インスタレーションでは会場の状況に応じて、反応距離等のパラメーターを調整する必要があることが多いので、現場でGUIで調整して、本番はGUIを非表示にするという使い方をすることがあると思います。
プロジェクタ投影面に画面をぴったり合わせる
前々回のプロジェクタに関する記事でも紹介しましたが、プロジェクタの映像をまっすぐ投影できるシーンは少なく投影面が歪んでしまう状況があると思います。プロジェクタの補正機能である程度の傾きは補正できますが、プロジェクションマッピング等では投影面に対して急角度から投影する場合は、ofxQuadWarpアドオンを使うことで、Macの画面側で、投影する画像を任意に歪ませることで、投影面に対してぴったり合わせてしまうこともできます。
以上のようなopenFrameworksアドオンを使って、上の動画のような機能を実現させています。
“未来レストラン”に参加されるには事前登録が必要です。登録はこちらから行ってください。また定員に限りがあるので登録される方は急いでくださいね!