Kinectを使わない身体の動きとのインタラクション

一般的なWebカメラ(RGBカメラ)からの入力画像を解析して、グラフィックを生成しています。鑑賞者の身体の動きを作品に取り入れるためのシステムを考え、実装してみました。

Kinectがなくたって

Kinectは、Xbox専用のモーションキャプチャーツールです。KinectHackという運動が盛んに行われた結果、今は多くのインタラクティブなメディアアート作品に使われています。

ところが、Kinectの生産停止が発表されて以来、入手が困難になってしまいました。ひとりで何台も所有することも困難になってしまったので、Kinectに頼らない方法を考え、実装してみました。

背景差分法による2値画像の生成

登録された背景画像と入力されているカメラ画像をグレースケールに変換したものを使用します。ピクセルごとの値の違いを閾値によって0か255に置き換えます。これによって、カメラ画像中の動体をはっきりと捉えることができます。

2値化した画像から、今度は輪郭を解析します。ofxOpenCVを用いると、この処理は非常に簡単です。ofxContourFinderというクラスにグレースケールの画像を指定し、検出範囲などを設定するだけです。左の画像のピンクの線のように、輪郭を検出することができます。

「線」は「点」からできている

パーティクルを発生させるには、基準となる点が必要です。

「線」は複数の「点」から構成されています。描画されたピンクの輪郭線は、点同士を繋いだものです。輪郭の点情報を格納した配列から、座標の情報を取り出します。

あとは、別に定義したパーティクルを発生させるクラスに座標の情報を渡してあげるだけです。この処理を毎フレーム実行することにより、映っている身体の動きに合わせて、パーティクルが発生するというようなグラフィックを生成することができます。

「GUI」と「保存機能」の実装

展示などに応用する場合は、閾値やパーティクルの色、それらを設定した結果を保存する機能が必要だと考えました。

ofxGuiとofxXmlSettingsというアドオンを使用することで、展示場所に応じて設定した数値などをXMLファイルとして保存することができました。

外部ファイルとして、一旦出力できると再起動したときに反映することができるうえに、ファイルのコピーだけで、複数台のコンピュータに共有することができます。

今回は、Kinectを用いずに「複数台のコンピュータを使用した展示」を想定した製作を行いました。ひとまず、身体の動きに合わせたグラフィックを生成することはできましたが、いろいろと課題は残ります。

背景差分法は画像の明度差に大きく影響されるため、正確な二値画像を生成できない場合があります。フレーム間差分法など、手段は他にもあるので、生成方法を切り替えられるようにする必要があります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Fill out this field
Fill out this field
有効なメールアドレスを入力してください。

メニュー