ソニー・コンピュータエンタテインメント(SCE)は、2011年9月6日から開催中の「CEDEC 2011」において、同社の顔画像認識ライブラリ「libface」のゲームへの応用について解説した。同社はここ数年、CEDECにおいてlibfaceの活用法などについて解説しているが、今年はより実践的な内容を解説した。
ソニーの顔認識技術は、同社が手掛けていたパーソナル・ロボット向けの技術が基になっている。現在ではデジタル・カメラをはじめとして同社の各種製品に応用されているが、このうちlibfaceは、この顔認識技術をPlayStation 3向けに移植したものである。Cell/B.E.のSPUのSIMD命令を活用するなど、Cell向けの最適化がなされている。顔の位置、大きさ、傾き、顔のパーツ(目、鼻、口、輪郭)、各種属性(性別、年齢、メガネの有無、目の開閉度)、笑顔かどうかなどの表情、といった情報を取得できる。
時系列フィルタでノイズを抑制・平滑化
今回、SCEは顔認識結果のパラメータの時系列上での安定化・平滑化について解説した。応用例として、CG上のキャラクター(アバター)をユーザーの顔の動作によって操作するデモを取り上げた。
libfaceに限らず、一般に顔画像の検出アルゴリズムを動画像のフレームごとにそのまま適用すると、認識結果の時系列パラメータには、どうしても小さな振動やノイズ(ブレ)、誤認識による値の突発的な変動(トビ)が生じてしまう。SCEはこれらブレ・トビの抑制策として、時系列フィルタの利用を推奨した。
ただし、フィルタの特性は認識部位によって調整する必要がある。例えば、首の動きのように連続的で滑らかであることが自然な動作もあれば、目の瞬きのように目が閉じている状態と目が開いている状態とが離散的かつ明確に区別され、中途半端な状態がない方が自然に見える動作もある。このため目の瞬きについては、目の開閉度に応じて閾値処理を施した。
認識結果のフレーム・レートについても考慮する必要がある。通常のゲームのCGの描画処理は60フレーム/秒だが、ハードウエアの環境によっては画像認識のループがそれよりも遅く、約10フレーム/秒程度の性能分しか割り当てられない場合もある。その場合、顔認識結果のパラメータをそのまま60フレーム/秒のキャラクター描画に反映させると、カクカクとした動きになってしまう。このためSCEは、こうした場合に向けてコンボリューション・フィルタ(畳み込み演算)の利用を推奨した。
コンボリューション・フィルタを時系列データに適用すれば、出力は滑らかにはなるものの、タップ数に応じた遅延が発生してしまう。適切なタップ数は用途によって異なるが、今回の講演ではSCEは8タップの例を説明していた。
PS Vitaで顔認識技術のすそ野を広げる
libfaceは現在、PS3向けレーシング・ゲーム「グランツーリスモ 5(GT5)」など数種のゲーム・タイトルに採用されている(Tech-On!関連記事)。現時点ではそれほど多いわけではないが、「数カ月のうちに、海外市場のゲーム・タイトルでもいくつか採用されそうだ」(SCE 半導体システム開発部の小口 貴弘氏)という。
顔認識技術を利用するためには、PS3の場合は別途、カメラを用意する必要があるが、プレイステーション・ポータブル(PSP)の後継機である「PlayStation Vita」ではカメラが標準搭載される。このため「PS Vitaを中心に今後は顔認識技術も適用しやすくなる」(SCEの小口氏)とする。
CPU負荷は比較的軽いが、メモリを食う
今回の講演では、GT5の開発元であるポリフォニー・デジタルの内村創氏も登壇した。GT5では、顔の向きに応じてゲーム画面のカメラ視点を変えられるようにしている(Tech-On!関連記事)。レース中に横のクルマを確認したいとった要望に対応するものだが、ゲーム・パッドにはアクセルやクラッチなど既に多くの機能が割り当てられており空きがないため、顔認識技術(libface)の採用を決めた。
内村氏によると、libfaceのCPU負荷は比較的低いという。ただし、メモリ使用量が多いため、すべてのシーンでは顔認識機能を動作させられなかったという。レース中は顔認識機能は有効になっているが、ピット入りのシーンではメモリ使用量の関係で顔認識機能はオフにしたという。
照明条件への対応やトラッキングとの併用も
最後にSCEはlibfaceの今後の動向として、照明条件など環境差への対応を挙げた。暗所や逆光、斜光など照明条件が異なってもロバストに認識できるようにするために、環境光フィルタを導入する。具体的には顔画像の認識前に、前処理として輝度変換フィルタを挿入し、正規化する。フィルタ係数はキャリブレーションによって顔検出スコアが最大のものを自動選択する。また、目、鼻、口など顔パーツのトラッキングと顔検出との併用により、安定化を目指すとした。
当初、第6段落において「画像認識のループはそれよりも遅く、約10フレーム/秒以下である」としていましたが,これはあくまで実装の一例です(実際、PS3ではlibfaceによる顔認識で60フレーム/秒が出ています)。このため本文の表現を修正しました。お詫びして訂正します。本文は修正済みです。