インテル® Perceptual Computing SDK を使用した取り組みとフェイス・トラッキング

同カテゴリーの次の記事

PROJECT ANARCHY™ を発表 - HAVOK™ による無料のモバイル向けゲームエンジン

この記事は、インテル® デベロッパー・ゾーンに掲載されている「Plan of Attack and Face Tracking Challenges Using the Intel Perceptual Computing SDK: Ultimate Coder」の日本語参考訳です。


Ultimate Coder Challenge コンテストの一環として、インテル® Perceptual Computing (IPC) SDK を使用できることを嬉しく思います。インテルとそのパートナーにより開発された新しいハードウェアとソフトウェアは、魅力的な可能性にあふれています。当社は、テクノロジーを使用して可能性の限界を押し上げることを目標としています。知覚コンピューティングは、「マイノリティ・リポート」のような映画の中だけの話ではなく、人とコンピューターの対話において非常に大きな役割を果たすと考えられます。ここでは、コンテスト向けに作成中のゲームを通して、実際にユーザー体験を向上させる方法について述べたいと思います。

最初に、我々のチームの成り立ちとこのプロジェクトにおける各自の役割について説明します。多くのコンテスト参加チームとは異なり、当社では究極のアプリケーションを作成するべく各自が重要な役割を担っています。以下は、チームメンバーの簡単な紹介です。


Kelly Wallick – プロジェクト・マネージャー (左から 2 人目)

技術チーム

Chris Allen – プロデューサー、アーキテクト、ゲームデザイナー (左から 3 人目)
Steff Kelsey – 技術リーダー、エンジニア、インテル® Perceptual Computing SDK 担当 (右から 3 人目)
John Grden – ゲーム開発者、ゲームプレイ担当 (中央)

アートチーム

Rebecca Allen – クリエイティブ・ディレクター (左端)
Aaron Artesa – アート・ディレクター、アーティスト・リーダー、キャラクターや効果などを担当 (右端)
Elena Ainley – 環境アーティスト、プロダクション・アート担当 (右から 2 人目)

コンテストのことを聞いて、Infrared5 のテクノロジー (Brass Monkey) とインテルの提供する新しい 3D 画像追跡を組み合わせられないものかと考えてみました。インテル® Perceptual Computing SDK のサンプルのほとんどはハンド・ジェスチャーに関するものでしたが、我々は何か違うものに取り組みたいと思いました。熟考した結果、傾きを検出するゲーム・コントローラーとしてスマートフォンを使い、ヘッド・トラッキングとアイ・トラッキングを用いて、プレイヤーが夢中になれる体験を提供するというアイデアに辿り着きました。我々は、この組み合わせが非常に面白いゲームプレイをもたらすと確信しています。

アートチームも、すでに大量に出回っている標準的な 3D FPS (ファースト・パーソン・シューティング) ゲームではないものを作成したいと考えました。そして、ニュージーランドのキウイ鳥の子供が、その家族を殺した悪い猫に復讐するというおもしろいストーリーを使うことになりました。また、ヘッド・トラッキングと周囲を窺う動作を誇示するため、切り絵を採用することにしました。このブログと Ultimate Coder のサイトで紹介するほかのブログでは、プログラムの技術的な課題とその取り組みに注目し、アートやゲームデザインについてはあまり詳しく取り上げていません (このコンテストは Ultimate Coder であって、Ultimate Designer ではないため)。プロジェクトのアートやデザインに興味がある方は、それらについて詳しく述べた当社のブログをご覧ください。このプロジェクトのプロセス全体が分かるように、ここではほかのブログについても紹介しています。

コンテストに出品するゲームの名前は “Kiwi Catapult Revenge” に決まりました。

次に、技術的な詳細について説明します。

使用するテクノロジーの概要

Unity

コンテストに出品する 3D ゲームには、Unity プラットフォームを使用することになりました。このツールは、迅速なプロトタイピング、アートの統合の容易さなど、多数の利点があります。また、当社ではさまざまなプロジェクトで使用しているため、このツールに精通しており、当社の Brass Monkey SDK でもサポートしています。

Brass Monkey

