SIT DOWN PLEASE

2017.04.13

IDEA SEED

デパートや遊園地など、子連れで訪れたファミリー層向けを想定して、「お母さんやお父さんを座らせて休ませないと遊ぶことができない」っていうのがあったらいいなと思い、kinectで「座ったことを検出してイベントが発生する」というのを作っていこうと思います。

openNI

座ったことを検出するのに、openFrameworks(以下oF)でopenNIを使って検出していこうと思います。
oFでopenNIを使うのは、すごくめんどくさい工程を踏まないといけないので、そこも含めて説明していきたいと思います。

  1. まず、ofxOpenNIというAdd-onをダウンロードしてoFのaddonsフォルダにぶち込みます。
  2.  次にprojectGeneratorでofxOpenNIを組み込んだ新しいプロジェクトを作成します。
  3. 作成したら、このプロジェクトフォルダーのbin/dataの中にaddons/ofxOpenNI/examples/opeNI-SimpleExample/bin/dataの中のopenniフォルダーを丸々コピーしてぶち込みます。
  4. ぶち込んだら次に、addons/ofxOpenNI/mac/copy_to_data_openni_pathの中のlibフォルダを、先程の新しく作成したプロジェクトフォルダーにぶち込んだopenniフォルダー内にコピーしてぶち込みます。
  5. まだまだ終わりません。次に、作成したプロジェクトを立ち上げて、左端カラムにある「Project Navigator」にある addons の三角を解き、addon>ofxOpenNIを右クリックして、Add files to “your project name”を選択して、2つの外部フォルダを登録します。登録するフォルダは、addons/ofxOpenNI/includeフォルダーとapps/myApps/”your project name”/bin/data/openni/libフォルダーです。このとき、”Create groups”がONになっていることを確認してください。
  6. まだまだ続きます。さらに、Build Settingsを開き、Search Pathの欄まで行き、Library Search PathのDebugとReleaseにそれぞれ$(BUILT_PRODUCTS_DIR)/data/openni/libの1行を追加します。
  7. 最後に、ofxOpenNIは古い関数が使われているので、それらを直していきます。
    ofxOpenNI.cppとofxOpenNITypes.cppで使われているofGetGLTypeFromPixelFormat を新しいもの ofGetGLFormatFromPixelFormat に修正します。

以上でセットアップは終わりです。

座ったことを検出

座るというジェスチャーのロジックは調べても出てこなかったので、勝手に簡単に「膝の高さが腰の高さまで来るか、それ以上」で作りました。
これだとkinectの高さ位置にもよりますが、色々検出が甘いので、膝の高さをプログラムで仮想的に少しプラスして高くして判定しています。
以下が今回作ったコードです。

今回、座ったら発動するコンテンツとして、せっかくkinect使ってるんだからkinectを活かせる機能にしようと思って、手で水面をジェネレートできるようにしています。
この部分は今回は重要ではないので、ofxFxというAdd-onのexampleをそのまま突っ込んで、両手に割り当ててジェネレートしているだけです。(重くなりますが)

Future

座るという判定は別にkinect使わずに光センサーとか感圧センサーとか使ったほうが都合がいいのですが、これも前回の記事同様、いろいろなジェスチャーを定義して取れればすごく広がると思います。