説明

ゲームプログラムおよびゲーム装置

【構成】 ゲーム装置10は、内側カメラ32を含み、内側カメラ32で撮影した撮影画像から肌色を抽出する。ゲーム中では、特定領域(110,110´)において、所定の割合を超える肌色領域が検出されるかどうかを判定する。所定の割合を超える場合には、ユーザの顔が正しく認識されていると判断し、撮影画像から特徴点を検出する。この特徴点に基づいて、ユーザの顔全体を認識しているかを検出したり、顔の一部またはその動きを検出したりして、所定の条件を満たすか否かによって、ゲームを進行させる。ただし、所定の割合以下である場合には、ユーザの顔を正しく認識していないと判断し、特徴点に基づく判定は行わない。
【効果】 撮像したユーザの画像による操作をユーザの意図した通りにゲーム処理に反映させることができる

【発明の詳細な説明】
【技術分野】
【0001】
この発明はゲームプログラムおよびゲーム装置に関し、特にたとえば、撮像されたユーザの顔の全部または一部を認識して、その認識結果に基づいてゲーム処理を実行する、ゲームプログラムおよびゲーム装置に関する。
【背景技術】
【0002】
背景技術の一例が特許文献1に開示されている。この特許文献1の画像出力装置は、2台のカメラによりユーザの顔を撮像し、撮像して得られた顔画像から眼球と虹彩を検出することにより目の動きを特定し、特定した目の動きに応じて出力画像の表示領域を変更する。
【特許文献1】特開2006−202181号公報[G06F 3/033,A63F 13/00,G06T 1/00,G06T 7/60]
【発明の開示】
【発明が解決しようとする課題】
【0003】
しかし、特許文献1の画像出力装置では、ユーザの顔が撮影されていることを前提としているため、ユーザの目以外のものを検出することにより目の動きを特定したと判断して、出力画像の表示領域を変更してしまう可能性がある。したがって、この背景技術を、撮像されたユーザの画像によって操作を行うゲームに適用した場合には、撮像されたユーザの画像による操作をユーザの意図した通りにゲーム処理に反映させることができないという問題がある。
【0004】
それゆえに、この発明の主たる目的は、新規な、ゲームプログラムおよびゲーム装置を提供することである。
【0005】
また、この発明の他の目的は、撮像したユーザの画像による操作をユーザの意図した通りにゲーム処理に反映させることができる、ゲームプログラムおよびゲーム装置を提供することである。
【課題を解決するための手段】
【0006】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施の形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【0007】
第1の発明は、ユーザの顔の全体または一部に対応する画像を示す画像データに基づいてゲーム処理を実行する装置のコンピュータに実行させるゲームプログラムであって、ユーザを撮像する撮像ステップ、撮像ステップによって撮像された画像を示す画像データに基づいて、ユーザの顔の全部または一部を認識する顔認識ステップ、撮像ステップによって撮像された画像を示す画像データに基づいて、ユーザの肌色を検出したか否かを判定する肌色検出判定ステップ、および肌色検出判定ステップによってユーザの肌色を検出したと判定されたとき、顔認識ステップによって認識されたユーザの顔の全部または一部を示す情報に基づいてゲーム処理を実行するゲーム処理ステップを実行させる、ゲームプログラムである。
【0008】
第1の発明では、ゲームプログラムは、ユーザの顔の全体または一部に対応する画像を示す画像データに基づいてゲーム処理を実行する装置(10)のコンピュータに次のステップを実行させる。撮像ステップ(50,S3)は、ユーザを撮像する。顔認識ステップ(50,S7)は、撮像ステップによって撮像された画像を示す画像データに基づいて、ユーザの顔の全部または一部を検出する。肌色検出ステップ(50,S3、S5)は、撮像ステップによって撮像された画像を示す画像データに基づいて、ユーザの肌色を検出したか否かを判定する。そして、ゲーム処理ステップ(50,S9,S15,S17,S19)は、肌色検出判定ステップによってユーザの肌色を検出したと判定されたとき(S5で“YES”)、顔認識ステップによって認識されたユーザの顔の全部または一部を示す情報に基づいてゲーム処理を実行する。
【0009】
第1の発明によれば、撮像したユーザの画像からユーザの肌色を検出した場合にのみ、ユーザの顔の全部または一部を示す情報に基づいてゲーム処理を実行するので、撮像したユーザの画像による操作をユーザの意図した通りにゲーム処理に反映させることができる。
【0010】
第2の発明は第1の発明に従属し、撮像ステップによって撮像された画像を示す画像データに基づいて、肌色の領域の大きさを算出する肌色領域算出ステップをさらに実行させ、肌色検出判定ステップは、肌色領域算出ステップによって算出された肌色の領域の大きさが所定値以上であるときに、ユーザの肌色を検出したと判定する。
【0011】
第2の発明では、ゲームプログラムは、肌色領域算出ステップ(50,S5)をさらに実行させる。肌色検出判定ステップは、肌色領域算出ステップによって算出された肌色の領域の大きさが所定値以上であるときに、ユーザの肌色を検出したと判定する。
【0012】
第2の発明によれば、肌色の領域の大きさが所定値以上である場合にのみ、肌色を検出したと判定するので、たとえば、ゲームプログラマや開発者が意図するプレイ状態における平均的な肌色領域の大きさを所定値に設定しておくことにより、意図通りのプレイ状態でゲームをプレイさせることができる。
【0013】
第3の発明は、第2の発明に従属し、肌色領域算出ステップは、撮像ステップによって撮像された画像における肌色の領域の割合を算出し、肌色検出ステップは、肌色領域算出ステップによって算出された割合が所定値以上であるときに、ユーザの肌色を検出したと判定する。
【0014】
第3の発明では、肌色領域算出ステップは、撮像された画像における肌色の領域の割合を算出する。肌色検出ステップは、肌色領域算出ステップによって算出された割合が所定値以上であるときに、ユーザの肌色を検出したと判定する。
【0015】
第3の発明においても、第2の発明と同様に、意図通りのプレイ状態でゲームをプレイさせることができる。
【0016】
第4の発明は、第2の発明に従属し、撮像ステップによって撮像された画像において、特定の領域を設定する領域設定ステップをさらに実行させ、肌色領域算出ステップは、領域設定ステップによって設定された特定の領域内における肌色の領域の大きさを算出する。
【0017】
第4の発明では、領域設定ステップ(50)は、撮影ステップによって撮影された画像において、特定の領域(110,110´)を設定する。したがって、たとえば、肌色領域算出ステップは、領域設定ステップによって設定された特定の領域内における肌色の領域の大きさを算出する。
【0018】
第4の発明によれば、特定の領域を設定するので、ユーザの顔や手が存在すると考えられる場所を特定の領域に設定しておけば、比較的簡単な処理で、肌色を検出したかどうかを判断することができる。
【0019】
第5の発明は第1ないし第4の発明に従属し、顔認識ステップは、撮像ステップによって撮像された画像を示す画像データに基づいて、ユーザの顔を認識するとともに、当該ユーザの肌色を検出し、ゲーム処理ステップは、肌色検出判定ステップによってユーザの肌色を検出したと判定されたとき、顔認識ステップによって認識されたユーザの顔の全部または一部を示す顔情報と当該ユーザの肌色を示す肌色情報とに基づいてゲーム処理を実行する。
【0020】
第5の発明では、顔認識ステップは、撮像ステップによって撮像された画像を示す画像データに基づいて、ユーザの顔を認識するとともに、当該ユーザの肌色を検出する。ゲーム処理ステップは、肌色検出判定ステップによって検出されたユーザの顔の全部または一部を示す情報と、当該ユーザの肌色情報とに基づいてゲーム処理を実行する。
【0021】
第5の発明によれば、肌色と顔を示す情報とに基づいてゲーム処理を実行するので、たとえば、肌色のみを検出し、顔を示す情報を検出していないような顔を隠している状態と、肌色を検出するとともに、顔を示す情報を検出しているような顔を見せている状態とに基づいてゲームを進行させることができる。
【0022】
第6の発明は、第1の発明に従属し、ユーザを予め撮像して得られた画像を示す画像データに基づいて、当該ユーザの肌色の特徴を示す肌色特徴データを算出する肌色特徴データ算出ステップをさらに実行させ、肌色検出判定ステップは、撮像ステップによって撮像された画像を示す画像データと肌色特徴データ算出ステップによって算出された肌色特徴データとに基づいて、ユーザの肌色を検出したか否かを判定する。
【0023】
第6の発明では、ゲームプログラムは、肌色特徴データ算出ステップ(50)をさらに実行させる。肌色特徴データ算出ステップは、ユーザを予め撮像して得られた画像を示す画像データに基づいて、当該ユーザの肌色の特徴を示す肌色特徴データ(色相、彩度、輝度の閾値)を算出する。肌色検出判定ステップは、撮像ステップによって撮像された画像を示す画像データと肌色特徴データ算出ステップによって算出された肌色特徴データとに基づいて、ユーザの肌色を検出したか否かを判定する。
【0024】
第6の発明によれば、予め撮影した画像から得たユーザの肌色の特徴に基づいてユーザの肌色を検出したか否かを判断するので、ゲームの開始に先立って、肌色の特徴を得るようにしておけば、ユーザ毎に異なる肌色の特徴による誤差やゲームをプレイする時間や場所の違いによる誤差を無くすことができる。
【0025】
第7の発明は、第1の発明に従属し、撮像ステップによって撮像された画像を示す画像データに基づいて、ユーザの顔の全部または一部の特徴点データを取得する特徴点データ取得ステップ、および特徴点データ取得ステップによって取得された特徴点データが所定の条件を満たすか否かを判定する特徴点データ判定ステップをさらに実行させ、ゲーム処理ステップは、肌色検出判定ステップによってユーザの肌色を検出したと判定され、かつ、特徴点データ判定ステップによって特徴点データが所定の条件を満たすと判定されたときに、顔認識ステップによって認識されたユーザの顔の全部または一部を示す情報に基づいてゲーム処理を実行する。
【0026】
第7の発明では、特徴点データ取得ステップ(50)は、撮像ステップによって撮像された画像を示す画像データに基づいて、ユーザの顔の全部または一部の特徴点データを取得する。また、特徴点データ判定ステップ(50,S9)は、特徴点データ取得ステップによって取得された特徴点データが所定の条件を満たすか否かを判定する。ゲーム処理ステップは、肌色検出判定ステップによってユーザの肌色を検出したと判定され(S5で“YES”)、かつ、特徴点データ判定ステップによって特徴点データが所定の条件を満たすと判定されたときに(S9で“YES”)、顔認識ステップによって認識されたユーザの顔の全部または一部を示す情報に基づいてゲーム処理を実行する。
【0027】
第7の発明によれば、ユーザの肌色を検出し、かつ特徴点データが所定の条件を満たすと判定されたときに、ゲーム処理を実行するので、ユーザの顔の画像に基づいて、より正確にゲーム処理を実行することができる。
【0028】
第8の発明は、ユーザの顔の全体または一部に対応する画像を示す画像データに基づいてゲーム処理を実行するゲーム装置であって、ユーザを撮像する撮像手段、撮像手段によって撮像された画像を示す画像データに基づいて、ユーザの顔の全部または一部を認識する顔認識手段、撮像手段によって撮像された画像を示す画像データに基づいて、ユーザの肌色を検出したか否かを判定する肌色検出判定手段、および肌色検出判定手段によってユーザの肌色を検出したと判定されたとき、顔認識手段によって認識されたユーザの顔の全部または一部を示す情報に基づいてゲーム処理を実行するゲーム処理手段を備える、ゲーム装置である。
【0029】
第8の発明においても、第1の発明と同様に、撮像したユーザの画像による操作をユーザの意図した通りにゲーム処理に反映させることができる。
【発明の効果】
【0030】
この発明によれば、撮像したユーザの画像からユーザの肌色を検出した場合にのみ、ユーザの顔の全部または一部を示す情報に基づいてゲーム処理を実行するので、撮像したユーザの画像による操作をユーザの意図した通りにゲーム処理に反映させることができる。
【0031】
この発明の上述の目的,その他の目的,特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【発明を実施するための最良の形態】
【0032】
図1を参照して、この発明の一実施例であるゲーム装置10は、上側ハウジング12および下側ハウジング14を含み、上側ハウジング12と下側ハウジング14とは、開閉可能(折り畳み可能)に連結されている。図1の例では、上側ハウジング12および下側ハウジング14は、それぞれ横長の長方形の板状に形成され、互いの長辺部分で回動可能に連結されている。つまり、この実施例のゲーム装置10は、折り畳み型の携帯ゲーム装置であり、図1には、当該ゲーム装置10を開いた状態(開状態)で示してある。ゲーム装置10は、開いた状態においてもユーザが両手または片手で把持することができるようなサイズで構成される。
【0033】
通常、ユーザは、開状態でゲーム装置10を使用する。また、ユーザは、ゲーム装置10を使用しない場合には閉状態で保管する。ただし、ゲーム装置10は、上記閉状態および開状態のみでなく、上側ハウジング12と下側ハウジング14とのなす角度が閉状態と開状態との間の任意の角度において、連結部分に発生する摩擦力などによってその開閉角度を維持することができる。つまり、上側ハウジング12を下側ハウジング14に対して任意の角度で静止させることができる。
【0034】
なお、ゲーム装置10は、後述するカメラ(32,34)を搭載しており、当該カメラ(32,34)によって画像を撮像し、撮像した画像を画面に表示したり、撮像した画像のデータを保存したりする撮像装置としても機能する。
【0035】
図1に示すように、上側ハウジング12には第1LCD16が設けられ、下側ハウジング14には第2LCD18が設けられる。第1LCD16および第2LCD18は、横長形状であり、それぞれの長辺方向が上側ハウジング12および下側ハウジング14の長辺方向と一致すうように配置される。たとえば、第1LCD16および第2LCD18の解像度は、256(横)×192(縦)画素(ドット)に設定される。
【0036】
なお、この実施例では、表示器としてLCDを用いるようにしてあるが、LCDに代えて、EL(Electronic Luminescence)ディスプレイやプラズマディスプレイを用いるようにしてもよい。また、ゲーム装置10は、任意の解像度の表示装置を利用することができる。詳細は後述するが、第2LCD18は、主に、内側カメラ32または外側カメラ34で撮像されている画像(静止画像や動画像)をリアルタイムに表示したり、ゲーム画面を表示したりするために用いられる。
【0037】
下側ハウジング14には、入力装置として、各操作ボタン20a−20kが設けられる。図1に示されるように、各操作ボタン20a−20kのうち、方向入力ボタン20a、操作ボタン20b、操作ボタン20c、操作ボタン20d、操作ボタン20e、電源ボタン20f、スタートボタン20g、およびセレクトボタン20hは、下側ハウジング14の第2LCD18が設けられる側の面(内側の面)に配置される。具体的には、方向入力ボタン20aおよび電源ボタン20fは、第2LCD18の左側に配置され、操作ボタン20b−20e,20gおよび20hは、第2LCD18の右側に配置される。また、上側ハウジング12と下側ハウジング14とを折り畳んだときには、操作ボタン20a−20hはゲーム装置10の内部に収められる。
【0038】
方向入力ボタン(十字キー)20aは、ディジタルジョイスティックとして機能し、プレイヤオブジェクトの移動方向を指示したり、カーソルを移動させたりするなどに用いられる。各操作ボタン20b−20eは、プッシュボタンであり、たとえば、プレイヤオブジェクトに任意の動作をさせたり、決定やキャンセルを実行したりする等に用いられる。電源ボタン20fは、プッシュボタンであり、ゲーム装置10の主電源をオン/オフするために用いられる。スタートボタン20gは、プッシュボタンであり、ゲームを中断(ポーズ)したり、開始(再開)したりするために用いられる。セレクトボタン20hは、プッシュボタンであり、ゲームモードやメニューの選択等に用いられる。
【0039】
図1においては、操作ボタン20i−20kは省略したが、図2(A)に示すように、操作ボタン(Lボタン)20iは、下側ハウジング14の上側面の左端部に設けられ、操作ボタン(Rボタン)20jは、下側ハウジング14の上側面の右端部に設けられる。また、図2(B)に示すように、音量ボタン20kは、下側ハウジング14の左側面に設けられる。
【0040】
なお、図2(A)は、ゲーム装置10を折り畳んだ状態で、上面(上ハウジング12)側から見た図であり、図2(B)は、同じくゲーム装置10を折り畳んだ状態で、左側面から見た図である。
【0041】
Lボタン20iおよびRボタン20jは、プッシュボタンであり、操作ボタン20b−20eと同様の操作に用いたり、それらの操作ボタン20b−20eの補助的な操作に用いたりすることができる。また、この実施例では、Lボタン20iおよびRボタン20jは、撮影指示の操作(シャッター操作)を行うために用いることもできる。音量ボタン20kは、2つのプッシュボタンを用いて構成され、図示しない2つのスピーカ(右スピーカおよび左スピーカ)から出力される音の大きさを調整するために用いられる。この実施例では、音量ボタン20kには、2つの押圧部を含む操作部が設けられ、各押圧部に対応して上記のプッシュボタンが設けられる。したがって、一方の押圧部を押すと音量が大きくされ、他方の押圧部を押すと音量が小さくされる。たとえば、押圧部を押し続けると、音量が次第に大きくされたり、次第に小さくされたりする。
【0042】
図1に戻って、ゲーム装置10は、操作ボタン20a−20kとは別の入力装置として、さらにタッチパネル22を備えている。タッチパネル22は、第2LCD18の画面上を覆うように装着されている。この実施例では、タッチパネル22は、たとえば抵抗膜方式のタッチパネルが用いられる。ただし、タッチパネル22は、抵抗膜方式に限らず、任意の押圧式のタッチパネルを用いることができる。また、この実施例では、タッチパネル22として、たとえば第2LCD18の解像度と同解像度(検出精度)のものを利用する。ただし、必ずしもタッチパネル22の解像度と第2LCD18の解像度とが一致している必要はない。
【0043】
また、下側ハウジング14の右側面には、挿入口(図1に示す破線)が設けられている。挿入口は、タッチパネル22に対する操作を行うために用いられるタッチペン24を収納することができる。通常、タッチパネル22に対する入力は、タッチペン24を用いて行われるが、タッチペン24に限らずユーザの指でタッチパネル22を操作することも可能である。したがって、たとえば、タッチペン24を用いない場合には、タッチペン24の挿入口および収納部を設ける必要はない。
【0044】
また、下側ハウジング14の右側面には、メモリカード26を収納するための挿入口(図1では、二点鎖線で示している)が設けられている。この挿入口の内側には、ゲーム装置10とメモリカード26とを電気的に接続するためのコネクタ(図示せず)が設けられる。メモリカード26は、たとえばSDカードであり、コネクタに着脱自在に装着される。このメモリカード26は、たとえば、ゲーム装置10によって撮像された画像を記憶(保存)したり、他の装置で生成(撮像)ないし記憶された画像をゲーム装置10に読み込んだりするために用いられる。
【0045】
さらに、下側ハウジング14の上側面には、メモリカード28を収納するための挿入口(図1では、一点鎖線で示している)が設けられている。この挿入口の内側にも、ゲーム装置10とメモリカード28とを電気的に接続するためのコネクタ(図示せず)が設けられる。メモリカード28は、ゲームプログラムや他のアプリケーションプログラムおよび必要なデータなどを記録した記録媒体であり、下側ハウジング14に設けられた挿入口に着脱自在に装着される。
【0046】
また、上側ハウジング12と下側ハウジング14との連結部(ヒンジ)の左端部分には、インジケータ30が設けられる。このインジケータ30は、3つのLED30a,30b,30cによって構成される。ここで、ゲーム装置10は、他の機器との間で無線通信を行うことが可能であり、第1LED30aは、無線通信が確立している場合に点灯する。第2LED30bは、ゲーム装置10の充電中に点灯する。第3LED30cは、ゲーム装置10の主電源がオンである場合に点灯する。したがって、インジケータ30(LED30a−30c)によって、ゲーム装置10の通信確立状況、充電状況、および主電源のオン/オフ状況をユーザに通知することができる。
【0047】
上述したように、上側ハウジング12には、第1LCD16が設けられる。この実施例では、第2LCD18を覆うように、タッチパネル22を設けているが、第1LCD16を覆うように、タッチパネル22を設けてもよい。または、第1LCD16および第2LCD18のそれぞれを覆うように、2つのタッチパネル22を設けるようにしてもよい。たとえば、第2LCD18には、各操作ボタン20a−20kやタッチパネル22の役割ないし操作方法をユーザに教えるための操作説明画面やゲーム画面が表示される。
【0048】
また、上側ハウジング12には、2つのカメラ(内側カメラ32および外側カメラ34)が設けられる。図1に示すように、内側カメラ32は、上側ハウジング12と下側ハウジング14との連結部付近であり、第1LCD16が設けられる側の面に、この第1LCD16の表示面とその撮影面とが平行または面一になるように取り付けられる。一方、外側カメラ34は、図2(A)に示すように、内側カメラ32が取り付けられる面とは反対側の面、すなわち、上側ハウジング12の外側の面(ゲーム装置10が閉状態となった場合に外側となる面であり、図1に示す上側ハウジング12の背面)に取り付けられる。ただし、図1においては、外側カメラ34を破線で示してある。
【0049】
したがって、内側カメラ32は、上側ハウジング12の内側の面が向く方向を撮像することが可能であり、外側カメラ34は、内側カメラ32の撮像方向の逆方向、すなわち、上側ハウジング12の外側の面が向く方向を撮像することが可能である。このように、この実施例では、内側カメラ32および外側カメラ34の撮像方向が互いに逆方向となるように、それら2つのカメラ32,34が設けられる。たとえば、ゲーム装置10を把持したユーザは、このゲーム装置10側からユーザの方を見た景色(たとえば、当該ユーザを含む)を内側カメラ32で撮像することができるとともに、ゲーム装置10側からユーザとは反対側の方向を見た景色を外側カメラ34で撮像することができる。
【0050】
なお、上記連結部付近の内側の面には、音声入力装置としてマイク84(図3参照)が収納されている。そして、上記連結部付近の内側の面には、マイク84がゲーム装置10外部の音を検知できるように、そのマイク84用の孔36が形成される。マイク84を収納する位置およびマイク84用の孔36の位置は必ずしも上記連結部である必要はなく、たとえば下側ハウジング14にマイク84を収納し、マイク84の収納位置に対応させて下側ハウジング14にマイク84用の孔36を設けるようにしてもよい。
【0051】
また、上側ハウジング12の外側の面には、外側カメラ34の近傍に第4LED38(図1では、破線で示す)が取り付けられる。第4LED38は、内側カメラ32または外側カメラ34によって撮影が行われた(シャッターボタンが押下された)時点で点灯する。また、内側カメラ32または外側カメラ34によって動画が撮影される場合には、第4LED38は、撮影の間点灯し続ける。つまり、第4LED38を点灯することによって、ゲーム装置10による撮影が行われた(行われている)ことを撮影対象者や周囲に通知することができる。
【0052】
また、上側ハウジング12には、第1LCD16の両側に、音抜き孔40が形成される。この音抜き孔40に対応する位置であり、上側ハウジング12の内部には、上述したスピーカが収納されている。音抜き孔40は、スピーカからの音をゲーム装置10の外部に放出するための孔である。
【0053】
以上に説明したように、上側ハウジング12には、画像を撮像するための構成である内側カメラ32および外側カメラ34と、主として、撮影された画像およびゲーム画面を表示するための表示手段である第1LCD16とが設けられる。一方、下側ハウジング14には、ゲーム装置10に対する操作入力を行うための入力装置(操作ボタン20(20a−20k)およびタッチパネル22)と、操作説明画面およびゲーム画面を表示するための表示手段である第2LCD18とが設けられる。したがって、ゲーム装置10は、2つの画面(16,18)および2系統の操作部(20,22)を備えている。
【0054】
図3は、この実施例のゲーム装置10の電気的な構成を示すブロック図である。図3に示すように、ゲーム装置10は、CPU50、メインメモリ52、メモリ制御回路54、保存用データメモリ56、プリセットデータ用メモリ58、メモリカードインターフェース(メモリカードI/F)60、メモリカードI/F62、無線通信モジュール64、ローカル通信モジュール66、リアルタイムクロック(RTC)68、電源回路70、およびインターフェース回路(I/F回路)72、第1GPU(Graphics Processing Unit)74、第2GPU76、第1VRAM(Video RAM)78、第2VRAM80、およびLCDコントローラ82等の電子部品を備えている。これらの電子部品(回路コンポーネント)は、電子回路基板上に実装されて、下側ハウジング14(または上側ハウジング12でもよい)内に収納される。
【0055】
CPU50は、所定のプログラムを実行するための情報処理手段である。この実施例では、所定のプログラムは、ゲーム装置10内のメモリ(たとえば保存用データメモリ56)やメモリカード26および/または28に記憶されており、CPU50は、当該所定のプログラムを実行することによって、後述するゲーム処理を実行する。
【0056】
なお、CPU50によって実行されるプログラムは、ゲーム装置10内のメモリに予め記憶していてもよいし、メモリカード26および/または28から取得してもよいし、他の機器と通信することによって当該他の機器から取得してもよい。
【0057】
CPU50には、メインメモリ52、メモリ制御回路54、およびプリセットデータ用メモリ58が接続される。また、メモリ制御回路54には、保存用データメモリ56が接続される。メインメモリ52は、CPU50のワーク領域やバッファ領域として用いられる記憶手段である。すなわち、メインメモリ52は、上記ゲーム処理に用いられる各種データを記憶(一時記憶)したり、外部(メモリカード26および28や他の機器等)から取得されるプログラムを記憶したりする。この実施例では、メインメモリ52として、たとえばPSRAM(Pseudo−SRAM)を用いる。保存用データメモリ56は、CPU50によって実行されるプログラムや内側カメラ32および外側カメラ34によって撮像された画像のデータ等を記憶(保存)するための記憶手段である。この保存用データメモリ56は、不揮発性の記憶媒体によって構成されており、たとえば、NAND型フラッシュメモリを用いることができる。メモリ制御回路54は、CPU50の指示に従って、保存用データメモリ56に対するデータの読み出しおよび書き込みを制御する。プリセットデータ用メモリ58は、ゲーム装置10において予め設定される各種パラメータ等のデータ(プリセットデータ)を記憶するための記憶手段である。プリセットデータ用メモリ58としては、SPI(Serial Peripheral Interface)バスによってCPU50と接続されるフラッシュメモリを用いることができる。
【0058】
メモリカードI/F60および62は、それぞれCPU50に接続される。メモリカードI/F60は、コネクタに装着されたメモリカード26に対するデータの読み出しおよび書き込みを、CPU50の指示に応じて行う。また、メモリカードI/F62は、コネクタに装着されたメモリカード28に対するデータの読み出しおよび書き込みを、CPU50の指示に応じて行う。この実施例では、内側カメラ32および外側カメラ34によって撮像された画像に対応する画像データや他の装置から受信された画像データがメモリカード26に書き込まれたり、メモリカード26に記憶された画像データがメモリカード26から読み出されて保存用データメモリ56に記憶されたり、他の装置へ送信されたりする。また、メモリカード28に記憶された各種プログラムが、CPU50によって読み出されて実行されたりする。
【0059】
なお、ゲームプログラムは、メモリカード28等の外部記憶媒体を通じてゲーム装置10に供給されるだけでなく、有線または無線の通信回線を通じてゲーム装置10に供給されてもよい。また、ゲームプログラムは、ゲーム装置10内部の不揮発性記憶装置に予め記録されていてもよい。さらに、ゲームプログラムを記憶する情報記憶媒体としては、上記不揮発性記憶装置に限らず、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体でもよい。
【0060】
無線通信モジュール64は、たとえばIEEE802.11.b/gの規格に準拠した方式により、無線LANに接続する機能を有する。また、ローカル通信モジュール66は、所定の通信方式により同種のゲーム装置との間で無線通信を行う機能を有する。無線通信モジュール64およびローカル通信モジュール66は、CPU50に接続される。CPU50は、無線通信モジュール64を用いてインターネットを介して他の機器との間でデータを送受信したり、ローカル通信モジュール66を用いて同種の他のゲーム装置との間でデータを送受信したりすることができる。
【0061】
また、CPU50には、RTC68および電源回路70が接続される。RTC68は、時間をカウントしてCPU50に出力する。たとえば、CPU50は、RTC68によって計時された時間に基づいて、現在時刻(日付)等を計算することもできる。電源回路70は、ゲーム装置10が有する電源(典型的には電池であり、下側ハウジング14に収納される)から供給される電力を制御し、ゲーム装置10の各回路コンポーネントに電力を供給する。
【0062】
また、ゲーム装置10は、マイク84およびアンプ86を備えている。マイク84およびアンプ86は、それぞれI/F回路72に接続される。マイク84は、ゲーム装置10に向かって発声ないし発生されたユーザの音声ないし音(拍手や手拍子など)を検知して、当該音声ないし音を示す音声信号をI/F回路72に出力する。アンプ86は、I/F回路72から与えられる音声信号を増幅してスピーカ(図示せず)に与える。I/F回路72は、CPU50に接続される。
【0063】
また、タッチパネル22は、I/F回路72に接続される。I/F回路72は、マイク84およびアンプ86(スピーカ)の制御を行う音声制御回路と、タッチパネル22の制御を行うタッチパネル制御回路とを含む。音声制御回路は、音声信号に対するA/D変換およびD/A変換を行ったり、音声信号を所定の形式の音声データに変換したりする。タッチパネル制御回路は、タッチパネル22からの信号に基づいて所定の形式のタッチ位置データを生成してCPU50に出力する。たとえば、タッチ位置データは、タッチパネル22の入力面に対して入力が行われた位置の座標を示すデータである。
【0064】
なお、タッチパネル制御回路は、タッチパネル22からの信号の読み込み、および、タッチ位置データの生成を所定時間に1回の割合で行う。CPU50は、I/F回路72を介して、タッチ位置データを取得することにより、タッチパネル22に対して入力が行われた位置を知ることができる。
【0065】
操作ボタン20は、上記の各操作ボタン20a−20kによって構成され、CPU50に接続される。操作ボタン20からCPU50へは、各操作ボタン20a−20kに対する入力状況(押下されたか否か)を示す操作データが出力される。CPU50は、操作ボタン20からの操作データを取得し、取得した操作データに応じた処理を実行する。
【0066】
内側カメラ32および外側カメラ34は、それぞれCPU50に接続される。内側カメラ32および外側カメラ34は、CPU50の指示に応じて画像を撮像し、撮像した画像に対応する画像データをCPU50に出力する。この実施例では、CPU50は、内側カメラ32および外側カメラ34のいずれか一方に対して撮像指示を行い、撮像指示を受けたカメラ(32,34)が画像を撮像して画像データをCPU50に送る。
【0067】
第1GPU74には、第1VRAM78が接続され、第2GPU76には、第2VRAM80が接続される。第1GPU74は、CPU50からの指示に応じて、メインメモリ52に記憶されている表示画像を生成するためのデータに基づいて第1の表示画像を生成し、第1VRAM78に描画する。第2GPU76は、同様にCPU50からの指示に応じて第2の表示画像を生成し、第2VRAM80に描画する。第1VRAM78および第2VRAM80は、LCDコントローラ82に接続されている。
【0068】
LCDコントローラ82は、レジスタ82aを含む。レジスタ82aは、CPU50からの指示に応じて、「0」または「1」の値を記憶する。LCDコントローラ82は、レジスタ82aの値が「0」である場合には、第1VRAM78に描画された第1の表示画像を第2LCD18に出力し、第2VRAM80に描画された第2の表示画像を第1LCD16に出力する。また、レジスタ82aの値が「1」である場合には、第1VRAM78に描画された第1の表示画像を第1LCD16に出力し、第2VRAM80に描画された第2の表示画像を第2LCD18に出力する。この実施例では、CPU50は、内側カメラ32および外側カメラ34で撮影された画像に対応する顔(肌色領域)のシルエットおよびゲーム画面を第1LCD16に表示させ、所定の処理によって生成した操作説明画面やゲーム画面などを第2LCD18に表示させる。
【0069】
図示は省略するが、たとえば、第2LCD18には上記操作説明画面として、撮影指示ボタン説明画像、カメラ切替ボタン説明画像、ズーム指示ボタン説明画像、および表示画像選択ボタン説明画像等が表示される。撮影指示ボタン説明画像は、撮影指示を行うための操作ボタン20の位置を示す画像である。カメラ切替ボタン説明画像は、カメラ切替指示を行うための操作ボタン20の位置を示す画像である。ここで、カメラ切替指示とは、内側カメラ32および外側カメラ34のうちで、撮像を行うカメラを切り替える指示である。ズーム指示ボタン説明画像は、ズーム変更指示を行うための操作ボタン20の位置を示す画像である。ここで、ズーム変更指示は、第1LCD16に表示される画像を拡大/縮小する指示である。表示画像選択ボタン説明画像は、表示変更指示を行うための操作ボタン20の位置を示す画像である。ここで、表示画像選択指示とは、ゲーム装置10に保存されている保存画像を、第1LCD16に表示する場合に、この第1LCD16に表示する保存画像を選択する指示である。
【0070】
図4には、この実施例のゲーム装置10を用いて、仮想ゲーム(アクションゲーム)をプレイする場合に、第1LCD16に表示されるゲーム画面100の例が示される。図4(A)および図4(B)に示すゲーム画面100では、そのほぼ中央に、人間の唇を模したオブジェクト(唇オブジェクト)102が表示される。また、唇オブジェクト102の下方には、パンを模したオブジェクト(パンオブジェクト)104が表示される。
【0071】
この仮想ゲームでは、ユーザないしプレイヤが、パンを食べるように、口を開閉すると、それを内側カメラ32で撮影した画像に基づいて検出し、ゲーム画面100に表示された唇オブジェクト102を開閉させ、パンオブジェクト104を食べる様子が表現される。たとえば、制限時間内に、パンオブジェクト104を食べ切った場合には、ゲームクリアとなるが、制限時間内に、パンオブジェクト104を食べ切れなかった場合には、ゲームオーバになる。
【0072】
図4(A)および図4(B)に示すように、ユーザの顔すなわち肌色が撮影画像から抽出され、抽出された肌色の領域がシルエット106でゲーム画面100に表示されている。この実施例では、ユーザの顔が認識されているか否か、およびユーザの顔が認識されている場合には、その大きさ(ゲーム画面100(内側カメラ32)とユーザの顔との距離)が適切であるか否かが、シルエット106の形状および大きさによってユーザに報知される。
【0073】
なお、図4および図5に示すように、ほぼ楕円形状で、ゲーム画面(100,200)に収まる大きさであれば、認識されているユーザの顔は、開発者ないしプログラマが意図した姿勢ないし状態であると言える。
【0074】
ただし、この実施例では、図5に示すように、第1LCD16の表示領域に特定の領域(特定領域)110を設定し、その特定領域110を4画素単位(2×2の格子毎)で肌色か否かを検出し、格子の総数(この実施例では、24×56÷4=338)のうち、肌色と検出された格子の数の割合が所定値(たとえば、35%)以上であるか否かで、ユーザの顔を正しく認識しているかどうかを判定するようにしてある(肌色判定処理)。つまり、ゲーム画面(第1LCD16)ないし内側カメラ32に対するユーザの顔(頭部)の位置(前後方向および左右方向の位置)が、プログラマないし開発者が意図したプレイ状態に適切な位置であるかどうかを判断するのである。
【0075】
なお、撮影画像から肌色を抽出する方法(肌色の抽出処理)については後で詳細に説明することにする。同じく、肌色の抽出処理に使用する閾値の調整処理についても後で詳細に説明することにする。
【0076】
また、図5に示すように、第1LCD16の座標系は、その表示領域の左上の頂点を原点Oとし、図面の右方向がX軸のプラス方向であり、図面の下方向がY軸のプラス方向である。以下、この実施例において同じである。
【0077】
つまり、画面中央付近に、ユーザの顔が有るか否かを判定するのである。ここで、ユーザの顔が画面中央付近に存在しない場合には、ユーザの口もパンオブジェクト104の近くに無いと判断して、口の開閉を検出しない。一方、ユーザの顔が画面中央付近に存在する場合には、ユーザの口もパンオブジェクト104の近くに有ると判断して、口の開閉を検出する。
【0078】
特定領域110は、第1LCD16の画面(表示領域)の中心を基準に、左右に12画素(ドット)の長さを有し、上下に28画素の長さを有する長方形で規定される。ただし、これは一例であり、特定領域110の位置および大きさ(形状)は、ゲームの種類などによって任意に設定可能である。
【0079】
また、ゲーム中では、内側カメラ32で撮影した画像から、ユーザの特徴点が検出され、その特徴点に基づいて、ユーザの顔を認識したり、ユーザの特定の表情(顔の動き)を検出したりするようにしてある。ただし、肌色領域のみならず、特徴点に基づいて、ユーザの顔を認識するのは、顔以外の肌色領域を、誤って顔と認識してしまうような誤動作を防止するためである。
【0080】
ここで、具体的な口の開閉についての判定処理について説明することにする。図6は、内側カメラ32によって撮影されたユーザの顔画像およびその特徴点Pi(i=1,2,…,54,55)を示す図解図である。ただし、図7に示すように、メインメモリ52に展開される画像をカメラ座標系で示し、また、画像を展開する領域(展開領域)150は、第1LCD16の表示領域の大きさに相当する大きさで、メインメモリ52に確保される。この展開領域150の左上の頂点がカメラ座標の原点Oである。また、カメラ座標系では、図面の右方向がX軸のプラス方向であり、図面の下方向がY軸のプラス方向である。また、図6および図7に示す顔画像は、内側カメラ32によって撮影されたユーザの顔画像であり、その顔画像の鏡像が展開領域150に展開される。
【0081】
なお、図7では、図面の都合上、図6に示した特徴点Piを省略し、顔画像のみを記載してある。
【0082】
まず、特徴点Piのうち、上唇の上端中央の特徴点P31の座標(X1, Y1)と、上唇の下端中央の特徴点P35の座標(X2, Y2)との中点(上唇の中点)LipUの座標(LipU_X, LipU_Y)を算出するとともに、下唇の上端中央に特徴点P38の座標(X3, Y3)と、下唇の下端中央の特徴点P41の座標(X4, Y4)との中点(下唇の中点)LipDの座標(LipD_X, LipD_Y)を算出する。また、これら2つの中点LipU, LipDの各軸方向についての差分(唇の差分)(Lip_dX, Lip_dY)を算出する。ただし、唇の差分(Lip_dX, Lip_dY)は、絶対値であり、数1に従って算出される。
【0083】
[数1]
Lip_dX=|LipU_X-LipD_X|
Lip_dY=|LipU_Y-LipD_Y|
また、特徴点Piのうち、左目の中心(瞳中央)の特徴点P17の座標(X5, Y5)と、左目の上端中央(上瞼中央)の特徴点P13の座標(X6, Y6)との中点(左目の中点)EyeLの座標(EyeL_X, EyeL_Y)を算出する。同様に、特徴点Piのうち、右目の中心(瞳中央)の特徴点P24の座標(X7, Y7)と、右目の上端中央(上瞼中央)の特徴点P20の座標(X8, Y8)との中点(右目の中点)EyeRの座標(EyeR_X, EyeR_Y)を算出する。また、これら2つの中点EyeL, EyeRの各軸方向についての差分(目の差分)(Eye_dX, Eye_dY)を算出する。ただし、目の差分(Eye_dX, Eye_dY)は、絶対値であり、数2に従って算出される。
【0084】
[数2]
Eye_dX=|EyeL_X-EyeR_X|
Eye_dY=|EyeL_Y-EyeR_Y|
続いて、数3−数7を満たすか否かを判定する。これは、開発者ないしプログラマが意図するプレイ状態と異なる態様でゲームをプレイしている場合を排除するためである。ただし、“||”はオア(∪)を意味する。
【0085】
[数3]
(LipU_X<16 || LipU_X>240 || LipU_Y<16 || LipU_Y>176)
(LipD_X<16 || LipD_X>240 || LipD_Y<16 || LipD_Y>176)
(EyeL_X<16 || EyeL_X>240 || EyeL_Y<16 || EyeL_Y>176)
(EyeR_X<16 || EyeR_X>240 || EyeR_Y<16 || EyeR_Y>176)
[数4]
Lip_dX>64
[数5]
Lip_dY>96
[数6]
Eye_dX>96
[数7]
Eye_dY>24
これら数3−数7のいずれか1つでも満たす場合には、誤検出、或いは、開発者等が想定するプレイ状態で無いと判断して、今回の口の開閉判定処理を無効にする。具体的には、数3のいずれかを満たす場合には、特徴点Piが画面の端に寄り過ぎていると判断される。つまり、ユーザの唇や目が画面の端に寄り過ぎているのである。このような場合には、誤検出、或いは開発者等が想定するプレイ状態で無いと判断される。
【0086】
数4を満たす場合には、上下唇が左右にずれ過ぎていると判断される。このような場合には、誤検出、或いはユーザの顔が画面(第1LCD16)に接近し過ぎているなど、開発者等が想定するプレイ状態では無いと判断される。また、数5を満たす場合には、上下唇が上下に開き過ぎていると判断される。このような場合には、誤検出、或いはユーザの顔が画面(第1LCD16)に接近し過ぎているなど、開発者が想定するプレイ状態では無いと判断される。
【0087】
数6を満たす場合には、左右の目が離れ過ぎていると判断される。このような場合には、誤検出、或いはユーザの顔が画面(第1LCD16)に接近し過ぎているなど、開発者等が想定するプレイ状態ではないと判断される。また、数7を満たす場合には、左右の目が上下にずれ過ぎていると判断される。このような場合には、誤検出、或いはユーザの顔が画面(第1LCD16)に接近し過ぎているなど、開発者等が想定するプレイ状態では無いと判断される。
【0088】
肌色判定処理により、ユーザの顔(肌色領域)を正しく認識し、かつ、上記数3ないし数7のいずれも満たさない場合には、開発者等が意図したプレイ状態であると判断して、口の開閉を判断する。数8を満たす場合には、ユーザが口を閉じていると判断し、一方、数9を満たす場合には、ユーザが口を開いていると判断する。ただし、ユーザが口を開いた後に、口を閉じたと判断されたときに、パンオブジェクト104が唇オブジェクト102によって一回食べられる。
【0089】
[数8]
Lip_dY<16
[数9]
Lip_dY≧16
このようにして、図4(A)および図4(B)に示すゲームでは、肌色判定処理によって、ユーザの顔(肌色領域)のシルエット106がパンオブジェクト104付近に有ると判断されると、特徴点Piに基づいて、開発者等の意図したプレイ状態であるかどうかが判断される。ここで、意図したプレイ状態である場合には、さらに、特徴点Piに基づいて、ユーザが口を開閉したかどうかが判定される。そして、ユーザが口を開閉したと判定されと、これに応じて、パンを食べる様子のゲーム画面100(図示せず)が第1LCD16に表示される。したがって、たとえば、図4(A)に示す状態で、唇オブジェクト102が開閉し、このとき、パンオブジェクト104が唇オブジェクト102によってかじられ、図4(B)に示すように、パンオブジェクト104の一部が無くなった様子のゲーム画面100が表示される。
【0090】
ただし、図4(B)に示すゲーム画面100では、パンオブジェクト104がかじられた後に、さらに、ユーザの口が開閉したことが検出され、これに応じて、唇オブジェクト102が開いて、パンオブジェクト104をかじろうとしている様子が示される。
【0091】
この実施例では、パンを複数回(たとえば、2回)に分けて、食べるようにしてあるため、制限時間内に複数回ユーザの口の開閉が検出されると、パンオブジェクト104が全部無くなることにより、すなわち所定の目標を達成することにより、ゲームクリアとなる。ただし、制限時間内に複数回ユーザの口の開閉が検出されない場合には、パンオブジェクト104が無くならず、所定の目標を達成できずに、ゲームオーバとなる。
【0092】
図8(A)および図8(B)には、他の仮想ゲーム(アクションゲーム)のゲーム画面200の例が示される。図8(A)に示すように、ゲーム画面200のほぼ中央には、赤ちゃんを模したオブジェクト(赤ちゃんオブジェクト)202が表示され、その左方に兎のぬいぐるみを模したオブジェクト(ぬいぐるみオブジェクト)204が表示される。また、ゲーム画面200の左上部には、ユーザに現在行うべき動作(身振り手振り)を指示するための指示画像表示領域206が設けられる。そして、ゲーム画面200には、ユーザの顔(肌色領域)のシルエット208が表示される。
【0093】
この図8(A)および図8(B)に示すゲーム画面200を用いた仮想ゲームでは、ユーザが、制限時間内に、いわゆる「いないいないあばあ」の動作に成功すると、赤ちゃんオブジェクト202をあやすことができ、これによって所定の目的を達成し、ゲームクリアとなる。しかし、ユーザが、「いないいないばあ」の動作に失敗し、制限時間を超えると、すなわち、制限時間内に、赤ちゃんオブジェクト202をあやすことができなければ、ゲームオーバとなる。
【0094】
このような仮想ゲームにおいても、肌色判定処理によって、ユーザの顔を正しく認識しているかどうかを判断し、正しく認識している場合には、さらに、ユーザの顔の特徴点Piに基づいて、ユーザの顔の一部を認識することにより、「いないいないばあ」の動作を検出する。
【0095】
まず、この仮想ゲームでは、上述したように、肌色判定処理を行うが、図5に示した特定領域110とは、大きさ(範囲)が異なる特定領域110´が設定される。具体的には、図9に示すように、第1LCD16の画面(表示了領域)の中心を基準として、左右に28画素を有し、上方向に28画素を有し、下方向に12画素を有するように、特定領域110´が設定される。これは、ユーザが手で自身の顔を覆うとき、目だけを隠す場合と、目、鼻および口を隠す場合とのように、ユーザ毎に動作が異なるためである。
【0096】
また、このように、肌色領域を判定するのは、第1LCD16の画面の中央付近では、ユーザの顔が見えている状況においては、肌色が多少なりと分布しているはずであり、また、顔を素手で覆うことを想定しているため、顔を素手で覆った場合にも肌色が分布すると考えられるからである。
【0097】
このように、肌色領域を判定するのは、特徴点Piのみによって顔を認識するようにすると、顔を画面の外(内側カメラ32で撮影できないところ)に移動させて、顔が映らないようにすることにより、顔を手で覆った状況と同じ状況(すなわち特徴点Piが検出されない状況)が作れてしまい、そのようなプレイ状態は開発者等が意図する態様ではないからである。
【0098】
肌色判定処理は、図5を用いて説明した場合と同様であり、特定領域110´を2×2画素の格子単位で肌色か否かを検出し、格子の総数(この実施例では、56×40÷4=560)のうち、肌色を検出された格子の数の割合が所定値(たとえば、35%)以上であるか否かで、ユーザの顔を正しく認識しているかどうかを判定するようにしてある。
【0099】
肌色判定処理により、ユーザが顔を覆っている状態を検出すると、次に、特徴点Piに基づいて、上述したように、左右のそれぞれの目に対して、中点EyeL, EyeRを算出するとともに、差分(Eye_dX, Eye_dY )を算出する。ただし、これらの計算に用いる特徴点Piおよび数式(数1,数2)は上述したとおりであるため、重複した説明は省略する。
【0100】
次に、数10を満たすか否かが判断される。数10の4つの条件のうち、3つ以上を満たす場合には、ユーザの顔をプログラマ等が意図した大きさおよび位置で検出できたと判断する。ただし、“&&”はアンド(∩)を意味する。
【0101】
[数10]
(EyeL_X>16 && EyeL_X<240)
(EyeL_Y>16 && EyeL_Y<176)
(EyeR_X>16 && EyeR_X<240)
(EyeR_Y>16 && EyeR_Y<176)
ユーザの顔を検出できている状態とユーザの顔を検出できていない状態とに基づいて、ユーザが顔を手で覆っている(隠している)かどうかを判断するようにしてある。この実施例では、評価値(変数EV)を用いて、その判断を行うようにしてある。ただし、変数EVは0から100の間で変化する整数である。また、変数EVが0に近いほど、ユーザの顔が隠されておらず、変数EVが100に近いほど、ユーザの顔が隠されていると評価するように、変数EVを変化させるようにしてある。
【0102】
ユーザが顔を隠しているかどうかの評価の開始時には、変数EVは0に設定される。次に評価の開始からユーザが顔を隠したと判断されるまで、顔を検出できている状態が検出されると、数11に従って変数EVが減算され、顔を検出できていない状態が検出されると、数12に従って変数EVが加算される。ただし、上述したように、変数EVは、下限値0および上限値100を超えないように変化される。また、減算される値および加算される値は経験的に得られた値であり、これに限定される必要はない。
【0103】
[数11]
EV=EV-12
[数12]
EV=EV+16
数11および数12に従って変数EVが変化され、変数EVすなわち評価値が所定値(この実施例では、70)を超えると、ユーザが顔を隠したと判断される。続いて、ユーザが顔を隠してから次に顔を見せるまで、顔を検出できている状態が検出されると、数13に従って変数EVが減算され、顔を検出できてない状態が検出されると、数14に従って変数EVが加算される。ただし、上述したように、変数EVは、下限値0および上限値100を超えないように変化される。また、減算される値および加算される値は経験的に得られた値であり、これに限定される必要はない。
【0104】
[数13]
EV=EV-16
[数14]
EV=EV+14
数13および数14に従って変数EVが変化され、変数EVすなわち評価値が所定値(この実施例では、30)以下になると、ユーザが顔を見せたと判断される。
【0105】
このようにして、ユーザが顔を隠した後に、顔を見せると、「いないいないばあ」の動作に成功したと判断する。上述したように、ユーザが「いないいないばあ」の動作を制限時間内に成功すれば、赤ちゃんオブジェクト202をあやすことができ、ゲームクリアとなる。
【0106】
ここで、図4および図8に示した仮想ゲームでは、いずれも肌色判定処理を実行するようにしてある。ただし、肌色は、ユーザ毎に個体差があり、しかも、ゲームをプレイする時間や場所などの環境によっても変化するため、撮影画像から肌色を抽出するための処理に用いられる閾値(色相下限、色相上限、彩度下限、彩度上限、輝度下限、輝度上限)が予め調整される。この調整処理は、ゲームの本編を開始するのに先立って、ユーザを撮影した画像を用いて行われる。ただし、以下に説明する調整処理は、ゲームの本編の開始前のみならず、ゲームの内容(面やシーンなど)が変化するなどの要所において、実行されるようにしてもよい。
【0107】
たとえば、ゲームの本編の開始に先立って、図10(A)に示すような調整画面300が第1LCD16に表示される。調整画面300には、ユーザの顔を撮影した画像(顔画像)を表示するための位置および大きさを指示するための顔型の指標(顔型指標)302およびユーザの手を撮影した画像(手画像)を表示するための位置および大きさを指示するための手型の指標(手型指標)304が表示される。
【0108】
この実施例の仮想ゲームをプレイする場合には、ユーザは、図11に示すように、ゲーム装置10を机のような台上に置き、水平面(下側ハウジング14)に対して斜めになるように、上側ハウジング12を傾けるようにする。したがって、ユーザは、内側カメラ32によって撮影された自身の顔画像が顔型指標302に収まるように、ユーザの顔(頭部)または体全体とゲーム装置12(内側カメラ32)との距離(前後の位置)や左右方向(水平方向)の位置を調整するともに、顔(頭部)の上下方向の位置や顔(頭部)の傾きも調整する。図示は省略するが、同様に、ユーザは、内側カメラ32によって撮影された自身の右手(手のひら)の画像が手型指標304に収まるように、ユーザの右手とゲーム装置12(内側カメラ32)との距離(前後の位置)や水平方向位置を調整するとともに、右手の上下方向の位置や右手の手のひらの傾きも調整する。
【0109】
このような調整画面300を用いて、ゲーム装置10は、ユーザの記念撮影を実行し、複数(この実施例では、3〜4枚)の撮影画像を取得する。この実施例では、ゲーム装置10からの音声ガイドにより、撮影タイミングが指示され、撮影タイミングとその1秒程度前までの数フレーム毎の撮影画像が取得される。具体的には、記念撮影を行う旨のメッセージがゲーム装置10のスピーカから出力され、次いで、「3,2,1,パシャ」という、カウントダウンする音声およびシャッタ音がスピーカから出力される。ただし、この実施例では、複数枚の撮影画像を得るために、「1」をカウントした後シャッタ動作が実行されるまでの間に、たとえば、4フレーム(フレーム:画面更新単位(1/60秒)毎に、内側カメラ32からの撮影画像を保存用データメモリ56に保存するようにしてある。つまり、1秒が約16フレームに相当するため、3〜4枚の撮影画像が取得されるのである。これらの複数枚の撮影画像のデータ(以下、「評価用画像データ」という)を用いて、上述した閾値の調整を実行する。ただし、肌色判定処理のみならず、閾値の調整処理および後述する肌色抽出処理も、CPU50が実行する。
【0110】
閾値の調整処理では、まず、各閾値に初期値(静的)が与えられる。最初の評価用画像データについては、図12に示す肌色判定の閾値の表に従う初期値が与えられるが、次回以降の評価用画像データについては、前回までの調整処理によって収束した閾値(最適値)が初期値として与えられる。また、図12からも分かるように、調整処理により変化し得る閾値の最大値および最小値(いずれも静的)がそれぞれの初期値に対応づけて設定されている。
【0111】
ただし、色相については、360の角度を256(0以上256未満)段階に変換した値で処理を行う。また、色相は循環するため、0と256とは等価である。よって、図12に示す色相の初期値の場合、色相下限が220であり、色相上限が25であるので、肌色としての抽出範囲は、220,221,222,…,254,255,0,1,…,24,25となる。
【0112】
なお、実際には、色相のみならず、彩度および輝度についても条件を満たす必要があるため、色相、彩度および輝度のすべてが抽出範囲に属する場合に、肌色と判定される。
【0113】
また、所定のポーズ、この実施例では、図10(A)に示した調整画面300に表示されている顔型指標302と手型指標304とのそれぞれに顔および右手の手のひらが納まる格好に対応したデータ(以下、「判定用データ」という)を静的に持っている。たとえば、判定用データは、ゲーム装置10に装着されたメモリカード28からロードされ、メインメモリ52に記憶される。具体的には、判定用データは、第1LCD16の各画素が属性A,B,Cのいずれであるかを示すデータ(2ドット毎の精度のデータである)である。ここで、属性Aは肌色であるべきことを意味し、属性Bは肌色であるべきでないことを意味し、そして、属性Cはどちらでもよい(評価に関係ない)ことを意味する。
【0114】
図10(B)に戻って、図10(A)に示した調整画面300において撮影画像が表示される場合の属性A,属性Bおよび属性Cで区別される画素の分布が示される。属性Aで示される画素は、領域310で示される。属性Bで示される画素は、領域312で示される。そして、属性Cで示される画素は、第1LCD16の表示領域のうち、領域310および領域312以外の領域314で示される。
【0115】
評価用画像データを2×2画素の格子毎に、対応する画素の判定用データを参照しながら、次の2つの値Q,Rを算出し、この値Q,Rから評価値Xcrtを算出する。ただし、値Qは、着目する評価用画像データの画素が肌色であり、対応する画素の判定用データが属性Aを示す場合の格子の数である。言い換えると、値Qは、正しく肌色が抽出されているとの良い評価が得られている格子の数である。一方、値Rは、着目する評価用画像データの画素が肌色であるが、対応する画素の判定用データが属性Bを示す場合の格子の数である。言い換えると、ノイズや誤った抽出であるとの悪い評価が得られている格子の数である。そして、評価値Xcrtは、値Qから値Rを減算した値であり、大きいほど、より正しく肌色を抽出できていると言える。
【0116】
このような評価は、最初の評価用画像データについては、各閾値を基準値に設定して行われる。そして、各閾値に対応する評価値Xcrtが識別可能にメインメモリ52に記憶(一時記憶)される。次に、各閾値を最小値および最大値に設定した場合についての評価が閾値毎に行われる。
【0117】
たとえば、色相下限の閾値を図12に示した最小値に設定し、上述のようにして、評価値Xminを算出する。評価値Xminが前回の評価値Xpre(ここでは、評価値Xcrt)を上回っているかどうかを判断する。評価値Xminが前回の評価値Xpreを超えている場合には、調整の方向が正しいと判断して、現在の閾値と現在の最適値(ここでは、基準値)との中間の値を新たな閾値として設定し、再度上述した評価を行い、より評価の高かった方の閾値を最適値として採用する。つまり、閾値は、最小値または最小値と現在の最適値(ここでは、基準値)との中間の値に設定されるのである。
【0118】
一方、評価値Xminが前回の評価値Xpreを下回る場合には、調整の方向が逆であったと判断して、色相下限の閾値を図12に示した最大値に設定し、上述したようにして、評価値Xmaxを算出する。評価値Xmaxが前回の評価値Xpre(ここでは、評価値Xcrt)を上回っているかどうかを判断する。評価値Xmaxが前回の評価値Xpreを超えている場合には、現在の閾値と現在の最適値との中間の値を新たな閾値として設定し、再度上述した評価を行い、より評価の高かった方の閾値を最適値として採用する。しかし、評価値Xmaxも前回の評価値Xpreを下回る場合には、もともとの閾値が最適値であったと判断して、閾値を変更しない。
【0119】
他の色相上限、彩度下限、彩度上限、輝度下限、輝度上限についても上記の手順に従って閾値が調整(選択)される。また、次回以降の評価用画像データについては、前回までの調整処理によって選択(収束)された閾値(最適値)が初期値として与えられる。そして、すべての評価用画像データについて、調整処理が実行され、最終的に選択された閾値(最適値)が次に説明する肌色の抽出処理において用いられる。
【0120】
このように、この実施例では、ゲーム開始前にプレイヤを撮影した写真画像を用いて、現在の環境(光のあたり具合など)におけるプレイヤの肌色を判定するための閾値を調整する。これにより、ゲーム中の肌色検出を正確に行うことができる。
【0121】
また、この実施例では、複数の写真画像を用いて閾値の調整処理を行う。これにより、閾値を正確に調整することができ、また、n枚目の写真画像により最適化された閾値をもとにn+1枚目の写真画像についての評価処理を行うため効率的である。
【0122】
さらに、この実施例では、色相、彩度、輝度のそれぞれについて閾値を調整するため、そのときの環境における閾値を正確に設定することができる。なお、色相と彩度のみを調整してもよいし、色相と輝度のみを調整してもよい。
【0123】
さらにまた、肌色であるべき領域のみならず、肌色以外であるべき領域を判定するので、正確に閾値を設定することができる。
【0124】
上述したように、肌色を抽出する場合には、まず、内側カメラ32によって撮影された画像(撮影画像)から、肌色の抽出処理用のデータが構築される。ここで、撮影画像は、RGB(各成分5ビット)の形式でAPIにより取得される。ただし、撮影画像は、第1LCD16の表示領域と同じ256×192ドットで構成される。
【0125】
肌色の抽出処理用のデータ(抽出処理用データ)は、8×8画素、4×4の画素、2×2画素の格子状の領域に対応して生成される。この実施例では、第1LCD16の表示領域は256×192ドットであるため、この表示領域を8×8画素の格子状の領域に分割する場合には、32×24個の格子が生成される。8×8画素の格子に分割する場合の例が、図13(A)に示される。図13(A)では(図13(B),図14も同じ)、8×8画素の格子を太線枠で示してある。ただし、図13(A)では(図13(B),図14も同じ)、簡単のため、第1LCD16の表示領域を24×16画素で示してある。また、図13および図14では、最も小さい格子(四角枠)が1画素(ドット)に相当する。同様に、表示領域を4×4画素の格子状の領域に分割する場合には、64×48個の格子が生成される。4×4画素の格子に分割する場合の例が、図13(B)に示される。さらに、表示領域を2×2画素の格子状の領域に分割する場合には、128×96個の格子が生成される。2×2画素の格子に分割する場合の例が、図14に示される。
【0126】
抽出処理用データは、評価値(上述した評価値とは異なる)、状態値および色値の各情報を示す。評価値は、肌色らしさを示す値であり、8ビットのデータで示される。この実施例では、評価値は、0〜64の値および255の値となる。ただし、0〜64で肌色らしさが示され、255は無効であることを意味する。また、評価値が大きいほど、肌色らしいことを意味するようにしてある。
【0127】
状態値は、後述する各処理によって判定した内容(状態)を保持するためのデータであり、16ビットのデータで示される。具体的には、肌色かどうかを示す1ビットの情報、周囲8つの格子のそれぞれについて肌色かどうかを示す8ビットの情報、強制的に自身を肌色とみなすための1ビットのフラグ、強制的に自身を肌色でないとみなすための1ビットのフラグで示され、余分な5ビットが付加される。
【0128】
色値は、RGB555形式で示した16ビットのデータであり、RGBがそれぞれ5ビットの階調で表現され、余分な1ビットが付されたデータである。ただし、撮影画像を格子単位で肌色か否かを評価する際には、色値(RGB555形式)は、輝度、色相および彩度に変換して利用される。
【0129】
次に抽出処理用データの生成について説明する。まず、2×2画素の格子に対して、処理1によって色値を準備する。この実施例では、処理1は、格子(大)に含まれる4つの格子(小)の色値の平均値を算出する。ここでは、2×2画素の格子であるため、2×2画素の格子(大)に含まれる4つの格子(小)のそれぞれは1画素に相当する。
【0130】
なお、この実施例では、処理1では、格子(大)に含まれる4つの格子(小)の色値の平均値を算出するようにしてあるが、4つの格子(小)のうちの左上の格子の色値を採用するようにしてもよい。
【0131】
次に、4×4画素の格子に対して、処理1によって色値を準備する。さらに、8×8画素の格子に対して、処理1によって色値を準備する。ただし、4×4画素の格子に分割した場合には、4×4の格子(大)に含まれる4つの格子(小)のそれぞれは2×2画素の格子を意味する。また、8×8画素の格子に分割した場合には、8×8画素の格子(大)に含まれる4つの格子(小)のそれぞれは4×4画素の格子を意味する。
【0132】
続いて、8×8画素の格子に対して、処理2によって色値を補正する。この実施例では、処理2は、自身の格子を中心とする周囲8つの格子を含む9つの格子に対し、色値に基づく輝度値の中央値を算出し、中央値を有する格子の色値を、自身の格子の色値に変更する。
【0133】
ただし、最外周の格子については、色値の補正は無効化される。また、この実施例では、処理2は、自身の格子と、自身を含む周囲8つの格子との合計9つの格子について、色値に基づく輝度の中央値を求めて、中央値を有する格子の色値を自身の格子の色値に変更(補正)するようにしてあるが、色値は補正しなくてもよい。
【0134】
次に、8×8画素の格子に対して、処理3によって状態値を初期化する。この実施例では、処理3は、上述の閾値の調整処理によって調整された閾値に基づいて各格子が肌色かどうかを判断し、状態値に反映する。具体的には、上述のようにして準備および補正した色値を基に、輝度、色相および彩度のそれぞれが、閾値の範囲内であるか範囲外であるかを選別(判定)する。
【0135】
続いて、8×8画素の格子に対して、処理4によって評価値を初期化する。この実施例では、処理4は、周辺の格子の状態値から、重み付けして評価値に反映する。具体的には、中央の格子の評価値は、対応する位置関係の格子に対して、閾値による判定結果が閾値内である格子を「1」とし、閾値による判定結果が閾値外である格子を「0」として、重み付けの値に掛け合わしたものの総和で算出される。各格子の重み付けの値をWi(iは格子に付した番号:1−9)とし、各格子の閾値による判定結果の値をHiとすると、中央の格子の評価値Yは、数15に従って得られる。
【0136】
[数15]
Y=W1*H1+W2*H2+W3*H3+W4*H4+W5*H5+W6*H6+W7*H7+W8*H8+W9*H9
この実施例では、図15(A)に示すように、自身の格子を中心として、この自身の格子と周囲8つの格子とに対して、重み付けがなされている。ただし、重み付けの値の合計は、「64」である。具体的には、(1),(3),(7)および(9)の格子に対して重み「0」が設定され、(2),(4),(6),(8)の格子に対して重み「10」が設定され、そして、(5)の格子すなわち自身の格子に対して重み「24」が設定される。
【0137】
また、図15(B)には、各格子の閾値による判定結果(処理3の結果)の例が示される。この図15(B)では、閾値の範囲内である格子(3),(5),(6),(8)には、「○」を付してあり、閾値の範囲外である格子(1),(2),(4),(7),(9)には「×」を付してある。
【0138】
したがって、図15(A)および図15(B)に示す例では、中央の格子の評価値Yは、数15に従って、数16に示すように算出される。
【0139】
[数16]
Y=0*0+10*0+0*1+10*0+24*1+10*1+0*0+10*1+0*0=44
このようにして、評価値Yが初期化される。評価値Yが初期化されると、8×8画素の格子に対して、処理5によって評価値を補正する。この実施例では、処理5は、隣接する格子の評価値Yに基づいて、中心の格子の状態値を補正し、評価値に反映させる。
【0140】
具体的には、周囲の8つの格子のそれぞれの評価値Yが20以上であれば、周囲の格子(周辺)は肌色で満たされているとみなし、自身の格子について初期化された評価値Yに拘わらず、自身の格子の評価値Yも肌色とする。つまり、状態値において、強制的に自身の格子を肌色とみなすためのフラグをオンする。
【0141】
一方、周囲の8つの格子のそれぞれの評価値Yが20未満であれば、周囲の格子(周辺)は肌色でないとみなし、自身の格子について初期化された評価値Yに拘わらず、自身の格子の評価値Yも肌色でないとする。つまり、状態値において、強制的に自身の格子を肌色でないとみなすためのフラグをオンする。
【0142】
なお、後述するように、処理5は、4×4画素の格子や2×2画素の格子に対しても実行されるが、より上層(大きい格子)において、強制的に肌色とみなしたり、強制的に肌色でないとみなしたりしている場合には、その上層における結果が優先されることになる。
【0143】
8×8画素の格子に対して、処理5を実行し、状態値が補正されると、処理6を実行することよって、4×4画素の格子の状態値が初期化される。つまり、8×8画素の格子の状態値がそれに含まれる4×4画素の格子のそれぞれの状態値の初期値として設定される。
【0144】
次に4×4画素の格子に対して、処理4によって評価値を初期化する。処理4は上述したとおりであるため、重複した説明は省略する。以下、同様である。さらに、4×4画素の格子に対して、処理5によって状態値が補正され、評価値Yに反映され、そして、処理6によって、2×2画素の格子の状態値が初期化される。つまり、4×4画素の格子の状態値がそれに含まれる2×2画素の格子のそれぞれの状態値の初期値として設定される。
【0145】
続いて、2×2画素の格子に対して、処理4によって評価値を初期化する。そして、2×2画素の格子に対して、処理5によって状態値が補正され、評価値Yに反映される。したがって、2×2画素の格子単位で、その状態値を参照することにより、肌色であるか否かを検出することができる。
【0146】
このように、この実施例では、撮像により取得した画像に対して、まずは、比較的大きいサイズA(上述の例では、8×8)の各分割画像(各格子)に対して、肌色か否かの判定処理、具体的には、色値の輝度、色相および彩度が一定範囲内であることを判定する処理(以下、同じ)を行い、サイズAの各格子について判定結果(上述の例では、「状態値」)を生成する。そして、その後、比較的小さいサイズB(上述の例では、4×4)の各格子について処理を行う。具体的には、まず、サイズAの各格子の判定結果を用いてサイズBの各格子の判定結果を設定する(上述の処理6)。このため、小さいサイズの格子については肌色か否かの判定処理を行う必要が無い。そして、サイズBの各格子の判定結果は周囲の格子の判定結果を用いて補正される(上述の処理4,処理5)。これにより、判定結果はより小さいサイズBの単位で変動することとなって、解像度の高い判定結果が生成される。
【0147】
また、この実施例では、比較的大きいサイズAの格子において、肌色の可能性が高いと設定された格子、上述の例では、「強制的に自身を肌色とみなすための1ビットのフラグ」が設定(オン)された格子については、当該サイズAの格子に含まれる比較的小さいサイズBの格子において肌色でないと判定された場合であっても、サイズAの格子全域について肌色であると判定される。これにより、ノイズを減らすことができる。また、同様に、比較的大きいサイズAの格子において、肌色の可能性が低いと設定された格子、上述の例では、「強制的に自身を肌色でないとみなすための1ビットのフラグ」が設定(オン)については、当該格子内の比較的小さいサイズBの格子において肌色であると判定された場合であっても、サイズAの格子全域について肌色でないと判定される。これにより、ノイズを減らすことができる。
【0148】
図16はメインメモリ52のメモリマップの一例を示す図解図である。図16に示すように、メインメモリ52は、ゲームプログラム記憶領域90およびデータ記憶領域92を含む。ゲームプログラム記憶領域90は、ゲームプログラムを記憶し、ゲームプログラムは、メイン処理プログラム90a、画像生成プログラム90b、画像表示プログラム90c、画像更新プログラム90d、撮影プログラム90e、閾値調整プログラム90f、肌色抽出プログラム90g、第1顔認識プログラム90h、特徴点取得プログラム90iおよび第2顔認識プログラム90jなどによって構成される。
【0149】
メイン処理プログラム90aは、この実施例の仮想ゲームのメイン処理を実行するためのプログラムである。画像生成プログラム90bは、後述する画像データ92aを用いて、第1LCD16または第2LCD18にゲーム画面(100,200など)や操作画面などのゲームに必要な画面を表示するためのゲーム画像を生成するためのプログラムである。画像表示プログラム90cは、画像生成プログラム90bに従って生成されたゲーム画像を第1LCD16または第2LCD18に表示するためのプログラムである。画像更新プログラム90dは、第1LCD16または第2LCD18に表示されたゲーム画面(ゲーム画像)を更新するためのプログラムである。撮影プログラム90eは、ユーザの指示やゲームのイベントなどに従って、内側カメラ32または外側カメラ34で、被写体を撮影するためのプログラムである。通常のデジタルカメラと同様であるため、詳細な説明は省略するが、カメラ(撮影)モードが設定されると、リアルタイム動画像(スルー画像)が取得され、ビューファインダなどとして使用される第1LCD16または第2LCD18にそのスルー画像が表示される。また、ユーザのシャッタ操作またはゲームのイベントなどによって、静止画像の撮影画像が取得され、対応する撮影画像データが保存用データメモリ56に記憶される。
【0150】
閾値調整プログラム90fは、仮想ゲームの本編の開始に先立って、撮影画像に基づいて、肌色抽出処理における肌色判定のための色相、彩度、輝度の閾値を最適値に調整するためのプログラムである。肌色抽出プログラム90gは、撮影画像から2×2画素の格子単位で肌色を抽出するためのプログラムである。第1顔認識プログラム90hは、肌色抽出プログラム90gに従って抽出された肌色の情報に基づいて、予め設定されている特定領域(110,110´)における肌色領域の割合が所定値(35%)を超えているか否かを判断し、所定値を超えている場合には、ユーザの顔を正しく認識していると判定するためのプログラムである。
【0151】
特徴点取得プログラム90iは、一定時間(たとえば、10フレーム)毎に、内側カメラ32によって撮影された撮影画像に対して、エッジ検出等の画像処理を施すことによって、ユーザの顔画像における55個の特徴点Piを取得するためのプログラムである。第2顔認識プログラム90jは、特徴点検出プログラム90iに従って取得された特徴点Piに基づいて、ユーザの顔全体を認識したり、ユーザの顔の一部(この実施例では、口や目)ないしその動き(この実施例では、口の開閉)を認識したりするためのプログラムである。
【0152】
なお、図示は省略するが、ゲームプログラム記憶領域90には、音出力プログラムやバックアッププログラムなども記憶される。音出力プログラムは、ゲームキャラクタの音声や擬声音、効果音、BGMのようなゲームに必要な音を生成および出力するためのプログラムである。バックアッププログラムは、メインメモリ52に記憶されるゲームデータ(途中データ、結果データ)をメモリカード26に記憶(セーブ)するためのプログラムである。
【0153】
図17は、図16に示したデータ記憶領域92の詳細な内容を示す図解図である。この図17に示すように、データ記憶領域92には、画像データ92a、撮影データ92b、特徴点データ92c、上唇抽出座標データ92d、下唇抽出座標データ92e、左目抽出座標データ92f、右目抽出座標データ92g、唇の差分データ92h、目の差分データ92i、設定閾値データ92j、判定用データ92k、色相閾値データ92m、彩度閾値データ92nおよび輝度閾値データ92pなどが記憶される。
【0154】
画像データ92aは、ゲーム画像を生成するためのポリゴンデータやテクスチャデータなどである。撮影データ92bは、内側カメラ32または外側カメラ34で撮影された撮影画像のデータ(撮影画像データ)であり、保存用データメモリ56が読み出して、メインメモリ52に記憶(一時記憶)される。この実施例では、複数枚(たとえば、4枚)分の撮影画像データを記憶することができる。特徴点データ92cは、上述したように、特徴点検出プログラム90iに従って取得された特徴点Piの各々に対応する座標データであり、一定時間(10フレーム)毎に更新される。
【0155】
上唇抽出座標データ92dは、上述したように、特徴点Piに基づいて算出された上唇の中点LipUの座標データである。下唇抽出座標データ92eは、上述したように、特徴点Piに基づいて算出された下唇の中点LipDの座標データである。左目抽出座標データ92fは、上述したように、特徴点Piに基づいて算出された左目の中点EyeLの座標データである。右目抽出座標データ92gは、上述したように、特徴点Piに基づいて算出された右目の中点EyeRの座標データである。
【0156】
唇の差分データ92hは、上述したように、上唇の中点LipUと下唇の中点LipDとの各軸方向における唇の差分(Lip_dX, Lip_dY)についてのデータである。目の差分データ92iは、上述したように、左目の中点EyeLと右目の中点EyeRとの各軸方向における目の差分(Eye_dX, Eye_dY)についてのデータである。
【0157】
設定閾値データ92jは、図12に示した肌色判定の閾値の表についてのデータであり、予めプログラマ等によって生成されたデータである。判定用データ92kは、図10(B)を用いて説明した属性A,B,Cのそれぞれに対応する領域310,312,314を既定するためのデータである。
【0158】
色相閾値データ92mは、上述した閾値調整プログラム90fに従って調整された色相の閾値についての最適値の数値データである。同様に、彩度閾値データ92nは、上述した閾値調整プログラム90fに従って調整された彩度の閾値についての最適値の数値データである。同様に、輝度閾値データ92pは、上述した閾値調整プログラム90fに従って調整された輝度の閾値についての最適値の数値データである。
【0159】
なお、図示は省略するが、データ記憶領域92には、音データのような他のデータが記憶されたり、ゲーム処理に必要なカウンタ(タイマ)やフラグなども設けられたりする。
【0160】
具体的には、図3に示したCPU50が図18に示すゲーム処理を実行する。図示は省略するが、図18に示すゲーム処理(本編)の開始に先立って、上述した閾値の調整処理が実行される。また、図示は省略するが、調整処理の開始と同時或いはほぼ同時に、内側カメラ32による撮影処理が開始される。さらに、図示は省略するが、ゲーム処理が開始されると、特徴点Piの取得処理が一定時間(10フレーム)毎に実行される。これらの処理は、マルチタスクによって実行される。
【0161】
図18に示すように、CPU50は、ゲーム処理を開始すると、ステップS1で、ゲーム初期画面を表示する。たとえば、図4(A)に示したゲーム画面100や図8(A)に示したゲーム画面300が第1LCD16に表示される。これらは、プレイするゲームに応じて異なる。続くステップS3では、撮影画像から肌色を抽出する。ここでは、上述したように、撮影データ92bに含まれる最新の撮影画像データに対応する撮影画像から、肌色が抽出される。
【0162】
次のステップS5では、ユーザの顔を正しく認識しているかどうかを判断する。具体的には、ステップS3で抽出した結果を用いて、特定領域(110,110´)における肌色領域が所定の割合(35%)を超えているかどうかを判断する。ステップS5で“NO”であれば、つまり特定領域(110,110´)における肌色領域が所定の割合以下であれば、ユーザの顔を正しく認識していないと判断して、そのままステップS13に進む。
【0163】
一方、ステップS5で“YES”であれば、つまり特定領域(110,110´)における肌色領域が所定の割合を超えていれば、ユーザの顔を正しく認識していると判断して、ステップS7で、特徴点Piを検出する。ここでは、CPU50は、データ領域92に記憶される特徴点データ92cを検出するのである。続いて、ステップS9では、所定の条件を満たすかどうかを判断する。ここでは、CPU50は、特徴点Piに基づいてユーザの口が開閉したかどうかを判断したり、ユーザの顔(目)を認識していない状態から顔(目)を認識している状態に変化したかどうかを判断したりする。これらの判断は、ゲームの種類によって異なる。また、上述した仮想ゲームの例では、顔全体を認識するような仮想ゲームについては説明していないが、すべての特徴点Pi(顔全体)に基づいて所定の条件を満たすか否かを判定するようなゲーム処理を実行させることも可能である。つまり、CPU50は、ユーザの顔全体が認識されたり、ユーザの顔の一部またはその動きが認識されたりして、所定の条件を満たすかどうかを判断するのである。
【0164】
ステップS9で“NO”であれば、つまり所定の条件を満たしていない場合には、そのままステップS13に進む。一方、ステップS9で“YES”であれば、つまり所定の条件を満たしている場合には、ステップS11で、ゲームクリアかどうかを判断する。ここでは、CPU50は、ゲームクリアの条件を満たしたかどうかを判断するのである。たとえば、上述した仮想ゲームでは、制限時間内に、パンを全部食べたことや「いないいないばあ」に成功したことがゲームクリアの条件に該当する。
【0165】
ステップS11で“YES”であれば、つまりゲームクリアであれば、ステップS17で、ゲームクリア処理を実行して、ゲーム処理を終了する。たとえば、ステップS17では、ゲームをクリアしたことを表現するゲーム画面が表示されたり、効果音が出力されたり、得点が加算されたり、レベルが上昇されたりするなどの様々な演出が実行される。
【0166】
一方、ステップS11で“NO”であれば、つまりゲームクリアでなければ、ステップS13で、ゲームオーバであるかどうかを判断する。ここでは、CPU50は、ゲームオーバの条件を満たしたかどうかを判断するのである。たとえば、上述した仮想ゲームでは、制限時間内に、パンを食べ切れなかったことや「いないいないばあ」に成功しなかったことがゲームオーバ条件に該当する。
【0167】
ステップS13で“NO”であれば、つまりゲームオーバでなければ、ゲームを続行するべく、ステップS15で、ゲーム画面(100,200)を更新してから、ステップS3に戻る。詳細な説明は省略するが、ステップS9で、所定の条件を満たすと判断された場合には、たとえば、唇オブジェクト102がパンオブジェクト104をかじる様子のゲーム画面100が表示されたり、ユーザが顔を手で覆ったことが検出された場合には、指示画像表示領域206において次にユーザが実行するべき動作(ここでは、顔を覆った手を外す)を表示したりして、ゲームの進行状況が分かるように、ゲーム画面が更新される。一方、ステップS13で“YES”であれば、つまりゲームオーバであれば、ステップS19で、ゲームオーバ処理を実行して、ゲーム処理を終了する。たとえば、ステップS19では、ゲームオーバを表現するゲーム画面が表示されたり、効果音が出力されたり、プレイヤないしプレイヤキャラクタのライフが減少されたりなどの演出が実行される。
【0168】
この実施例によれば、撮影画像から肌色を抽出し、抽出した肌色に基づいてユーザの顔を認識しているかどうかを判定し、ユーザの顔を認識している場合に限り、ユーザの顔の特徴点に基づいて所定の条件を満たすかどうかを判断するので、プログラマや開発者が意図したプレイ状態でゲームをプレイさせることができ、また、プレイヤが意図した操作を実行することができ、しかも、所定の条件を満たすか否かについて正しく判断することができる。
【0169】
なお、この実施例では、顔の特徴点に基づいて、ユーザの顔を認識しているかどうか、およびユーザが口を開閉したかどうかを判断して、所定の条件を満たすか否かを判定する仮想ゲームについて説明したが、これらに限定される必要はない。たとえば、眉毛の特徴点や目の特徴点に基づいて、笑顔や怒り顔のような所定の顔の表情を検出したか否かを判断して、所定の条件を満たすか否かを判定する仮想ゲームを実行することも可能である。
【0170】
また、この実施例では、より高い精度を要求するため、ユーザの顔が存在するであると予測される特定領域を設定して、特定領域における肌色領域の割合が所定値を超える場合に、ユーザの顔を認識するようにしたが、LCDの表示領域全体における肌色領域の割合に基づいて、ユーザの顔を認識するようにしてもよい。
【0171】
さらに、この実施例では、ゲーム画面にシルエットを表示することにより、ゲーム装置が認識している肌色領域をユーザに知らせるようにしてあるが、これに限定される必要はない。顔(肌色領域)を認識しているか否か、および顔を認識している場合には、その大きさ(顔とゲーム画面(内部カメラ)との距離)の適切さを示す指標をゲーム画面にバーグラフなどで表示してユーザに知らせるようにしてもよい。
【0172】
さらにまた、ゲーム装置の構成は実施例のものに限定される必要はない。たとえば、表示装置(LCD)およびカメラは、それぞれ1つでもよい。また、タッチパネルは無くてもよい。さらに、タッチパネルを2つのLCD上に設けてもよい。
【図面の簡単な説明】
【0173】
【図1】図1はこの発明のゲーム装置の外観構成の一実施例を示す図解図である。
【図2】図2は図1に示すゲーム装置を折り畳んだ状態の上面図および左側面図を示す図解図である。
【図3】図3は図1および図2に示すゲーム装置の電気的な構成を示すブロック図である。
【図4】図4は図1に示す第1LCDに表示されるゲーム画面の一例を示す図解図である。
【図5】図5は図4に示すゲーム画面を用いた仮想ゲームをプレイする場合に、表示領域に対して設定される肌色判定領域を示す図解図である。
【図6】図6はユーザの顔画像から検出される特徴点を示す図解図である。
【図7】図7は図1に示すカメラで撮影された撮影画像の展開領域を示す図解図である。
【図8】図8は図1の第1LCDに表示されるゲーム画面の他の例を示す図解図である。
【図9】図9は図8に示すゲーム画面を用いた仮想ゲームをプレイする場合に表示領域に設定される肌色判定領域を示す図解図である。
【図10】図10は第1LCDに表示される調整画面の一例およびこの調整画面を用いる場合の判定用データの例を示す図解図である。
【図11】図11はこの実施例の仮想ゲームをプレイする場合のユーザの頭部(顔)とゲーム装置との位置関係を示す図解図である。
【図12】図12は肌色判定の閾値を示す図表である。
【図13】図13は第1LCDの表示領域を8×8画素および4×4画素に分割した格子を示す図解図である。
【図14】図14は第1LCDの表示領域を2×2画素に分割した格子を示す図解図である。
【図15】図15は肌色を抽出する場合の或る格子の評価値を算出するための重み付け値を示す図解図および閾値による判定結果の例を示す図解図である。
【図16】図16は図3に示すメインメモリのメモリマップを示す図解図である。
【図17】図17は図16に示すデータ記憶領域の具体的な内容を示す図解図である。
【図18】図18は図3に示すCPUのゲーム処理を示すフロー図である。
【符号の説明】
【0174】
10 …ゲーム装置
12,14 …ハウジング
16,18 …LCD
20 …操作ボタン
22 …タッチパネル
24 …タッチペン
26,28 …メモリカード
32,34 …カメラ
50 …CPU
52 …メインメモリ
54 …メモリ制御回路
56 …保存用データメモリ
58 …プリセットデータ用メモリ
60,62 …メモリカードI/F
64 …無線通信モジュール
66 …ローカル通信モジュール
68 …RTC
70 …電源回路
72 …I/F回路
74,76 …GPU
78,80 …VRAM
82 …LCDコントローラ
84 …マイク

【特許請求の範囲】
【請求項1】
ユーザの顔の全体または一部に対応する画像を示す画像データに基づいてゲーム処理を実行する装置のコンピュータに実行させるゲームプログラムであって、
前記ユーザを撮像する撮像ステップ、
前記撮像ステップによって撮像された画像を示す画像データに基づいて、前記ユーザの顔の全部または一部を認識する顔認識ステップ、
前記撮像ステップによって撮像された画像を示す画像データに基づいて、ユーザの肌色を検出したか否かを判定する肌色検出判定ステップ、および
前記肌色検出判定ステップによって前記ユーザの肌色を検出したと判定されたとき、前記顔認識ステップによって認識された前記ユーザの顔の全部または一部を示す情報に基づいてゲーム処理を実行するゲーム処理ステップを実行させる、ゲームプログラム。
【請求項2】
前記撮像ステップによって撮像された画像を示す画像データに基づいて、肌色の領域の大きさを算出する肌色領域算出ステップをさらに実行させ、
前記肌色検出判定ステップは、前記肌色領域算出ステップによって算出された肌色の領域の大きさが所定値以上であるときに、前記ユーザの肌色を検出したと判定する、請求項1記載のゲームプログラム。
【請求項3】
前記肌色領域算出ステップは、前記撮像ステップによって撮像された画像における肌色の領域の割合を算出し、
前記肌色検出ステップは、前記肌色領域算出ステップによって算出された割合が所定値以上であるときに、前記ユーザの肌色を検出したと判定する、請求項2記載のゲームプログラム。
【請求項4】
前記撮像ステップによって撮像された画像において、特定の領域を設定する領域設定ステップをさらに実行させ、
前記肌色領域算出ステップは、前記領域設定ステップによって設定された特定の領域内における肌色の領域の大きさを算出する、請求項2記載のゲームプログラム。
【請求項5】
前記顔認識ステップは、前記撮像ステップによって撮像された画像を示す画像データに基づいて、前記ユーザの顔を認識するとともに、当該ユーザの肌色を検出し、
前記ゲーム処理ステップは、前記肌色検出判定ステップによって前記ユーザの肌色を検出したと判定されたとき、前記顔認識ステップによって認識された前記ユーザの顔の全部または一部を示す顔情報と当該ユーザの肌色を示す肌色情報とに基づいてゲーム処理を実行する、請求項1ないし4のいずれかに記載のゲームプログラム。
【請求項6】
前記ユーザを予め撮像して得られた画像を示す画像データに基づいて、当該ユーザの肌色の特徴を示す肌色特徴データを算出する肌色特徴データ算出ステップをさらに実行させ、
前記肌色検出判定ステップは、前記撮像ステップによって撮像された画像を示す画像データと前記肌色特徴データ算出ステップによって算出された肌色特徴データとに基づいて、前記ユーザの肌色を検出したか否かを判定する、請求項1記載のゲームプログラム。
【請求項7】
前記撮像ステップによって撮像された画像を示す画像データに基づいて、ユーザの顔の全部または一部の特徴点データを取得する特徴点データ取得ステップ、および
前記特徴点データ取得ステップによって取得された特徴点データが所定の条件を満たすか否かを判定する特徴点データ判定ステップをさらに実行させ、
前記ゲーム処理ステップは、前記肌色検出判定ステップによって前記ユーザの肌色を検出したと判定され、かつ、前記特徴点データ判定ステップによって前記特徴点データが所定の条件を満たすと判定されたときに、前記顔認識ステップによって認識された前記ユーザの顔の全部または一部を示す情報に基づいてゲーム処理を実行する、請求項1に記載のゲームプログラム。
【請求項8】
ユーザの顔の全体または一部に対応する画像を示す画像データに基づいてゲーム処理を実行するゲーム装置であって、
前記ユーザを撮像する撮像手段、
前記撮像手段によって撮像された画像を示す画像データに基づいて、前記ユーザの顔の全部または一部を認識する顔認識手段、
前記撮像手段によって撮像された画像を示す画像データに基づいて、ユーザの肌色を検出したか否かを判定する肌色検出判定手段、および
前記肌色検出判定手段によって前記ユーザの肌色を検出したと判定されたとき、前記顔認識手段によって認識された前記ユーザの顔の全部または一部を示す情報に基づいてゲーム処理を実行するゲーム処理手段を備える、ゲーム装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate


【公開番号】特開2010−142553(P2010−142553A)
【公開日】平成22年7月1日(2010.7.1)
【国際特許分類】
【出願番号】特願2008−325441(P2008−325441)
【出願日】平成20年12月22日(2008.12.22)
【出願人】(000233778)任天堂株式会社 (1,115)
【出願人】(397037890)株式会社インテリジェントシステムズ (14)
【Fターム(参考)】