コンテストにおける我々の強みの 1 つは、独自のテクノロジーを利用できることです。Unity 向けの Brass Monkey SDK により、プレイヤーのスマートフォンを Unity ゲーム用のコントローラーに変えることができます。さらに、別の入力方式としてデバイスの加速度計、ジャイロスコープ、タッチスクリーンも利用することができます。その場合、スマートフォンの傾きによりキウイ鳥を操縦し、タッチスクリーンを通して攻撃とスピードを制御できます。

インテル® Perceptual Computing SDK

ヘッド・トラッキング、顔認証などには IPC SDK を利用することにしました。Kiwi Catapult Revenge では、プレイヤーは自身の目を使用して攻撃の照準を合わせます (キウイ鳥は目からレーザーを発射します)。また、プレイヤーの見る角度により環境を変化させることで、リアル 3D のようなシーンを実現します。Wiimote を使用した例 (こちらを参照) のような効果を達成したいと考えています。さらに、プレイヤーは口を “o” 状にして発射ボタンを押すことで、火を噴くこともできます。

この他にも IPC SDK には利用してみたい機能がありますが、それらについては別のブログで触れたいと思います。

OpenCV

我々は、より細やかなフェイス・トラッキング・アルゴリズムを実現するため、この C ベースのライブラリーを使用する予定です。IPC SDK と一緒に OpenCV を使用する理由については後述します。OpenCV もインテルにより提供されているので、インテルのオープンソース・ライブラリーを 2 つ使用することで、追加得点が得られることを期待しましょう。

ヘッド・トラッキング

このプロジェクトにおける最大のリスクは、スムーズなゲームプレイに必要なヘッド・トラッキングを実現できるかどうかなので、我々は早い段階からこの課題に取り組むことにしました。

当初、IPC SDK のサンプルには、ヘッド・トラッキングに関するものはほとんどありませんでした。最新のリリースでようやく、我々が作成しようとしているプログラムとわずかに関連性のあるものを見つけることができました。それは IPC SDK の Unity 向けバージョンに含まれていました。ただし、そのサンプルはパフォーマンスがあまり良くありませんでした。遅く、正確さに欠け、我々が求めているエクスペリエンスとはかけ離れたものでした。

さらに悪いことに、Unity 向けのプラグインはごくわずかしかなく、ヘッド・トラッキングや顔認証のアルゴリズムの参考にはあまりなりませんでした。Unity 開発者としては、SDK により提供されるパフォーマンスの悪いアルゴリズムを利用するか、カメラから原画像を取得してすべての計算を独自に行うかしか選択肢がないことになります。検証の結果、SDK のフェイス・トラッキング・アルゴリズムはあまり正確でなく、3 FPS もかかることが分かりました。ただし、SDK により提供されるアルゴリズムでも、Unity 向けのハンド・ジェスチャー機能は非常に洗練されていました。インテルではこの機能に力を入れており、頭/顔検出機能にはあまり力を入れていないようでした。これは、我々のゲームビジョンにとって大きな問題です。ゲームのアイデアを変更せずにこのまま続行するには、異なるアプローチをとらなければならないことに気付きました。

OpenCV

IPC SDK の現在のバージョンをそのまま利用できないことが分かったとき、我々はほかの可能性を模索し始めました。Chris は以前に OpenCV (CV はコンピューター・ビジョンを表す) を調査したことがあり、関連書籍を持っていました。そこで、OpenCV を用いた効率良い既存のヘッド・トラッキングとアイ・トラッキングのアルゴリズムがないか、それらの書籍から探してみることになりました。また、OpenTL と呼ばれる、非常に洗練されて効率の良さそうなヘッド・トラッキング・ライブラリーを見つけました。このライブラリーには非常に期待していたのですが、ダウンロードしてみたところ、これはオープンソースではないことが判明しました。我々は、コンテスト向けのこのプロジェクトでは、サードパーティー・ツールのライセンスに関与したくないと考えていました。同様に、SeeingMachines の FaceAPI も非常に有望でしたが、使用にはプロプライエタリー・ライセンスが必要でした。幸いにも、このプロジェクトには OpenCV で十分対応できることが分かりました。

