Kinect v2とProcessingで始める身体追跡とリアルタイムビジュアル表現:パフォーマーのためのインタラクティブ入門
はじめに
デジタル技術がライブパフォーマンスの表現を大きく拡張している現代において、自身の身体表現にテクノロジーを取り入れてみたいと考えるパフォーマーの方々が増えています。しかし、具体的に何から始めれば良いのか、どのような技術が自身の表現に役立つのか、技術の壁を感じている方もいらっしゃるかもしれません。
この記事では、比較的入手しやすく、初心者でも取り組みやすい深度センサー「Kinect v2」と、ビジュアル表現に特化したプログラミング環境「Processing」を組み合わせた、身体追跡に基づくリアルタイムビジュアル表現の入門をご紹介します。特に、ダンスなどの身体表現とデジタルアートの融合に興味をお持ちの方に向けて、基本的なセットアップ方法から具体的な表現アイデア、そして学習の第一歩を踏み出すためのヒントを提供します。
Kinect v2とProcessingで何ができるのか
Kinect v2は、マイクロソフトが開発した深度センサーカメラです。人の骨格をリアルタイムに追跡したり、空間の奥行き情報を取得したりすることができます。Processingは、アーティストやデザイナー向けに開発されたプログラミング言語および開発環境で、直感的にビジュアル表現を生成・操作することに適しています。
この二つを組み合わせることで、パフォーマーの身体の動きをリアルタイムに捉え、それに連動した映像やグラフィックを生成し、舞台空間に投影したりスクリーンに表示したりすることが可能になります。
例えば、以下のような表現が考えられます。
- 身体の軌跡の可視化: 身体の動きに合わせて、光の線や粒子の軌跡を描画する。
- 動きによる空間の変容: 身体のジェスチャーによって、映像エフェクトを変化させたり、仮想的な空間を歪ませたりする。
- 影やシルエットの拡張: 身体のシルエットや影をリアルタイムに加工・変容させ、幻想的なイメージを作り出す。
- インタラクティブなパーティクルシステム: 身体の一部(手や足など)から、無数の粒子が湧き出し、動きに合わせて振る舞う。
これらの表現は、パフォーマーの身体そのものをデジタルキャンバスに変え、観客に視覚的に訴えかける新しいレイヤーをパフォーマンスに加えることにつながります。
Kinect v2とProcessingを連携させるための準備
Kinect v2とProcessingでインタラクティブなビジュアル表現を始めるために必要なものを説明します。
ハードウェア
- Kinect for Xbox One または Kinect for Windows v2 センサー: 中古市場などで比較的安価に入手可能です。
- Kinect アダプター (for Windows): Kinect for Xbox One センサーをPCに接続するために必要です。USB 3.0ポートに接続します。
- 対応PC: Windows 8/8.1/10/11 を搭載し、Kinect v2アダプターを接続するためのUSB 3.0ポート、およびProcessingを実行するための十分な処理能力を持つPCが必要です。
ソフトウェア
- Kinect for Windows Runtime 2.0: Kinect v2センサーを使用するために必要なドライバーとランタイムです。マイクロソフトのウェブサイトからダウンロードできます。
- Processing: 公式ウェブサイト(processing.org)からダウンロード・インストールします。
- Processing用Kinectライブラリ: ProcessingからKinect v2のデータを扱うためのライブラリが必要です。「Kinecting」や「SimpleOpenNI for Kinect2」といったライブラリがあります。ProcessingのIDE(統合開発環境)から簡単にインストールできます。
ライブラリのインストール方法(例: Kinecting)
ProcessingのIDEを開き、「スケッチ」メニューから「ライブラリをインポート」→「ライブラリを追加...」を選択します。表示されるライブラリマネージャーの検索窓に「Kinecting」と入力し、リストに表示された「Kinecting」を選択して「インストール」ボタンをクリックします。SimpleOpenNI for Kinect2の場合も同様の手順です。
ProcessingでKinect v2のデータを扱う基本
ライブラリをインストールしたら、ProcessingでKinect v2のデータを取得する基本的なコードを見てみましょう。
骨格データ(スケルトン)の取得と描画
Kinect v2の骨格追跡機能を使うと、人の関節の位置情報をリアルタイムに取得できます。
import kinecting.*; // Kinectingライブラリをインポート
Kinecting kinect;
void setup() {
size(640, 480); // 描画ウィンドウのサイズ設定
kinect = new Kinecting(this); // Kinectingオブジェクトを作成
kinect.startSkeleton(); // 骨格追跡を開始
}
void draw() {
background(0); // 背景を黒でクリア
// Kinectの骨格データが利用可能か確認
if (kinect.hasSkeleton()) {
// 追跡されている全てのユーザーについて処理
for (int i = 0; i < kinect.getNumberOfUsers(); i++) {
// 各ユーザーの骨格データを取得
Skeleton skeleton = kinect.getSkeleton(i);
// 骨格データが有効(追跡されている)か確認
if (skeleton != null) {
// 関節を描画する(例: 頭、首、肩、肘、手、腰、膝、足など)
drawJoint(skeleton.getJoint(Joint.HEAD));
drawJoint(skeleton.getJoint(Joint.NECK));
drawJoint(skeleton.getJoint(Joint.SPINE_SHOULDER));
drawJoint(skeleton.getJoint(Joint.SHOULDER_LEFT));
drawJoint(skeleton.getJoint(Joint.ELBOW_LEFT));
drawJoint(skeleton.getJoint(Joint.HAND_LEFT));
// ... 他の関節も同様に描画
// 骨と骨の間を線で結ぶ(例: 肩から肘へ)
drawLine(skeleton.getJoint(Joint.SHOULDER_LEFT), skeleton.getJoint(Joint.ELBOW_LEFT));
drawLine(skeleton.getJoint(Joint.ELBOW_LEFT), skeleton.getJoint(Joint.HAND_LEFT));
// ... 他の骨も同様に描画
}
}
}
fill(255); // 白い文字色
text("Tracking Users: " + kinect.getNumberOfUsers(), 10, 20); // 追跡人数を表示
}
// 関節(Jointオブジェクト)を描画する関数
void drawJoint(Joint joint) {
if (joint != null) {
// 関節の位置を画面座標に変換
PVector pos = kinect.getScreenPosition(joint.getPosition());
fill(255, 0, 0); // 関節を赤色の円で描画
noStroke();
ellipse(pos.x, pos.y, 10, 10); // 円のサイズ
}
}
// 関節と関節の間を線で結ぶ関数
void drawLine(Joint j1, Joint j2) {
if (j1 != null && j2 != null) {
PVector pos1 = kinect.getScreenPosition(j1.getPosition());
PVector pos2 = kinect.getScreenPosition(j2.getPosition());
stroke(0, 255, 0); // 緑色の線
strokeWeight(3); // 線の太さ
line(pos1.x, pos1.y, pos2.x, pos2.y);
}
}
このコードは、Kinectが検出した人の骨格を、画面上に点の集合(関節)と線(骨)としてリアルタイムに描画します。パフォーマーが動くと、画面上のスケルトンもそれに追従します。これは最も基本的なステップですが、ここから様々なビジュアル表現へと発展させることができます。
深度データの取得と可視化
Kinect v2は、各ピクセルまでの距離(深度)情報も取得できます。
import kinecting.*;
Kinecting kinect;
void setup() {
size(512, 424); // Kinectの深度カメラ解像度に合わせてサイズ設定
kinect = new Kinecting(this);
kinect.startDepth(); // 深度ストリームを開始
}
void draw() {
// 深度データが利用可能か確認
if (kinect.hasDepth()) {
// 深度データを画像として取得
PImage depthImage = kinect.getDepthImage();
image(depthImage, 0, 0); // 深度画像を画面全体に表示
}
fill(255);
text("Depth Stream", 10, 20);
}
このコードは、Kinectが捉えた空間の奥行き情報を、近い場所は明るく、遠い場所は暗いグレースケール画像として表示します。人の形がシルエットのように浮かび上がって見えます。この深度データを利用して、空間の凹凸を表現したり、特定の距離にある物体だけを抽出したりといった表現が可能です。
具体的な表現アイデアへの展開
これらの基本的なデータ取得を元に、より創造的なビジュアル表現を開発できます。
- 動きの軌跡: 関節の過去の位置情報を配列などに記録しておき、それらの点を線や曲線で結んで描画することで、動きの軌跡(残像)を表現できます。時間経過で色や透明度を変化させると、より動的な表現になります。
- パーティクルシステム: 骨格のジョイント位置や深度データを使って、画面上に多数の小さな粒子(パーティクル)を発生させ、物理演算やアルゴリズムに従って動き回らせます。身体の動きがパーティクルの振る舞いに影響を与えるようにすることで、幻想的な表現が生まれます。
- 深度に基づく空間エフェクト: 深度データを利用して、画面上のピクセルの位置をずらしたり、色を変化させたりすることで、空間が歪んだり、波打ったりするようなエフェクトを作り出せます。
- インタラクティブな描画: 身体の動きを筆跡に見立てて、リアルタイムに描画していく表現です。手の動きで線を引いたり、身体全体でジェスチャーを描いたりできます。
これらのアイデアはProcessingの豊富な描画機能と組み合わせることで、さらに多様な表現へと発展させることができます。例えば、ProcessingのライブラリであるToxiclibsや traer physicsなどを使えば、物理演算に基づいたパーティクルの動きを実現することも可能です。
実践に向けて:学習リソースと連携のヒント
Kinect v2とProcessingを使った表現開発を始めるにあたって、役立つ情報や考え方を紹介します。
学習リソース
- Processing公式ウェブサイトのチュートリアル: Processingの基本的な使い方や概念を学ぶのに最適です。
- Kinecting / SimpleOpenNI ライブラリのサンプルコード: ライブラリの基本的な機能を使うためのサンプルが付属しています。これを改造することから始めるのが良いでしょう。
- オンラインチュートリアルや書籍: KinectとProcessing、あるいはより広範なインタラクティブアートに関するチュートリアルや書籍が多数公開されています。「Processing Kinect Tutorial」などのキーワードで検索してみてください。
- コミュニティ: Processingやインタラクティブアートのオンラインコミュニティ、フォーラム、SNSグループなどで質問したり、他のクリエイターの作品を見ることも学びになります。
技術的な課題とコスト感
Kinect v2は比較的安価に入手可能ですが、中古品の状態やPC環境との互換性には注意が必要です。また、リアルタイム処理にはある程度のPCスペックが求められます。トラッキング精度は完璧ではなく、環境光や服装によって影響を受けることもあります。これらの技術的な制約を理解し、表現の意図に合わせて工夫することが重要です。
技術者との連携について
パフォーマー自身がプログラミングを学ぶのは素晴らしいことですが、技術的な部分を専門家と協力して進めることも有効な手段です。技術者との連携を模索する場合、以下の点を意識すると円滑に進む可能性があります。
- 明確な表現イメージの共有: どのような視覚効果を実現したいのか、身体のどのような動きがどのように反応するのか、具体的な言葉や参考映像を用いて明確に伝えます。
- 使用したい技術要素の提案: 「Kinectで骨格を追跡したい」「Processingでこういう絵を描きたい」といった、使用したい技術やツールの希望があれば伝えます。
- 共同での実験とフィードバック: プロジェクトの初期段階から技術者と密にコミュニケーションを取り、試作品を見てフィードバックを伝えることで、イメージとのずれを修正しながら開発を進められます。
Processingはアーティストやデザイナーにも比較的馴染みやすいツールであるため、Processingを扱える技術者や、あるいはビジュアルアート系の経験を持つ技術者を探すと、コミュニケーションがスムーズになるかもしれません。
まとめ
この記事では、Kinect v2とProcessingを組み合わせた身体追跡に基づくリアルタイムビジュアル表現の基礎をご紹介しました。この技術は、パフォーマーの身体の動きを新たなデジタル表現へと変換し、ライブパフォーマンスに深みと驚きをもたらす大きな可能性を秘めています。
技術初心者にとっては、Processingのコードを書くことやKinectセンサーをセットアップすることに最初は難しさを感じるかもしれません。しかし、小さなステップから始め、サンプルコードを改変したり、オンラインのリソースを活用したりすることで、着実に理解を深めることができます。
Kinect v2とProcessingは、あなたの身体表現をデジタル空間へと拡張するための強力なツールの一つです。この記事が、あなたが新しい表現の探求へ向けた第一歩を踏み出すための一助となれば幸いです。デジタル技術と身体表現の融合によって生まれる、次の時代のパフォーマンスを共に創り上げていきましょう。