以下、図面を参照して、本発明の実施形態を詳細に説明する。
<第1の実施形態>
図1は、本発明の実施形態における、システム構成の一例を示す図である。
本発明のシステムは、サーバ200、ヘッドマウントディスプレイ101(以下、HMD101/装着型の表示装置)、光学センサ102等で構成される。図1において、各種装置はネットワーク150で通信可能に接続されているものとしている。ネットワークの有線、無線は問わない。
サーバ200には、HMD101により撮像される現実画像に重畳する3次元モデル(CGモデル/仮想オブジェクト/仮想物体)が記憶されている。当該仮想オブジェクトの情報は、例えば図7のモデル情報720に示す通りである。モデル情報720の詳細については図7の説明で後述する。
サーバ200は自機の管理するHMD101より現実画像を取得して、当該現実画像に3次元モデルを重畳したMR画像(現実画像と仮想空間の画像とを重畳した複合現実画像)を生成し、HMD101のディスプレイに表示させるべく、当該MR画像をHMD101に送信する。HMD101は受信したMR画像をディスプレイに表示する。
光学センサ102は、HMD101に設置された光マーカを検知することで、現実空間上のHMD101の位置姿勢(位置=XYZ座標、姿勢=XYZ軸それぞれの回転角度及び方向)を特定して、当該位置姿勢の値をサーバ200に送信する。サーバ200は当該位置姿勢の情報を光学センサ102から受け取ることでHMD101の位置姿勢を特定可能である。当該センサを用いたHMD101の位置姿勢の取得・特定方法は公知の技術を用いる。例えば特許文献1/特開平11−88913号公報、特許文献2/特開2002−229730号公報等に記載されている方法を用いて、HMD101の位置姿勢を特定する。以上が図1の説明である。
次に図2を参照して、本発明の実施形態における、各種装置のハードウェア構成について説明する。
CPU201は、システムバス204に接続される各デバイスやコントローラを統括的に制御する。
また、ROM202には、CPU201の制御プログラムであるBIOS(Basic Input / OutputSystem)やオペレーティングシステム(OS)、その他各種装置の実行する機能を実現するために必要な各種プログラムが記憶されている。
RAM203は、CPU201の主メモリ、ワークエリア等として機能する。CPU201は、処理の実行に際して必要なプログラム等をRAM203にロードして、プログラムを実行することで各種動作を実現するものである。
本発明のクライアントPC100、サーバ200が後述する各種処理を実行するために用いられる各種プログラム等は外部メモリ211に記録されており、必要に応じてRAM203にロードされることによりCPU201によって実行されるものである。さらに、本発明に係わるプログラムが用いる定義ファイルや各種情報テーブルは外部メモリ211に格納されている。
入力コントローラ(入力C)205は、キーボードやマウス等のポインティングデバイス(入力デバイス210)からの入力を制御する。
ビデオコントローラ(VC)206は、HMD101が備える右目・左目ディスプレイ222等の表示器への表示を制御する。右目・左目ディスプレイ222に対しては、例えば外部出力端子(例えば、Digital Visual Interface)を用いて出力される。また、右目・左目ディスプレイ222は、右目用のディスプレイと左目用のディスプレイとから構成されている。
メモリコントローラ(MC)207は、ブートプログラム、ブラウザソフトウエア、各種のアプリケーション、フォントデータ、ユーザファイル、編集ファイル、各種データ等を記憶するハードディスク(HD)やフレキシブルディスク(FD)或いはPCMCIAカードスロットにアダプタを介して接続されるカード型メモリ等の外部メモリ211へのアクセスを制御する。
通信I/Fコントローラ(通信I/FC)208は、ネットワークを介して、外部機器と接続・通信するものであり、ネットワークでの通信制御処理を実行する。例えば、TCP/IPを用いたインターネット通信等が可能である。また、通信I/Fコントローラ208は、ギガビットイーサネット(登録商標)等を通じて光学センサ102(光学式センサ)との通信も制御する。
汎用バス209は、HMD101の右目・左目ビデオカメラ221からの映像を取り込むために使用される。右目・左目ビデオカメラ221からは、外部入力端子(例えば、IEEE1394端子)を用いて入力される。右目・左目ビデオカメラ221は、右目用のビデオカメラと左目用のビデオカメラとから構成されている。
尚、CPU201は、例えばRAM203内の表示情報用領域へアウトラインフォントの展開(ラスタライズ)処理を実行することにより、ディスプレイ上での表示を可能としている。また、CPU201は、ディスプレイ上の不図示のマウスカーソル等でのユーザ指示を可能とする。以上が図2の説明である。
次に図3を参照して、本発明の実施形態における、各種装置の機能構成の一例について説明する。
撮像部311は、HMD101のカメラであり、現実画像を撮像する撮像部である。撮像画像送信部312は、撮像画像(現実画像)を自機に対応するサーバに送信する送信部である。
MR画像受信部313は、サーバ200で生成されたMR画像を受信する受信部である。MR画像表示部314は、受信したMR画像を表示画面に表示する表示部である。
サーバ200の撮像画像受信部321は、HMD101から現実画像を受信する。HMD位置姿勢特定部322は、光学センサ102からHMD101の位置姿勢の値を受信することでHMD101の位置姿勢を特定する特定部である。
HMD位置姿勢記憶部323は、HMD位置姿勢特定部322で特定した位置姿勢の情報を外部メモリに記憶する記憶部である。HMD位置姿勢記憶部323は、現在のHMD101の位置姿勢であり、MR画像(現実画像に、HMDの位置姿勢から見た、仮想空間に配置された仮想オブジェクトの画像を重畳した重畳画像/複合現実画像ともいう)の生成に用いるHMD101の位置姿勢の情報(図7のHMD情報700)と、現在及び過去のHMD101の位置姿勢を、継続して、ログ(図7のHMD位置姿勢ログ710/履歴記憶手段)として外部メモリに記憶する。
MR画像生成・記憶部324は、HMD位置姿勢特定部322で特定された現在のHMDの位置姿勢に基づいて現実画像に仮想オブジェクトを重畳したMR画像を生成し、外部メモリに記憶する記憶部である。MR画像送信部325は、当該MR画像をHMD101に送信する送信部である。
仮想オブジェクト記憶部326は、仮想空間に配置する(仮想空間と現実空間の位置合わせを行うことで、MR空間上に配置する)仮想オブジェクトの情報を記憶する。具体的には、図7のモデル情報720に示すような情報をサーバ200の外部メモリに記憶している。
モデル情報720は、モデル(仮想オブジェクト)の識別情報であるモデル名721、モデルを配置・陳列する仮想空間上の位置722、姿勢723、当該モデル(仮想オブジェクト)が、ユーザが仮想オブジェクトに着目(注目)したか否か/どの程度着目したかの分析対象とする仮想オブジェクトかを示す着目フラグ724(対象物体記憶手段に該当)、どの空間をHMD101の視線が通過していた場合に当該仮想オブジェクトに着目していたと判定するかの領域を示す着目エリア725等から構成される。例えば、HMDの位置姿勢から特定されるHMD101の視線方向(HMD101が向いている方向)を示す直線と、当該着目エリア725に示すエリアの外面とが交った場合に、当該着目エリア725に対応する仮想オブジェクトをHMD101のユーザが見ていた(ユーザが着目していた)と判定するものである。着目フラグ724=1の仮想オブジェクトはユーザが当該オブジェクトに着目していた否かを判定する対象のオブジェクトである。着目フラグ724=0の仮想オブジェクトはユーザが当該オブジェクトに着目していた否かの判定対象とはしない。着目フラグ724の値は予め仮想オブジェクトごとに記憶されているものとする。着目エリア725は、モデル名721の示す仮想オブジェクトを位置722・姿勢723で仮想空間に配置した場合に、当該仮想オブジェクトを囲む最小の立方体の占める3次元上の領域であり、当該立方体の各頂点座標が記憶されている。視線方向のベクトルと当該エリアを示す立方体の外面が交わった交点の座標が、ユーザが当該着目エリアに対応する仮想オブジェクトにおいて着目した点(着目点)の座標である。なお、ユーザが物体に着目していたか否かの判定方法はこれに限るものではない。例えば視線方向のベクトルと仮想オブジェクト自体の外面が交わった場合にユーザが当該物体に着目していると判定し、視線方向のベクトルと仮想オブジェクト自体の外面が交わった交点の座標をユーザが当該仮想オブジェクトである物体に着目した着目点の座標としてもよい。
分析実行部327は、HMD101の位置姿勢のログを分析・解析して、対象の仮想オブジェクトにユーザが着目していたか否か/着目していたとすればどの程度着目していたのかを特定する処理部である。
分析結果情報生成部328は、分析実行部327で実行した分析の分析結果をユーザに確認させるべく、分析結果の情報を生成する。例えば、MR空間上で分析結果をユーザに確認させるべく、図8の810に示すように各仮想オブジェクトに対応付けて仮想空間上に配置する、各仮想オブジェクトをユーザがどの程度見ていたかを示す仮想オブジェクトを生成して、当該分析結果の仮想オブジェクト(図8の810における吹き出し)をそれぞれの分析対象の仮想オブジェクト(陳列されている商品のCG)から見て所定の位置に配置するよう、当該分析結果の仮想オブジェクトの位置姿勢を決定して分析結果の仮想オブジェクトと対応付けて外部メモリに記憶する。以上が図3の説明である。
次に図4を参照して、本発明の実施形態における、HMDの位置姿勢の記憶処理の流れについて説明する。
サーバ200のCPU201は、HMD101の位置姿勢の計測・特定処理の開始指示(例えばユーザ操作)を受け付けると、光学センサからHMD101の位置姿勢情報を取得して(ステップS401)、外部メモリに記憶する(ステップS402)。具体的には、サーバ200のCPU201は、図7のHMD情報700のHMDID701にHMD101の識別情報を、位置702、姿勢703に位置姿勢の情報を記憶する。HMD情報700は現在のHMD101の位置姿勢を示す。本実施形態におけるHMDの姿勢の情報は、HMDの回転角度と、HMDの向いている方向を示す情報である。
また、サーバ200のCPU201は、HMD位置姿勢ログ710に最新のデータ列を追加して、HMD101の識別情報、ステップS401で取得した位置姿勢、当該位置姿勢の情報を取得した日時(位置姿勢を特定した日時)を、それぞれHMDID711、位置713、姿勢714、日時712に挿入して記憶する。HMD位置姿勢ログ710はサーバ200の外部メモリに記憶される、HMDの位置姿勢の計測履歴である。ログID715は、図4のステップS403で当該ログをファイル出力する場合に当該ログに付与される識別情報である。姿勢714は、HMD101のユーザの視線方向の遷移を示す履歴の情報である。
サーバ200のCPU201は、位置姿勢計測の終了の指示(例えばユーザからの操作)を受け付けるまでステップS401、S402の処理を繰り返し実行する。位置姿勢計測の終了の指示を受け付けた場合は、サーバ200のCPU201は、位置姿勢計測の開始から終了までに記憶したHMD位置姿勢ログ710を1つのファイルとして、サーバ200の外部メモリ211の所定の領域に出力・記憶する(ステップS403)。なお、出力に際してログID715を新規に作成してファイルに埋め込む。ログID=ステップS403で出力したログの識別情報である。以上が図4の説明である。
次に図9を参照して、本発明の実施形態における、MR画像の生成処理の流れについて説明する。
HMD101は、自装置に設置されているビデオカメラで現実画像を撮像し(ステップS901)、撮像した現実画像をサーバ200に送信する(ステップS902)。
サーバ200は、仮想オブジェクト(図7のモデル情報720)を取得して、各仮想オブジェクトを位置722・姿勢723の位置姿勢で仮想空間上に配置する(ステップS903)。
サーバ200のCPU201は、当該現実画像を受信して外部メモリに記憶する(ステップS904)。当該現実画像には撮像日時の情報が含まれているものとする。また、サーバ200のCPU201は、当該現実画像を撮像したHMD101のIDと対応付けて記憶するものとする。そして、図7のHMD情報700に示す現在のHMD101の位置姿勢を読み出して、当該位置姿勢の値に従って、(仮想のカメラを仮想空間上に配置して仮想空間の画像(仮想オブジェクトの画像/仮想画像)を撮像し、HMD101から取得した現実画像に重畳することで)MR画像を生成してメモリに記憶する(ステップS905)。
サーバ200のCPU201は、当該MR画像をHMD101に送信し(ステップS906)、HMD101が当該MR画像を受信して(ステップS907)表示画面に表示する(ステップS908)。以上が図9の説明である。
次に図5を参照して、本発明の実施形態における、HMDの位置姿勢に基づく解析処理の流れについて説明する。
サーバ200のCPU201は、ログ解析指示(例えばユーザ操作)を受け付ける(ステップS501)。当該ログ解析の操作は、例えばステップS403で出力されたファイルの選択及びログ解析の操作を受け付け、サーバ200の不図示の表示画面において解析開始ボタンの押下を受け付けることで、当該選択されたHMD位置姿勢ログのファイルに対して実行される。
サーバ200のCPU201は、モデル情報720を取得して(ステップS502)、モデル情報720の仮想オブジェクトの中から、着目フラグ=1の仮想オブジェクトを取得する(ステップS503)。つまり、ステップS502で取得したログにおいて、HMD101のユーザに着目されていたか/どの程度着目されていたかを解析する対象の仮想押ブジェクトを特定し、外部メモリ上に当該解析対象のオブジェクトのリストを生成して記憶する。例えば、図7のランキング情報730を生成して記憶する。ランキング情報730は、各仮想オブジェクト(モデル名732)に対してユーザがどの程度の時間(着目時間733/着目度)着目していたか、を記憶するテーブルである。
サーバ200のCPU201は、ステップS501で取得したファイルのログ(図7のHMD位置姿勢ログ710に示す711〜714の各情報)を1つ取得して(ステップS504)、当該ログの示すHMD101の視点(位置)と姿勢からHMD101の視線方向を特定する(ステップS505)。つまり、HMD101のユーザがどの位置からどの方向を見ていたかを特定する。
サーバ200のCPU201は、当該特定した視線方向の先に、ステップS503で生成した解析対象の仮想オブジェクトがあるか判定する。具体的には、ステップS505で特定した視線方向を示す直線と、着目フラグ724=1の仮想オブジェクトの着目エリア725を通過しているかを判定する。通過している場合に、視線の先に当該着目エリア725に対応する仮想オブジェクトがあったと判定する。着目フラグ724=1の仮想オブジェクトの着目エリア725のうち、視線方向を示す直線がいずれのエリア725も通過していない場合に視線の先に当該着目エリア725に対応する仮想オブジェクトがなかったと判定する。
視線の先に仮想オブジェクトがなかった場合は処理をステップS509に移行する。視線の先に仮想オブジェクトがあった場合は、例えば当該視線の先にある仮想オブジェクトのうち、HMDの位置から最も近い(直近の)仮想オブジェクトを、HMD101のユーザが着目していた仮想オブジェクトとして特定する(ステップS507/着目物体特定手段に該当)。但し、仮想オブジェクトの透明度が閾値に達している場合、視線方向の先にある仮想オブジェクトのうち、当該仮想オブジェクトの次にHMDに近い位置にある仮想オブジェクトをユーザが着目していた仮想オブジェクトとして特定する。例えば透過率が70%以上の仮想オブジェクトは無視して、次にHMDに近い位置にある透過率30%以下の仮想オブジェクトを、着目対象の仮想オブジェクトとする。
サーバ200のCPU201は、ステップS504で取得したログの次のログの日時712を取得して、当該ステップS504で取得したログの日時712から次のログの日時712までの時間を、ユーザが着目していた当該仮想オブジェクトのモデル名732に対応する着目時間733に加算する(ステップS508/着目度特定手段に該当)。
サーバ200のCPU201は、ステップS501で取得したログファイルの中の全てのHMD位置姿勢ログにステップS504〜S508の処理を実行済みか判定し、実行済みでない場合は処理をステップS504に戻して未処理のログを取得する。
実行済みの場合は、ランキング情報730中の仮想オブジェクトを着目時間733が多い順にランキングして、ランキング値731(着目度を示す値)にランキング(着目度の順位)を書き込む(ステップS510/着目度特定手段に該当)。そして、当該ランキング情報730を解析結果(分析結果)の情報として、ログのファイルと対応付けて記憶する(ステップS512)。具体的には、ランキング値を書きこみ終わったランキング情報730に、ステップS501で取得したログファイルのログIDを対応付けて(ログID734)、外部メモリ211の所定の領域に当該ランキング情報730をファイルとして出力・記憶する。以上が図5の説明である。
図4、図5の処理によれば、MRにおいて、体験者が対象物に着目していたかを容易に特定することができる。
次に図6を参照して、本発明の実施形態における、解析結果の出力処理の流れについて説明する。
サーバ200のCPU201は、ログ解析結果の表示指示(例えばユーザ操作)を受け付ける(ステップS601)。例えば、サーバ200の外部メモリに記憶されている解析結果のファイルの選択を受け付け、サーバ200の不図示の表示画面において解析結果の表示ボタンの押下を受け付けることで、当該ログ解析結果の表示指示を受け付けるものとする。
サーバ200のCPU201は、選択された解析結果のファイル(ランキング情報730に示す情報を持つファイル)をメモリ上に読込み(ステップS602)、読み込んだ解析結果の情報を1つ取得する(未処理のランキング情報をランキングが高い順に取得する/ステップS603)。
サーバ200のCPU201は、取得した解析結果の情報を示す仮想オブジェクトを生成して(ステップS604/着目度オブジェクト生成手段に該当)、当該仮想オブジェクトの位置姿勢を決定して(ステップS605)外部メモリに記憶する。また、図7の解析結果モデル情報740に示すように、ステップS601で選択された解析結果に対応するログIDをログID741に持つ解析結果モデル情報740を生成し、解析結果モデル名742に生成した解析結果を示す仮想オブジェクトのファイル名を挿入し、モデル名745に解析対象のモデル名732を挿入し、当該モデル名745の仮想オブジェクトから所定の位置(モデル名745の仮想オブジェクトの位置から所定のオフセット値を適用したXYZ座標)と所定の姿勢の値を位置743、姿勢744に挿入して記憶する。
サーバ200のCPU201は、ステップS601で取得したファイル内の全ての解析結果(ランキング情報730内の全てのモデル)に対してステップS603〜S605の処理を実行済みか判定し(ステップS606)、未実行の場合には処理をステップS603に戻して未処理の解析結果を取得する。実行済みの場合には、処理をステップS607に移行して、図9に示すMR画像の生成・出力処理(着目対象の仮想オブジェクトの識別表示処理)を実行する。以上が図6の説明である。
なお、ステップS607におけるMR画像の生成処理においては、サーバ200のCPU201は、ステップS903の仮想オブジェクトの取得・配置の処理において、モデル情報720に加えて、解析結果モデル情報740を取得して、各モデル(仮想オブジェクト)を仮想空間上に配置する処理を行う。また、サーバ200のCPU201は、解析結果の表示の終了指示(例えばユーザ操作)を受け付けるまで、当該解析結果モデル情報740の読込み、配置、当該解析結果モデル情報740の仮想オブジェクト(当該解析結果モデル情報740の仮想オブジェクトを配置した仮想空間の画像)を用いたMR画像の生成、出力を継続するものとする。HMD101には、当該解析結果モデル情報740の仮想オブジェクトが見えるMR画像が表示(ユーザが着目していた仮想オブジェクトが識別表示)される。
モデル情報720の仮想オブジェクトを配置したMR空間の例を図8の800に示す。モデル情報720に加えて、解析結果モデル情報740の仮想オブジェクトを配置したMR空間の例を図8の810に示す。
次に図10を参照して、本発明の実施形態における、仮想オブジェクトの位置入れ替え及びHMD位置姿勢のログ表示処理の流れについて説明する。
サーバ200のCPU201は、仮想オブジェクトの選択を受け付けた場合に(ステップ(S1001)、仮想オブジェクトの解析結果の表示中か(ステップS607によるMR画像の生成・表示中か/解析結果の表示指示を受け付けてからまだ終了指示を受け付けていない状態か)判定する(ステップS1002)。仮想オブジェクトの選択方法は既存の技術を用いて行うものとする(例えば選択用の仮想オブジェクトと接触した仮想オブジェクトを選択する)。
仮想オブジェクトの解析結果の表示中でない場合は処理を終了し、仮想オブジェクトの解析結果の表示中である場合は、選択された仮想オブジェクトから所定の距離離れた位置に、図11の1101〜1103の選択ボタンの仮想オブジェクトを生成・配置する。つまり、図11の1101〜1103の選択ボタンであるユーザ操作部の仮想オブジェクトの仮想空間上の位置姿勢の決定を行う。そして、HMD101の位置姿勢と、当該選択ボタンの仮想オブジェクトの仮想空間上の位置姿勢の位置姿勢に応じて、当該選択ボタン1101〜1103を重畳したMR画像を生成してHMD101に出力して表示させる(表示制御する)。
サーバ200のCPU201は、ステップS1004で入れ替え対象の仮想オブジェクトが選択されたと判定した場合に、処理をステップS1010に移行し、入れ替え対象として選択された仮想オブジェクトと選択中の仮想オブジェクトの位置を、モデル情報720中において入れ替える処理を行い(ステップS1010)、処理をステップS1009に移行する。つまり、指示に応じて仮想オブジェクトを入れ替えたMR画像を生成・出力するために、図9のMR画像の生成・出力処理を行う(ステップS1009)。
ステップS1004で入れ替え対象の仮想オブジェクトが選択されたと判定した場合とは、具体的には、ボタン1101が選択され、サーバ200が、入れ替え対象の仮想オブジェクトの候補の選択ボタン1111、1112を生成して図11の1110に示すように配置・描画し、当該選択ボタン1111、又は1112の選択操作を受け付けた場合である。
ここでは当該選択ボタン1111、1112に表示する対象の仮想オブジェクトを、選択中の仮想オブジェクトより上位のランキングのオブジェクトとした。これにより、入れ替えの候補が多く表示されて表示画面が煩雑になることを防止できる。
なお、入れ替えの候補が多く表示されて表示画面が煩雑になることを防止するために、選択中の仮想オブジェクトより下位のランキングの仮想オブジェクトを入れ替え候補として表示してもよい。
また、表示画面が煩雑になるほど仮想オブジェクトがない場合においては、解析結果表示中の全ての仮想オブジェクトを選択ボタンに表示してもよい。また、解析が完了している全ての仮想オブジェクトを選択ボタンに表示してもよい。
仮想オブジェクトの選択に応じて、選択ボタンの選択により指定された他の仮想オブジェクトとの位置の入れ替えをMR空間上で行うことを可能にするものである。
サーバ200のCPU201は、ステップS1005で並び替えボタン1102の選択がされたか判定する。並び替えボタン1102がされた場合には、例えば、予めサーバ200に仮想オブジェクトと対応付けて記憶しておいた、着目して欲しい順の1位〜n位までの情報を取得し、着目して欲しい順の1位に設定されている仮想オブジェクトの位置を、実際にランキングで1位になった仮想オブジェクトが配置されている位置に変更する(ステップS1011)。その後、処理をステップ1009に移行し、指示に応じて仮想オブジェクトの位置を並び替えたMR画像を生成・出力するために、図9のMR画像の生成・出力処理を行う(ステップS1009)。これにより、ユーザが所望する着目してほしい順に沿って、各仮想オブジェクトを、実際に着目された仮想オブジェクトの配置位置に一括で配置することができる。
サーバ200のCPU201は、ステップS1006で、HMD位置姿勢ログの表示指示のボタン1103が選択されたか判定し、HMD位置姿勢ログの表示指示のボタン1103が選択された場合に、選択中のモデルに着目していた時点のHMD位置姿勢ログを特定する(ステップS1007)。どのログのどのHMDのユーザがどの仮想オブジェクトにいつからいつまで着目していたか(いつの時点からいつの時点まで着目していたか)の特定方法は図5で説明したとおりである。例えば、ユーザが着目している物体(仮想オブジェクト又は現実物体)が特定される都度、当該物体ごとに、着目していたユーザのHMD101のIDと、着目されていた時点の日時と、HMD101の位置姿勢を対応付けた対応付け情報を外部メモリに記憶しておく(対応付け記憶手段/姿勢対応付け記憶手段に該当)ことでも、どのHMDのユーザがどの仮想オブジェクトにいつからいつまで着目していたか特定可能である。サーバ200のCPU201は、ステップS1007で、表示中の解析結果のログID741のログ(HMD位置姿勢ログ等)を取得して、日時712を参照し、当該ログの最初の日時から最後の日時までの間の、HMDID711の示すHMDの前記対応付け情報を取得することで、選択された物体に着目していたHMD101の日時ごとの位置姿勢を特定できる。
サーバ200のCPU201は、ステップS1007で特定した、選択中の仮想オブジェクトにユーザが着目していた時点のHMDの位置を示す仮想オブジェクト(図12でいう1202)を生成し(位置オブジェクト生成手段に該当/姿勢オブジェクト生成手段に該当)、図12に示すように、各ログの示すHMD101の位置にHMD101の姿勢で配置する処理を行う(ステップS1008/位置姿勢決定手段に該当)。なお、図12の1210に示すように、HMDの位置、及び、HMDの位置姿勢から特定される、選択中の仮想オブジェクトにユーザが着目していた時点のHMDの視線方向を示す直線(矢印)を生成して仮想空間に配置するようにしてもよい。矢印は、1202の示す仮想オブジェクトの位置(=HMD101のユーザがある仮想オブジェクトに着目している間における、ある時点でのHMD101の位置)を始点とし、その位置から仮想オブジェクトに着目していた際の、仮想オブジェクト上の着目点(終点)まで伸ばした矢印型の仮想オブジェクトである。図12の1210はMR空間を上から見た俯瞰図である。
サーバ200のCPU201は、ステップS1007で生成・配置した、選択中の仮想オブジェクトにユーザが着目していた時点のHMDの位置を示す仮想オブジェクトをHMD101に表示させるべく、図9のMR画像の生成・出力処理を行う(ステップS1009)。
これにより、仮想オブジェクト着目していたユーザのいた位置を容易に確認可能できる。
なお、サーバ200のCPU201は、当該HMDの位置姿勢のログ表示の終了指示を受け付けるまで、当該HMDの位置姿勢のログの仮想空間への配置、及び当該HMDの位置姿勢のログの仮想オブジェクトを重畳したMR画像の生成を継続する。当該終了指示を受け付けた場合には、当該HMDの位置姿勢のログを示す仮想オブジェクトを削除する。
なお、図12の1202のみ生成・配置するようにしてもよいし、図12の1201に示すような、1202の位置(選択中の仮想オブジェクトにユーザが着目していた時点のHMDの位置)を包含する最小の球または直方体を生成して仮想空間に配置することで、選択中の仮想オブジェクトにユーザが着目していた期間にHMD101のユーザがいた位置を確認することができるようになる。
以上説明したように、本発明によれば、MRにおいて、体験者が対象物に着目していたかを容易に特定できる仕組みを提供することができる。
また、例えば体験者の意見とブース内の行動(どの商品に注目・着目していたか)を照らし合わせることで体験者の意見と行動との整合性を確認し、この整合性を以って体験者の意見を採用すべきか否かを判断することが考えられる。体験者の行動を監視するためにはブース周辺にカメラを配置して体験者の行動を撮影して録画し、録画した動画を後に確認する方法がある。体験者の行動を正確に監視するためにブース周辺に複数のカメラを配置して複数の録画動画をPCモニタで目視確認する方法が考えられるが、複数の動画を確認するのは手間である。また、ブースを俯瞰するようにカメラを配置して録画した動画を確認する方法が考えられるが、動画の中に小さく写る体験者の行動を目視確認するので体験者がどの商品に着目しているか確認しづらい。
これに対し本発明では、HMDの位置姿勢の履歴及び仮想オブジェクトの位置姿勢に応じて体験者が対象物に着目していた度合いを特定し、MR空間において、体験者の行動を容易に確認することができる。
つまり、MRにおいて、体験者が対象物に着目していたかを容易に特定できる仕組みを提供することができる。
なお、上述した実施形態においては、1つのHMD位置姿勢ログのファイルの選択を受け付け、当該1つのログのファイルに対して図5の処理を実行するものとしたが、例えば複数のログのファイルを選択して、当該複数のログのファイルに対して図5の処理を実行するようにしてもよい。複数のログ(例えば異なる複数人のユーザの位置姿勢のログ)を対象に着目度の解析を行うことで、解析結果の精度や信頼度を向上させることができる。
具体的には、サーバ200のCPU201が、ステップS501で複数のログのファイルの選択を受け付け、当該複数のログのファイルを取得する。そして、複数のファイルの全てのログに対してステップS504〜S508の処理を実行する。この場合、サーバ200のCPU201は、ステップS501で選択された全てのログの解析結果をステップS510で1つのランキング情報730のファイルとして記憶・出力し、ログID734に当該選択された全てのログのログIDを挿入する。サーバ200のCPU201は、ステップS601で当該複数のログの解析結果の選択及び表示指示を受け付けることで、当該複数のログの解析結果に基づくMR画像を生成してHMD101に表示する。
また、上述した実施形態においては、着目フラグ724=1の仮想オブジェクトを図5の解析の対象としたが、例えば、モデル情報720に記憶される全ての仮想オブジェクトを図5の処理対象としてもよい。具体的には、サーバ200のCPU201は、ステップS503の処理を実行せずに、ステップS505〜S509をステップS502で取得した全ての仮想オブジェクトに対して実行する。
また、上述した実施形態においては、図6のステップS603〜S605の処理をステップS601で取得した解析結果の全ての仮想オブジェクトに対して実行するものとしたが、例えば解析結果のランキングの上位所定数の仮想オブジェクトに対してのみステップS603〜S605の処理を実行するようにしてもよい。
具体的には、サーバ200のCPU201は、ステップS606において、ランキングの上位所定数までの仮想オブジェクトに対してステップS603〜S605を実行済みか判定して、未実行の場合は処理をステップS603に戻し、実行済みの場合は処理をステップS607に移行する。これにより、仮想空間に配置される仮想オブジェクトの数が多い場合(着目フラグ=1の仮想オブジェクトが多い場合等)でも、解析結果の情報の表示が煩雑になることを防止することができる。当該所定数の値は、サーバ200の外部メモリに記憶されており、ユーザ操作により自由に設定変更可能である。
また、上述した実施形態においては、解析結果モデルの仮想オブジェクト=ランキング値731及び着目時間733の両方を埋め込んだ(テクスチャとして貼り付けた)仮想オブジェクトとして生成するものとしたが(図8の810)、例えばランキング値731又は着目時間733のいずれか一方を埋め込んだ仮想オブジェクトを解析結果モデルの仮想オブジェクトとして生成・配置するようにしてもよい。
また、上述した実施形態においては、サーバ200が解析結果モデルの仮想オブジェクトを生成し仮想空間に配置、MR画像を生成することで、HMDに各仮想オブジェクトの着目度(解析結果)を表示するものとしたが、着目度の識別表示の方法はこれに限るものではない。例えばステップS604で、当該解析結果モデルの仮想オブジェクトを生成する代わりに、着目のランキングに応じて着目されていた仮想オブジェクトの色を変更する処理を行ってもよい。例えばランキング上位5位に入る仮想オブジェクトを同じ色になりよう処理しても良いし、各ランキングに応じた色を予めサーバ200の外部メモリに記憶しておいて、それぞれのランキング値に対応する色にそれぞれの仮想オブジェクトの色を変更するようにしてもよい。
また、ある時間以上(例:1分以上等)着目していれば、着目されていた仮想オブジェクトとして識別表示するようにしてもよい。具体的には、所定時間の値を予めサーバ200の外部メモリに記憶しておき、サーバ200のCPU201が、図6のステップS603の後、ステップS603で取得した解析結果の着目時間(図7の730及び740のログIDおよびモデル名から特定可能)が当該所定時間に達しているか判定して、所定時間に達している場合に処理をステップS604に移行し、着目時間が当該所定時間に達していない場合に処理をステップS606に移行するようにする。これにより、仮想オブジェクトが所定時間着目されているかを容易に特定、確認できる。
また、上述した実施形態においてはセンサを用いてHMDの位置姿勢を特定するものとしたが、HMDの位置姿勢さえ特定できればよいため、必ずしもセンサを用いる必要はない。例えば部屋に複数のマーカを貼り付けて、当該マーカをHMD101のカメラで撮像することでHMD101の位置姿勢を特定し、MR画像を生成するようにしてもよい。
マーカを使ってHMDの位置姿勢を特定し、仮想オブジェクトを現実画像に重畳する場合、マーカの形状は問わないが、例えば全て正方形であり、サイズも全て同じであるものとする。また、各マーカにはユニークなマーカ番号が埋め込まれているものとする。そして、HMD101に設けられたカメラで撮像した際に、個々のマーカが識別でき、デコードした際に、そのマーカ番号が得られるものとする。マーカの種類(マーカが果たす役割の種類)は、HMD101の位置姿勢を決定するための位置検出用マーカ、並びに、そのマーカで規定される箇所に仮想オブジェクトを描画するものとして利用される仮想オブジェクト配置用マーカの2種類がある。そして、位置検出用マーカについては、複数のマーカが、予め既知の位置に貼り付けられているものとする。
HMD101の位置姿勢を検出する原理について説明する。撮像した画像中の3つの位置検出用マーカ(その位置は既知)それぞれのサイズから、HMD101からそれぞれまでの位置検出用マーカまでの距離を求める。そして、逆に、3つの位置検出用マーカから求めた3つの距離が重なる位置を、HMD101の位置として決定する。また、HMD101の姿勢は、撮像した画像中の3つの位置検出用マーカの配置から求めればよい。
なお、マーカの法線方向に視点があるとき、そのマーカ画像が正方形に見えることになる。そして、視点が法線方向からずれると、そのずれの度合いに応じて正方形が歪んで見える。つまり、この歪みから、視点の軸に対するマーカで規定される平面の向きが判明し、マーカのサイズから視点とマーカ間の距離を検出でき、マーカが貼り付けられた平面が規定できる。また、実施形態では、マーカには、互いに識別できる2つの印が設けられ、マーカの中心位置を原点とし、マーカで規定される上記の平面上の、原点からその印に向かう2つのベクトルを2軸、マーカの中心位置から法線方向の1軸で、局所的(ローカル)な3次元座標を規定する3軸を規定しているものとする。
また、撮像した画像中の1つの位置検出用マーカのサイズ、形状及び画像上の位置と、予めサーバ200に記憶されているマーカのサイズとを比較することでも、HMD101とマーカとの相対的な位置・姿勢を特定することが可能である。相対位置・姿勢の特定方法は、例えば特開2013−61870号公報に記載されている公知の技術を用いる。
仮想オブジェクト配置用マーカとは、仮想オブジェクトを表示する位置を特定するために用いられるマーカである。サーバ200及びクライアントPC100のCPU201は、当該仮想オブジェクト配置用マーカが検出された際、当該仮想オブジェクト配置用マーカが存在する位置(正確には後述するように当該仮想オブジェクト配置用マーカの重心位置からオフセットを持つ位置)に仮想オブジェクトを表示するための処理を行う。例えば、3次元モデルを当該オフセットの示す仮想空間上の位置に配置する処理を行う。
仮想オブジェクトとは、仮想空間上に配置された3次元モデル(3次元CADデータ、3Dモデル、CG等とも呼ぶ)のことである。尚、3次元モデルのデータはサーバ200及びクライアントPC100の外部メモリ上に、当該3次元モデルを仮想空間上のいずれの位置にどのような姿勢で配置するかを示す位置姿勢の情報と対応付けられて記憶されている。
仮想オブジェクト配置用マーカの中心位置の座標を{Xv,Yv,Zv}とし、3次元モデルのデータ中の基準座標を{Xi,Yi,Zi}(ここで、i=0,1,2,・・・)と定義したとき、距離Lは次式で得られる。
L={(Xv−Xi)2+(Yv−Yi)2+(Zv−Zi)2}1/2
ここで、iを変化させた際の最小の距離Lを、仮想オブジェクト配置用マーカと仮想オブジェクト配置用マーカの位置に応じて配置する3次元モデルとの距離とした。なお、上記では距離を計算する際に、最終的に平方根を求めたが、大小の判定で良いのであれば、平行根を求める必要な無く、座標の差分の二乗和を算出しても構わない。
なお、上記式では、仮想オブジェクト配置用マーカの中心位置=仮想オブジェクトの中心位置とした場合である。先に説明したように、仮想オブジェクトの配置される位置は、仮想オブジェクト配置用マーカの中心位置に対し、「位置」で示されるオフセットが与えられる。
なお、マーカに埋め込めるビット数にもよるが、位置検出用マーカと仮想オブジェクト配置用マーカを兼ねるマーカを定義しても構わない。
<第2の実施形態>
図13〜図16を参照して、本発明の第2の実施形態について説明する。なお、第1の実施形態と共通する処理については記載・説明を省略する。
第2の実施形態においては、体験者が現実物体である対象物に着目していたかを容易に特定できる仕組みを提供することを目的とする。
なお、第2の実施形態においては、どの位置の現実物体が着目されていたかを3次元空間上で容易に確認させることができる。
また、現実物体に着目していた際のHMDの位置姿勢を、3次元空間上で容易に表示させることができる。
図13を参照して、本発明の第2の実施形態における、現実物体とHMDの位置関係の特定処理について説明する。
サーバ200のCPU201は、図9の処理及び図4のHMD101の位置姿勢のロギングと平行して実行する。例えばHMD101の位置姿勢の計測・特定処理の開始指示(例えばユーザ操作)を受け付けることで図13の処理を開始し、実行する。
サーバ200のCPU201は、ステップS904で取得した最新の現実画像(撮像画像)をメモリから取得する。
サーバ200のCPU201は、当該現実画像を解析して、物体認識処理を行う。具体的には、当該画像に写る被写体(物体)を認識し、当該認識した物体の情報を外部メモリに記憶する。具体的には、図15の物体情報1500に示す情報を記憶する。
ここでいう物体認識処理とは画像上の物体の認識であり、画像上の物体の輪郭の認識、画像上の当該物体が存在する座標(輪郭で囲われた領域)の認識、当該物体が何である(どのような名称の物体か)を認識して特定する処理を指すものとする。
物体認識は公知の技術を用いて実行する。例えば、Objectness手法を用いて画像を複数に分割して顕著度、エッジ、色や場所を基としたスコア付けを行い、スコアが高い部分が物体領域として認識する。つまり、画像上の物体の輪郭(物体を囲う領域)の認識、画像上の当該物体が存在する座標の認識を行う。その後、サーバ200のCPU201が、外部メモリに予め記憶されている物体名とその物体の特徴量を対応付けた辞書データを用いて、認識した領域内の物体が何か(どのような名称の物体か)を特定する。
なお、上述した物体認識の手法はあくまで一例であり、物体の輪郭、物体の存在する画像上の領域、物体が何であるかの認識ができればどのような手法を用いてもよい。例えば、CPMC(Constrained Parametric Min−Cuts)の手法を用いてもよい。また、R−CNN(Regions with Convolutional Neural Network)の技術を用いてもよい。
図15の物体情報1501は、現実画像を撮像した、現実画像の送信元のHMD101のHMD ID1501の画像を撮像した日時1502ごとに記憶される。物体ID1503は、認識した物体ごとにサーバ200のCPU201が付与する一意の値であり、物体の識別情報である。物体名1504は、サーバ200に予め記憶されている物体名とその物体の特徴量を対応付けた辞書データを用いてサーバ200のCPU201が推測して記憶する物体の名称である。領域1505は、当該物体が存在する画像上の領域を示す情報である。具体的には、領域を示す外形線の頂点座標の集合である。
相対位置1506及び相対姿勢1507は、日時1502におけるHMD101の位置姿勢と物体ID1503の物体との相対的な位置姿勢である。
物体位置1508及び物体姿勢1509は、日時1502におけるHMD101の位置姿勢と前記相対位置1506及び相対姿勢1507から求められる、物体ID1503の物体の3次元空間上におっける絶対位置であり姿勢である。
なお、物体IDは物体ごとに付与するものであるため、例えば、新たに撮像された現実画像に、過去に撮像されたことのある現実物体が含まれている場合は、物体IDは同じとする。
サーバ200のCPU201は、新たに撮像された現実画像内の現実物体の物体名及び外部メモリに記憶した当該物体の画像と、過去に撮像されたことのある現実物体の物体名及び外部メモリに記憶した当該物体の画像との類似度が閾値(例えば90%)以上の場合に、これらの現実物体が同じものであると判断、決定する。
物体認識の様子を図16の1600に示す。1600、1610、1620は現実画像である。1601はマーカである。マーカも現実物体の1つである。1602は、マーカを検出した領域(1505)である。1603は机である。1604は、現実物体である机を検出した領域(1505)である。
サーバ200のCPU201は、処理中の現実画像上における各現実物体の輪郭線を取得し、当該輪郭線によって囲われる領域を現実物体の写る領域として特定する。また、当該領域の画像上のXY座標を、領域1505に記憶する(ステップS1301)。
具体的には、当該領域の輪郭線上の複数の点(矩形の場合は頂点)のXY座標を記憶することで、隣接する当該複数の点同士を繋げることでできる領域を現実物体の写る領域とする。
サーバ200のCPU201は、HMD101から認識した各現実物体までの距離を特定する。具体的には、HMD101に設置されている不図示の深度センサ(例えば赤外線デプスセンサ)を用いて、認識された各現実物体とHMD101との距離を測定する(ステップS1302)。
例えば、赤外線の高速光源と、距離画像データを取得するためのカメラ(CMOSイメージセンサ)を用い、照射した光がターゲットである物体に当たって戻る時間を画像の画素ごとにリアルタイムで測定することで、画素ごとの物体との距離を測定可能である。
当該測定処理は、3次元空間においてHMD101から各現実物体が、XYZ軸方向にどの程度は離れているかを特定する処理であり、各現実物体とHMD101との相対的な位置関係を特定して相対位置1506に記憶する処理である。
なお、HMD101に搭載された各カメラ装置と深度センサとの相対位置の情報は予めキャリブレーションにより外部メモリに記憶されているものとする。測定する距離の基準となる位置は、キャリブレーションによって予め設定されているHMD101の位置と、各現実物体の領域1505の中心位置とする。
なお、物体との距離測定の方法は必ずしも深度センサによらずともよい。例えばHMD101に設置された2つのカメラを使って三角測量を行い、物体までの距離、物体との位置関係を特定するようにしてもよい。
サーバ200のCPU201は、光学センサによって得たHMD101の絶対位置及び姿勢と、深度センサで計測したHMD101と各現実物体の3次元空間上の相対位置の情報を用いて、3次元空間上の各現実物体の絶対位置を特定する。当該絶対位置の情報を物体位置1508に記憶する。
特定した各現実物体の絶対位置と同じ仮想空間上の位置に、各現実物体の姿勢を示す座標系を設定することで、各現実物体の姿勢を決定する。当該姿勢の情報としては、XYZ軸それぞれの所定の回転角度を採用し、当該現実物体の3次元空間上における絶対的な姿勢として物体姿勢1509に記憶する。
サーバ200のCPU201は、当該HMD101の姿勢と、物体姿勢1509の値を用いて、HMD101と各現実物体との相対的な姿勢を求め、相対姿勢1507に記憶する。
なお、現実物体がマーカである場合は、先に説明した位置検出用マーカを用いたHMD101の位置姿勢計測の手法を用いて、当該マーカとHMD101の相対的な位置・相対的な姿勢を特定する。つまり、HMDの位置を原点(XYZ座標=0,0,0)とし、回転角度を0(XYZ軸方向への回転角度=0,0,0)とした場合における、マーカの位置姿勢を特定して記憶する。
サーバ200のCPU201は、視線方向の先にある物体を特定する(ステップS1303)。ここでは解析に用いている画像が現実画像であるため、視線方向の先にある物体は現実物体である。
例えば、図16に示すように、HMD101のディスプレイ(ディスプレイに表示する画像)の中央位置1611(着目点を示すカーソル1611)と領域1505(図16における1602及び1604)から、中央位置に表示されている現実物体を特定し、当該現実物体を視線方向の先にある物体として特定する。
1610の例においては、視線方向の先にある現実物体としてマーカが特定される。また、1620の例においては、視線方向の先にある現実物体として机が特定される。
サーバ200のCPU201は、着目履歴1510をメモリ上に生成して、ステップS1301〜S1303で特定した、日時1502の時点でユーザが着目していた(着目中だった)現実物体の物体情報1500を、着目履歴1510にコピーして記憶する(ステップS1304)。
着目履歴1510は、着目された物体の物体情報のリストであり、いつどの物体がユーザによって着目されていたかを示す履歴(ログ)である。なお、着目履歴1510の各項目、そこに記憶されている情報は物体情報1500と同じであるため説明は割愛する。
サーバ200のCPU201は、ステップS1301〜S1304の処理を、図4で説明した位置姿勢計測の終了の指示(例えばユーザからの操作)を受け付けるまで繰り返し実行する。
そして、位置姿勢計測の終了の指示を受け付けた場合、サーバ200のCPU201は、計測開始から終了までに記憶した着目履歴1510を、図4のステップS403で出力するログファイルの中に含めて記憶する。以上が図13の説明である。
次に図14を参照して、本発明の第2の実施形態における、現実物体にかかるログの解析処理の流れについて説明する。
サーバ200のCPU201は、図5のステップS504で、ステップS501で選択して読み込んだログファイルの中の、HMD位置姿勢ログ710の1レコードと、当該レコードの日時712と同じ日時を日時1512に持つ着目履歴1510を読み出す。
サーバ200のCPU201は、図5のステップS506で、解析対象のオブジェクトが視線の先にないと判定した場合に図14の処理を開始する。
サーバ200のCPU201は、ステップS504で読み出した着目履歴1510を参照して、ユーザが着目していた現実物体があったか判定する(ステップS1401)。ユーザが着目していた現実物体がなかった場合は処理を図5のステップS509に移行する。
ユーザが着目していた現実物体があった場合は、当該現実物体を着目対象のオブジェクト(物体)として決定する(ステップS1402/着目物体特定手段に該当)。ここではランキング情報730のモデル名732に当該現実物体の物体IDを挿入して記憶する処理を行う。この時点での着目時間733は0である。
また、ステップS504で取得したHMD位置姿勢ログ710の現在処理中のレコードの直後のレコードを取得し、そのレコードの日時712を取得して、処理中のレコードの日時712から当該次のレコードの日時712までの時間を、ユーザが当該現実物体に着目していた着目時間として733に加算する(ステップS1403)。そして処理をステップS509に移行する。以上が図14の説明である。
サーバ200のCPU201は、図6のステップS604の処理を実行することで現実物体及び仮想物体にかかる解析結果の仮想オブジェクトを生成する。なお、現実物体に対応する解析結果の情報を示す仮想オブジェクトの位置姿勢については、ステップS605で、当該現実物体の物体位置1508から所定距離離れた位置及び所定の姿勢(現実物体の位置から所定のオフセット値を適用したXYZ座標・姿勢)に決定して位置743、姿勢744に記憶するものとする。また、モデル名745には、当該現実物体の物体IDを挿入して記憶する。
サーバ200のCPU201は、ステップS607の処理を実行することで、現実物体及び仮想物体にかかる解析結果の仮想オブジェクト(例えば図12の1202)を、HMD101の位置姿勢に応じて表示可能である。
また、サーバ200のCPU201は、図10のステップS1001において、現実物体(モデル名745に記憶されている物体IDの物体)に対応付けて表示されている解析結果表示用の仮想オブジェクト(解析結果モデル名742のモデル/解析結果オブジェクト)の選択を受け付けることで、ステップS1003において当該現実物体にかかる選択ボタンを表示する。解析結果オブジェクトは、物体へのユーザの着目度を示す着目度オブジェクトである。
そして、ステップS1007で、ログファイル内の着目履歴1510から、選択中の仮想オブジェクトに対応する現実物体(物体ID)の全てのレコードを抽出する。
ステップS1008において、当該現実物体に着目していた各日時712におけるHMD101の位置713、姿勢714を読み出して、日時712ごとに、当該現実物体にユーザが着目していた時点のHMDの位置を示す仮想オブジェクト(図12でいう1202)を生成する。
そして、各仮想オブジェクト1202(解析結果オブジェクト1202)の位置を、各日時におけるHMD101の位置713に決定して記憶する。つまり、図12に示すように、各レコードの日時712の示す位置に、複数の仮想オブジェクト1202をそれぞれ配置する処理を行う(ステップS1008)。
なお、矢印型の仮想オブジェクトを生成して、図12の1210に示すように、HMD101の各日時712の位置713を始点として、当該現実物体にユーザが着目していた時点のHMDの視線方向を示す、現実物体上の着目点(終点)まで伸ばすよう形状変更および位置決定するようにしてもよい。
以上説明したように、本発明の第2の実施形態によれば、体験者が現実物体である対象物に着目していたかを容易に特定できる仕組みを提供することができる
また、どの位置の現実物体が着目されていたかを3次元空間上で容易に確認させることができる。
また、現実物体に着目していた際のHMDの位置姿勢を、3次元空間上で容易に表示させることができる。
<第3の実施形態>
図17〜19を参照して、本発明の第3の実施形態について説明する。なお、第1の実施形態及び第2の実施形態と共通する処理については記載・説明を省略する。
第3の実施形態においては、HMDの3次元空間上の絶対位置・姿勢が特定できない状態であっても、体験者が対象物に着目していたかを容易に特定できる仕組みを提供することができる。
まず図17を参照して、本発明の第3の実施形態における、物体同士の相対的な位置姿勢の記憶処理の流れについて説明する。
サーバ200のCPU201は、拡張現実の表示処理開始指示(例えばサーバ200に対するユーザ操作)を受け付けることで図17の処理を開始し、拡張現実の表示処理の終了指示(例えばユーザ操作)を受け付けるまでステップS1701〜S1720の処理を繰り返し実行する。
サーバ200のCPU201は、HMD101から受信した最新の画像をRAM上に読み出して(ステップS1701)、当該現実画像を解析し、当該画像に写る物体の認識処理及び認識した物体の情報を記憶する処理を行う(ステップS1702)。
具体的には、図13の説明で前述した手法を用いて画像上の物体(被写体)の輪郭の認識、画像上の当該物体が存在する座標(領域)の認識、当該物体が何か(どのような名称の物体か)の認識処理を行う。また、図13のステップS1304で説明したように、当該認識をした情報を対応付けて、図15の1500に記憶する。
サーバ200のCPU201は、ステップS1701で読み出した画像の中に、拡張現実の仮想オブジェクト表示用の登録画像(例えば、仮想オブジェクト配置用マーカ)を検出したか判定する(ステップS1703)。登録画像は例えば登録画像情報1900に予め記憶されている。
登録画像情報1900は、サーバ200の外部メモリ211に予め記憶されている。画像ID1901は、登録画像の識別情報である。モデル名1902は、登録画像に対応する仮想オブジェクトを示す。
モデル名1902の仮想オブジェクトは、拡張現実感の技術を用いて、カメラで撮像した現実画像に含まれている登録画像の大きさ、画像上の位置、姿勢に基づいて、当該登録画像の中心位置から位置1903の分だけXYZ方向に離れた位置に、姿勢1904の示す姿勢で配置される。
登録画像を検出した場合には処理をステップS1704に移行し、図13のステップS1302の説明で上述した手法を用いて、当該登録画像とHMD101との相対的な位置、相対的な姿勢を算出する(ステップS1704)。
サーバ200のCPU201は、当該登録画像の現実画像上の形状、大きさ、方向に基づいて、当該登録画像に対応するモデル名1902の仮想オブジェクトの画像を生成し(ステップS1705)、当該仮想オブジェクトを表示(重畳)する現実画像上の領域(座標)を特定して記憶する(ステップS1706)。
例えば、生成した仮想オブジェクトの画像に付与したIDと、表示領域の座標を、図19の仮想オブジェクト画像情報1910における画像ID1911と領域1912に記憶する。
領域1912には、画像ID1911の画像の外形の輪郭線上の点座標(XY座標)を複数記憶する。隣接する当該複数の点同士を繋げることでできる領域を画像ID1911の示す仮想オブジェクトの画像を重畳する領域とする。
また、モデル名1913には、画像ID1911の仮想オブジェクトの画像が、モデル名1913の示す仮想オブジェクトの画像であることがわかるように、当該仮想オブジェクトの名称を記憶する。
サーバ200のCPU201は、現実画像に当該仮想オブジェクトの画像を重ね合わせて合成したAR画像(重畳画像/拡張現実画像)を生成し、HMD101に送信することで、当該拡張現実画像をHMD101に表示する(ステップS1707)。
サーバ200のCPU201は、HMD101のユーザの視線方向を特定する(ステップS1708)。視線方向の特定手法は、図13のステップS1303で説明した手法を用いるものとする。
サーバ200のCPU201は、当該視線方向から、ステップS1707で表示した仮想オブジェクトにユーザが着目しているか判定する(ステップS1709)。ここではHMDの向いている方向=視線方向であるため、例えば、AR画像の中央位置に前記仮想オブジェクトの領域1912がある場合に、当該領域に表示されている仮想オブジェクトに着目していると判定する。
当該仮想オブジェクトに着目していると判定された場合、処理をステップS1710に移行し、仮想オブジェクトに着目していないと判定された場合処理をステップS1713に移行する。
ステップS1710において、サーバ200のCPU201は、オブジェクト上の、ユーザが着目していた点(3次元上着目点/XYZ座標)を特定する(ステップS1710)。
サーバ200のCPU201は、現実画像を撮像したHMDと撮像日時、当該現実画像においてユーザが着目していた仮想オブジェクトのモデル名と、仮想オブジェクト上の着目点、着目していた時点のHMD101と登録画像との相対位置・相対姿勢を特定して、図19に示す仮想オブジェクト着目履歴1920に記憶する(ステップS1711/ステップS1712)。
具体的には、メモリ上に仮想オブジェクト着目履歴1920を生成する。そして、ステップS1701で読み出した画像を撮像した、当該画像の送信元のHMD101のHMD IDを、HMD ID1921に記憶する。ステップS1701で読み出した現実画像の撮像日時を日時1922に記憶する。
モデル名1923に、着目していた仮想オブジェクトのモデル名を記憶し、相対位置1924、相対姿勢1925にはそれぞれHMD101とモデル名1923に記憶した仮想オブジェクトとの相対位置、相対姿勢の情報を記憶する。
また、仮想オブジェクト上の着目点(XYZ座標)の情報を、着目点1916に記憶する。
ステップS1713で、サーバ200のCPU201は、当該視線方向から、ユーザが登録画像に着目しているか判定する(ステップS1713)。つまり、視線方向の先に登録画像があるか判定する。
登録画像に着目していると判定された場合、処理をステップS1714に移行する。サーバ200のCPU201は、ステップS1714で、3次元空間における登録画像上の着目点(XYZ座標)を特定する。ディスプレイの中心点座標の画素について、深度センサを用いて特定した、現事物体までの距離を取得し、HMD101との位置関係を特定することができる。
サーバ200のCPU201は、現実画像を撮像したHMDと撮像日時、当該現実画像においてユーザが着目していた登録画像の画像IDと、登録画像上の着目点、着目していた時点のHMD101と登録画像との相対位置・相対姿勢を特定して、図19に示す現実物体着目履歴1930を生成して記憶する(ステップS1714)。
具体的には、ステップS1701で読み出した画像を撮像した、当該画像の送信元のHMD101のHMD IDを、HMD ID1931に記憶する。ステップS1701で読み出した現実画像の撮像日時を日時1932に記憶する。
物体ID1933に、着目していた登録画像の画像IDを記憶し、物体名1934には、当該登録画像の名称を記憶する。ここでは登録画像=マーカであるものとして、「マーカ」と記憶する。
物体画像1935には、当該登録画像(画像イメージ)を記憶する。HMD相対位置1936、HMD相対姿勢1937にはそれぞれHMD101と物体ID1933に記憶した登録画像との相対位置、相対姿勢の情報を記憶する。
また、仮想オブジェクト上の着目点(XYZ座標)の情報を、着目点1938に記憶する。
ステップS1713で、登録画像に着目していないと判定された場合に、処理をステップS1716に移行する。ステップS1716では、ユーザが登録画像以外の現実物体に着目しているか判定する。つまり、視線方向の先に登録画像以外の現実物体があるか判定する(ステップS1716)。
登録画像以外の現実物体に着目していると判定された場合、HMD101と当該現実物体との相対的な位置・姿勢を特定する(ステップS1717)。
また、視線の先にある現実物体に物体IDを付与し、着目した現実物体の履歴として、現実物体着目履歴1930の1933に記憶する。また、HMDとの相対位置姿勢を1936及び1937に記憶する。
物体名1934を推測し、記憶する。また、物体画像1935に、当該現実物体の画像を切り出して記憶する。HMD ID1931は、ステップS1701で読み込んだ現実画像を撮像したHMDのIDである。日時1932は、当該現実画像の撮像日時である。
また、現実画像上で最も大きい登録画像を特定して(ステップS1718)、当該登録画像と当該現実物体との相対的な位置姿勢の関係を特定する(ステップS1719)。
当該登録画像と現実物体の相対的な位置姿勢は、当該登録画像とHMD101の相対的な位置姿勢の情報、及び、当該現実物体とHMD101の相対的な位置姿勢の情報を用いて算出する。
また、当該登録画像のIDを登録画像ID1939に記憶し、当該登録画像と着目中の現実物体の相対位置(XYZ軸方向それぞれの距離)と、相対姿勢の値を登録画像相対位置1940、登録画像相対姿勢1941に記憶する(ステップS1720)。
サーバ200のCPU201は、拡張現実画像の表示処理の終了指示を受け付けた場合、拡張現実画像の表示処理開始から終了までの間に記憶された仮想オブジェクト着目履歴1920と現実物体着目履歴1930の情報を合わせて、ログファイルとして外部メモリ211に出力して記憶する(S1721)。以上が図17の説明である。
図17の説明によれば、HMDと物体(仮想オブジェクト又は現実物体)との相対的な位置姿勢を特定して記憶することができる。
また、現実物体同士(登録画像と登録画像以外の現実物体)の相対的な位置姿勢を特定して記憶することができる。
サーバ200のCPU201は、図5及び図14のログ解析の処理を実行する。ステップS504においては、ログファイル内の仮想オブジェクト着目履歴1920、及び現実物体着目履歴1930のレコードのうち未処理のレコードを1つ取得する。
ステップS509では、ログファイル内の仮想オブジェクト着目履歴1920、及び現実物体着目履歴1930の全てのレコードを処理済みか判定し、未処理のレコードが有る場合には処理をステップS504に戻す。全てのレコードを処理済みの場合は処理をステップS510に移行する。
次に図18を参照して、本発明の第3の実施形態における、解析結果の出力処理の流れについて説明する。
サーバ200のCPU201は、ログ解析結果の表示指示(例えばユーザ操作)を受け付ける(ステップS1801)。例えば、サーバ200の外部メモリに記憶されている解析結果のファイルの選択を受け付け、サーバ200の不図示の表示画面において解析結果の表示ボタンの押下を受け付けることで、当該解析結果ファイルの示す解析結果の表示指示を受け付けるものとする。ここでいう解析結果ファイルとは図7に示すランキング情報730である。
サーバ200のCPU201は、HMD101のカメラによって撮像され受信・記憶している最新の現実画像を取得し(ステップS1802)、当該現実画像の中に登録画像が含まれているか判定する(ステップS1803)。つまり、HMD101が登録画像を撮像中か判定する。
現実画像の中に登録画像が含まれている場合、サーバ200のCPU201は、ステップS1801で選択された解析結果のファイル(ランキング情報730に示す情報を持つファイル)をメモリ上に読込み(ステップS1804)、読み込んだ解析結果の情報を1つ取得する(未処理のランキング情報730のレコードをランキングが高い順に取得する/ステップS1805)。
サーバ200のCPU201は、取得した解析結果の情報を示す仮想オブジェクトを生成して(ステップS1806)、当該仮想オブジェクトの位置姿勢を決定して(ステップS1807)、外部メモリ211に記憶する。
解析結果の情報を示す仮想オブジェクトの位置姿勢は、当該仮想オブジェクトに対応するモデル名732が仮想オブジェクトを示す場合(つまり、仮想オブジェクトの着目度合いを示す仮想オブジェクトの場合には)、モデル名732が示す当該仮想オブジェクトの位置姿勢を基準として、所定距離だけ離れた位置及び姿勢に決定する。
モデル名732が現実物体を示している場合(つまり、マーカ又はその他の現実物体に対応する仮想オブジェクトの場合には)、モデル名732が示す現実物体の位置姿勢を基準として、所定距離はなれた位置及び姿勢に決定する。
基準とする現実物体の位置姿勢は、当該現実物体がマーカ(登録画像)である場合には、HMD101で撮像した画像に写るマーカの大きさや角度から特定可能な、HMD101からの相対位置姿勢であるものとする。
また、当該現実物体がマーカ以外の現実物体である場合には、ステップS1720で当該現実物体と対応付けて記憶した登録画像の位置から、登録画像相対位置1940だけ離れた、登録画像相対姿勢1941によって示される姿勢を、当該現実物体の位置姿勢とする。
また、図7の解析結果モデル情報740に示すように、ステップS1801で選択された解析結果に対応するログIDをログID741に持つ解析結果モデル情報を生成する。
そして、解析結果モデル名742に生成した解析結果を示す仮想オブジェクトのファイル名を挿入し、モデル名745に、ユーザが着目していた解析対象のモデル名又は登録画像の画像ID又は現実物体の物体IDを挿入し、当該モデル名745の仮想オブジェクト、又は現実物体の位置・姿勢を基準として、当該位置・姿勢所定の位置姿勢の値を位置743、姿勢744に挿入して記憶する(ステップS1807)。
サーバ200のCPU201は、ステップS1804で取得したファイル内の全ての解析結果(ランキング情報730内の全てのモデル)に対してステップS1805〜S1807の処理を実行済みか判定する(ステップS1808)。
未実行の場合には処理をステップS1804に戻して未処理の解析結果を取得する。実行済みの場合には、処理をステップS1809に移行する。
サーバ200のCPU201は、ステップS1802で読み出した最新の画像に含まれる登録について、図17のステップS1704〜S1707で説明した処理を実行することで、当該登録画像に対応付けられた仮想オブジェクトのAR画像(拡張現実画像/重畳画像)を生成して、HMD101に出力・表示させる。つまり、着目対象の物体の識別表示処理を行う。以上が図18の説明である。
また、図10のステップS1007において、ステップS1001で選択された仮想オブジェクトに着目中のHMD101の位置姿勢のレコードを、表示中の解析結果オブジェクトに対応するログファイルから取得する。つまり、選択中の仮想オブジェクトとHMD101の相対的な位置姿勢の情報を取得する。
そして、選択中の当該仮想オブジェクトの位置姿勢を基準として、日時1922ごとに、当該仮想オブジェクトにユーザが着目していた時点のHMDの位置を示す仮想オブジェクト(図12でいう1202)を生成する。
具体的には、当該解析結果オブジェクトの位置姿勢を、当該仮想オブジェクトの位置姿勢(登録画像の位置姿勢を基準とし場合の、相対位置1924、相対姿勢1925の示す位置)を基準として所定距離だけ離れた位置及び姿勢に決定し、記憶する(ステップS1008)。
また、図10のステップS1001において、現実物体に対応付けて表示されている解析結果表示用の仮想オブジェクトの選択を受け付けることで、ステップS1003において当該現実物体にかかる選択ボタンを表示する。そして、ステップS1007で、現実物体着目履歴1930の日時1932ごとに、当該現実物体に対応する解析結果オブジェクトを生成する。
そして、各解析結果表示オブジェクトの位置姿勢を、日時1932ごとの、HMD101の位置姿勢に決定する。当該HMD101の位置姿勢は、現実物体着目履歴1930の各レコードにおいて、当該現実物体に対応するHMD相対位置、HMD相対姿勢から特定する。
なお、図12の1210に示すように、HMD相対位置、及びHMD相対姿勢から特定される、当該仮想オブジェクト又は現実物体にユーザが着目していた時点のHMDの視線方向を示す直線(矢印)の仮想オブジェクトを生成して仮想空間に配置すべく位置決定するようにしてもよい。
以上説明したように、本発明の第3の実施形態によれば、HMDの3次元空間上の絶対的な位置姿勢が特定できない状態において体験者が対象物に着目していたかを、3次元空間上で容易に特定できる仕組みを提供することができる。
尚、上記実施形態は、本発明に係る例であると認識されたい。たとえば、HMD101の位置姿勢を検出するため、上記実施形態では位置検出用マーカが撮像した視野内に3つは存在するものとして、位置検出用マーカを部屋中に多数張り付けるものとしたが、これによって本発明が限定されるものではない。位置検出用マーカには向きを規定する印があり、位置検出用マーカの座標だけでなく、形状や寸法も既知であれば、撮像した画像の位置検出の歪み、サイズ、印の位置から、1つの位置検出用マーカからだけでもHMD101の位置姿勢を特定できる。
また、現実物体の位置姿勢の特定方法は必ずしも上述した方法に限るものではない。例えば、モデル情報720と同じように、予め、物体ID、位置姿勢、着目フラグ、着目エリアを対応付けて、現実物体の情報として外部メモリに記憶しておく。サーバ200のCPU201は、HMD101の視線方向に当該物体IDがある場合、つまり、視線方向の示すベクトルと着目エリアとが交わった場合に、当該着目エリアに対応する現実物体が視線方向の先にあると判定し、当該現実物体を着目対象の現実物体として特定することが可能である。
また、撮像した現実画像の中から同じ姿勢の登録画像を2つ以上検知した場合に、当該2つの登録画像の最も離れた位置にある頂点を線分で結び、それを対角線とした平面を現実物体として認識してもよい。例えば、壁や机の角にマーカを貼り付けている状態を想定する。
この場合、当該面の中央点を当該平面の示す現実物体の位置として決定する。また、当該平面の示す現実物体の姿勢は、当該登録画像の姿勢であるものとする。
また、上記実施形態においては、着目時間の長さで着目殿ランキングを決定したが、例えば着目した回数を着目対象の物体(仮想オブジェクト及び現実物体)ごとに記憶しておき、より回数が多い物体の着目度をより上位にランキングするようにしてもよい。着目回数は、ユーザがある物体に着目し始めてからその物体に着目しなくなるまでを、1回着目していたものとしてカウントして記憶する。
HMD101はシースルー型の装置であってもよい。シースルー型の場合、ディスプレイが半透明であり、現実画像は表示する必要がないため、例えば現実画像を透過率100%として、透過率100%の現実画像の上に透過率0%の仮想オブジェクトの画像を重畳した重畳画像をHMD101に送信して表示させるようにする。
上記実施形態においては、HMDのディプレイの中心に位置する物体=着目対象の物体としたが(つまりHMD101の向いている方向の先にある物体を着目対象の物体としたが)、着目対象の物体の特定方法はこれに限るものではない。
例えば、特開2010−199789号公報や、特開2016−127587号公報に記載されているように、HMDに、ユーザの眼に向けて非可視光を照射する非可視光照射装置、ハーフミラーを設置し、ユーザの眼で反射された非可視光を撮像するカメラを設置して反射光を撮像し、ユーザの眼がディスプレイ上の(表示画面に表示する現実画像上の)どこを見ているのかを特定する公知の技術を用いてもよい。これにより、HMD101のユーザが画面上の何に着目しているかを特定可能である。
例えば図21の2100〜2120に示すように、カーソル1611をユーザの眼がディスプレイ上のどこを見ているかに応じて移動させることができる。つまり、カーソル1611の位置=ユーザの画像上の着目点である。2101は仮想オブジェクトを表示する/している領域である。2120はユーザが当該仮想オブジェクトに着目している状態である。
この場合、視線方向=HMD101からユーザが着目している物体の3次元空間上の着目点への方向であるものとする。なお、3次元空間において、ユーザが当該現実物体の外面上のどの位置(XYZ座標の示す点)に着目しているかは、ディプレイに表示された画像上の物体の大きさ、向き、形状及びユーザが当該物体上で着目している点(画像上のXY座標)と、予め外部メモリに記憶されている当該物体の基準の大きさ、向き、形状を用いて算出することができる。
また、解析結果の仮想オブジェクトである742は、図8の810に示す形状、表示形態に限るものではない。例えば、図20に示すように、着目対象の物体2001に着目した着目点ごとに2002に示すような仮想オブジェクト(解析結果オブジェクト)を生成して、当該仮想オブジェクトの位置を各着目点の位置に決定するようにしてもよい。
ユーザは、2002に示す仮想オブジェクトが多く配置されている物体ほど、よく着目されていた物体であると確認することができる。つまり、2002に示す仮想オブジェクトの数によって着目度合いを提示し、確認させることができる。
また、着目点をクラスタリングによって複数のクラスタに分類(複数グループにグルーピング)し、2010に示すように、クラスタ内の着目点の数に応じて、例えばヒートマップのように表示すべく、クラスタの示す着目点の色を変化させるようにしてもよい。ユーザは、2111等の仮想オブジェクトの色によって、より着目されていた物体を確認することができる。つまり、各物体の着目度合いを提示し、確認させることができる。
また、図10のステップS1008で位置姿勢を決定した、HMD101の位置姿勢を示す仮想オブジェクトのそれぞれの位置のクラスタリングを行い、クラスタ内の位置を内包する、当該クラスタを示す仮想オブジェクトを生成して、クラスタの中心位置に配置するようにしてもよい。また、クラスタ内のHMDの位置の数に応じて、クラスタの示す着目点の色を変化させるようにしてもよい。これにより、ユーザは着目対象の物体がどの位置からよく見られていたかを容易に確認できるようになる。
当該HMD101の位置(HMD101の位置姿勢を示す仮想オブジェクト)のクラスタリングは、図5の処理において複数のHMD101のログファイルが読み込まれて生成された解析結果を表示中の場合には、複数ユーザの視点(HMD101の位置)をグルーピングするため、より精度の高い結果を確認することができる
上記実施形態において、解析結果オブジェクト1202は球体形状であるが、物体に着目していた際のHMD101の回転状態を確認しやすくすべく、例えばHMD101と同じ形状の仮想オブジェクトを1202の代わりとしてもよい。
上記実施形態においてはMR及びARについて説明したが、HMD101の動きに連動して仮想空間上のカメラの位置姿勢を変更可能なVRの分野において、本発明を適用可能なことはいうまでもない。VRで本発明を実施する場合、仮想オブジェクトに対する着目度の特定及び表示を行うものとする。
解析結果の情報は、例えばサーバ200に接続されたディスプレイにおいて、所定のアプリケーションで開くことで、テキスト情報として表示し、ユーザに閲覧させることができる。
上記実施形態においてはブースのような、物体を陳列する際を例にあげたが、例えば自動車などのデザイン検証において、新しくデザインした自動車の内装、外装のうち、ユーザがどこにどの程度、どこから着目していたかの検証等にも利用可能である。特に部品(物体)が多く組み合わさり、複雑な形状となっている物体について、どの部品がどの程度見られたかを着目点の座標一覧や着目対象の部品の座標一覧で提示するよりは、3次元空間上で、着目された物体に対応付けて着目度を表示した方が、物体ごとの着目度をユーザに容易に確認させることができる。
なお、HMD101とサーバ200が一体であり、当該HMD101とサーバ200が一体化した筐体が、各フローチャートの全処理を行うことで本発明を実現するよう構成してもよい。
前述した実施形態の機能を実現するプログラムを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記録媒体に格納されたプログラムを読出し実行することによっても、本発明の目的が達成されることは言うまでもない。
この場合、記録媒体から読み出されたプログラム自体が本発明の新規な機能を実現することになり、そのプログラムを記憶した記録媒体は本発明を構成することになる。
また、プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、DVD−ROM、磁気テープ、不揮発性のメモリカード、ROM、EEPROM、シリコンディスク、ソリッドステートドライブ等を用いることができる。
また、コンピュータが読み出したプログラムを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムの指示に基づき、コンピュータ上で稼働しているOS(オペレーティングシステム)等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPU等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
さらに、本発明を達成するためのプログラムをネットワーク上のサーバ、データベース等から通信プログラムによりダウンロードして読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。なお、上述した各実施形態およびその変形例を組み合わせた構成も全て本発明に含まれるものである。