OpenCV は C ライブラリーなので、Unity で動作させる方法を模索する必要がありました。Mono ベースの Unity 環境で関数を利用可能にするため dll をコンパイルするか、すでにコンパイルされているバージョンをインターネット上から探さなければなりませんでした。幸いにも、このサンプルを見つけることができ、我々のゲームに組込むことになりました。

デプスカメラの使用

もう 1 つの懸念事項は、リアルタイムのフェイス・トラッキングのサンプルで特殊カメラを使用しているものがなかったことです。すべてのサンプルは webcam を使用していましたが、我々はコンテスト用にインテルのユニークなハードウェアを利用したいと考えていました。検証したほとんどのサンプルで、人物の背景は単色のほうがパフォーマンスが良いことに気付きました。ノイズが少ないほうがより高いパフォーマンスが得られたのです。そのため、デプス (深度) カメラを使用してプレイヤーの頭以外を遮断し、プレイヤーの背景に関係なく処理されるイメージのノイズを減らせないかと考えました。そうすることで、従来の webcam と比較して、大幅なパフォーマンスの向上が実現できます。

アプリケーション・フローとアーキテクチャー

慎重にツールを検討した後に、すべての要素が連携して動作するアーキテクチャーを決めました。原画像のカメラフレームに IPC SDK の Unity バージョンを使用し、深度センサーデータを取得してプレイヤーの頭以外の部分を遮断し、Unity へのプラグインによりフェイス・トラッキング・アルゴリズムに OpenCV を使用することになりました。

今後、ゲーム・コントローラーの実装に必要なパフォーマンスと、(できれば) 頭の位置と向きのトラッキング機能、口が開いているか閉じているかを特定する機能、そして目の動きのトラッキング機能が得られるまで、いくつかのアルゴリズムを組み合わせて試してみるつもりです。プロセスの各ステップでは、それ以降のステップのセットアップを行います。

顔の位置の検出には、Viola-Jones 検出手法を使用します。この検出結果は、口や目の検出アルゴリズムで使用する小さな対象領域 (ROI) になります。

顔の特徴部位と頭の向きを検出する手法はいくつかあります。1 つ目の手法は、最初の検出結果から 3 つの新しい ROI を定義し、各タスク専用の比較イメージセットを使用して口と目を検索します。2 つ目の手法は、アクティブ・アピアランス・モデル (AAM) を用いて、対称範囲から形状モデルに一致する顔の特徴部位を検索します。これらの手法については、実際に試してみてから、今後のブログで詳しく述べていきたいと思います。

視線の方向のトラッキングは、それぞれの目の ROI を分析し、Adaptive EigenEye メソッドにより虹彩と瞳孔の位置を特定することで行います。

トラッキング可能なポイントは、Lucas-Kanade 法のオプティカル・フローにより制約されます。オプティカル・フローは、現在のフレームと以前のフレームを比較し、最小二乗推定を使用して最も可能性の高いトラッキング・ポイントの場所を探します。

まとめ

我々は、知覚コンピューティング・カメラのユニークな機能をゲームプレイのユーザー体験に活かすことができるアプローチを見つけたと確信しています。今後 7 週間の開発過程において、このアイデアがどれほど変わるのか楽しみです。プロジェクトの行方について、すでに次のような懸念事項があります:

  • 実際にアイデアがどれほど想定どおりに動作するのか?

  • どのようなパフォーマンス・チューニングが必要か?

  • より魅力的なゲームにするために利用できるその他の IPC SDK 機能はどの位あるのか?

  • 短期間にこのような大掛かりなプロジェクトを完了できるのか?

予定よりも 随分と長いブログになってしまいました。Infrared5 の取り組みについてお読みいただきありがとうございました。

皆さんのご意見をぜひお聞かせください。このプロジェクトに対して、皆さんだったらどのようなアプローチを取りますか?コンピューター・ビジョン・アルゴリズムに取り組んだ経験や励ましのメッセージなど、皆さんからのご意見やコメントをお待ちしています。

関連情報

Infrared5 社のブログ: http://blog.infrared5.com/

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

関連記事