説明

入力装置、入力制御方法及び入力制御プログラム

【課題】画像に重畳表示された仮想物体に対し、ユーザの意図する仮想物体を適切に押下させること。
【解決手段】画像を取得する実物体検出部と、画像に重畳する仮想物体の表示位置を決定する位置決定部と、ユーザの視点位置を検出する視点検出部と、決定された表示位置で仮想物体を画像に重畳表示する重畳処理部と、検出された視点位置と重畳表示された仮想物体の位置とに基づき、仮想物体の押下判定に用いる位置を変更する押下判定部と、を備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、画像に重畳表示された仮想物体を用いて入力を行う入力装置、入力制御方法及び入力制御プログラムに関する。
【背景技術】
【0002】
コンピュータにおける文字入力装置としては、主にキーボードが利用される。ほとんどのコンピュータでは、キーボードは入力装置として標準装備されている。キーボードは、多くのユーザにとって使い慣れた装置である。
【0003】
そのため、従来から、タブレット端末などを代表とするキーボードが装備されていないコンピュータを使用する場合などでも、仮想キーボードを用いてキーボードを模倣する入力方法が提案されている。例えば、次の以下のような技術が提案されている。
【0004】
仮想キーボードシステムは、ディスプレイ画面にキーボード画像を表示し、指先センサにより取得された指の位置をキーボード画像と重ねることによって、現在入力可能なキーの位置を示す。キー入力検出手段は、実際の入力が行われたのかを判断する。
【0005】
また、他の仮想キーボードシステムは、ディスプレイ上にキーボード画像を表示し、指先・動き検出部の結果を利用して、手の形を画面上のキーボードの上に表示することで、現在入力可能なキーの位置を示す。
【0006】
また、キー入力処理装置は、光学シースルー型のHMD(Head Mounted Display)を利用した環境での仮想キーボードである。キー入力処理装置は、HMDに投影されたキーボード画像のキーと、HMD越しに見える自分の手の指先の位置とが重なっているかを判断して、現在入力可能なキーの位置を示す。
【0007】
また、ヘッドマウントディスプレイ装置は、HMDを利用する仮想キーボードであり、キーボード画像をHMDから机などの面に投影する。キーボード像と自分の指先はHMDの「覗き部」から直接自分の目で見ることができる。HMDにはカメラが付いており、これにより取得された画像を解析することによって、どのキーの上に自分の指先が位置しているかを判断する。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2000−242394号公報
【特許文献2】特許第4099117号公報
【特許文献3】特許第3214158号公報
【特許文献4】特開2009−104429号公報
【発明の概要】
【発明が解決しようとする課題】
【0009】
従来の仮想キーボードでは、例えば、視点がキーボードの真上にあると仮定したときの指先の位置を示して入力可能なキーを示す。他の従来の仮想キーボードでは、視点と指先の位置を結ぶ視線上にあるキーボード面との交点にあるキーを入力可能なキーと判断する。視点は、例えばカメラによる撮影点である。
【0010】
一方で、HMDには、直接あるいはハーフミラー越しに実際の風景を確認できる「光学シースルー型」と、視線に近い位置から撮影したカメラからの映像を表示したディスプレイを見る「ビデオシースルー型」と呼ばれるタイプがある。拡張現実環境を提供するために、実空間の物体上の適切な位置に仮想物体を重畳表示する。拡張現実環境とは、現実環境にコンピュータを用いて情報を付加提示する技術、および情報を付加提示された環境そのものを示す。
【0011】
「光学シースルー型」のHMDの場合、適切な重畳表示のために仮想物体の表示位置を合わせるのは、特許文献1に記載の視線解析などが必要となるため、技術的に困難な課題が多い。そのため、開示の技術では、「ビデオシースルー型」のHMDの利用を想定する。
【0012】
「ビデオシースルー型」のHMDにも、いくつかの問題点がある。この問題点は、「バーチャルリアリティ学」(ISBN:978-4769351382)などに記載されている。例えば、ユーザは、カメラ越しの画像を見ることになるために、裸眼のときと比較して、視野角、解像度、遮蔽矛盾、システム遅延、焦点深度などの問題があり、違和感を覚えることが多い。
【0013】
例えば、ビデオシースルー型の視野角の問題に対し、HMD装置の表示領域から主表示装置の表示領域を取り除く技術がある(特開2006-267604号公報)。
【0014】
ここで、拡張現実環境において、仮想物体として選択オブジェクト(例えば、仮想キーボード、選択ボタンなど)をカメラ越しの画像に重畳表示し、この仮想物体をユーザの指などで押下する場合を考える。この場合、視野角に関する見え方の違和感と焦点深度に関する奥行きの知覚の問題により、仮想物体をうまく押下することができない。
【0015】
そこで、開示の技術は、上記問題に鑑みてなされたものであり、画像に重畳表示された仮想物体に対し、ユーザの意図する仮想物体を適切に押下させることができる入力装置、入力制御方法及び入力制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【0016】
開示の一態様における入力装置は、画像を取得する実物体検出部と、前記画像に重畳する仮想物体の表示位置を決定する位置決定部と、ユーザの視点位置を検出する視点検出部と、決定された表示位置で前記仮想物体を前記画像に重畳表示する重畳処理部と、検出された前記視点位置と重畳表示された前記仮想物体の位置とに基づき、前記仮想物体の押下判定に用いる位置を変更する押下判定部と、を備える。
【発明の効果】
【0017】
開示の技術によれば、画像に重畳表示された仮想物体に対し、ユーザの意図する仮想物体を適切に押下させることができる。
【図面の簡単な説明】
【0018】
【図1】仮想テンキーを真上方向から入力する場合を示す図。
【図2】仮想キーボードを真上方向から入力する場合を示す図。
【図3】仮想テンキーを斜め方向から入力する場合を示す図。
【図4】仮想キーボードを斜め方向から入力する場合(その1)を示す図。
【図5】仮想キーボードを斜め方向から入力する場合(その2)を示す図。
【図6】仮想キーボードを斜め方向から入力する場合(その2)を示す図。
【図7】正解位置に対する誤入力時の位置分布を示す図。
【図8】仮想キーボードに対する誤入力を説明するための図。
【図9】実施例1におけるシステムの一例を示す図。
【図10】実施例1におけるシステムの構成の一例を示すブロック図。
【図11】入力装置の機能の一例を示すブロック図。
【図12】仮想物体位置決定部の機能の一例を示すブロック図。
【図13】押下判定領域の変更の一例を示す図。
【図14】実施例1における入力制御処理の一例を示すフローチャート。
【図15】実施例2における入力装置の機能の一例を示すブロック図。
【図16】仮想キーの表示位置及び押下判定領域を変更する例(その1)を示す図。
【図17】仮想キーの表示位置及び押下判定領域を変更する例(その2)を示す図。
【図18】仮想キーの押下判定領域を変更する例(その1)を示す図。
【図19】仮想キーの押下判定領域を変更する例(その2)を示す図。
【図20】実施例2における入力制御処理の一例を示すフローチャート。
【図21】基準面と閾値との関係を示す図。
【図22】押下判定部による押下判定処理の一例を示すフローチャート。
【図23】実施例3における入力装置の機能の一例を示すブロック図。
【図24】実施例3における入力制御処理(その1)の一例を示すフローチャート。
【図25】実施例3における入力制御処理(その2)の一例を示すフローチャート。
【図26】誤入力及び正しい入力を検出する処理の一例を示すフローチャート。
【図27】誤入力及び正しい入力を検出する具体例を説明するための図。
【発明を実施するための形態】
【0019】
以下に説明する実施例では、仮想物体としての仮想キーボードを3次元空間中に表示して、ユーザ自身の指先で操作することを想定する。仮想キーボードは立体的な形状を持っているので、キーの上部側から正しく押すことで入力として認識される。
【0020】
ユーザの視点は移動するので、ビデオシースルー型のHMD越しにキーを見た時に、キーまでの距離感が正しく認識されないことが問題となる。カメラの撮像範囲と目の視野との違いや焦点深度の問題、また、画面に表示されるまでの時間的な遅れなどが生じることなどから、実際の物体(実物体ともいう)との距離感を把握することが困難な場合がある。
【0021】
このため、視覚から得られる情報と自身の感覚とのズレから、うまく仮想キーボードを操作できない。具体的には、入力したいキーを操作できない、あるいは目的のキーの周辺にある別のキーを操作してしまう、という問題が発生する。
【0022】
この問題に対し、発明者らは次の実験を行った。この実験は、12名の被験者に対して、仮想キーボードを使用し、指示したキーの入力を行ってもらう実験である。また、この実験では、視点やキーの向きを変えて入力を行い、誤入力の発生率と、誤入力されたキーと、指示したキーとのズレ方向について調査する。この実験は、被験者の指先にマーカを付けてもらい、カメラ越しの画像(映像)をディスプレイ画面で見ながら、被験者はキーを押す。
【0023】
実験は、キーの真上からの視点で入力を行う場合と、キーの斜めからの視点で入力を行う場合とで行われた。
【0024】
(真上からの視点)
図1は、仮想テンキーを真上方向から入力する場合を示す図である。図1に示す例では、「5」のテンキー11を、マーカ12を付した指で押下する場合を示す。
【0025】
図2は、仮想キーボードを真上方向から入力する場合を示す図である。図2に示す例では、「G」のキー21を、マーカ12を付した指で押下する場合を示す。仮想キーボードは、例えばQWERTYキーボードである。
【0026】
(斜めからの視点)
図3は、仮想テンキーを斜め方向から入力する場合を示す図である。図3に示す例では、「6」のテンキー13を、マーカ12を付した指で押下する場合を示す。
【0027】
図4は、仮想キーボードを斜め方向から入力する場合(その1)を示す図である。図4に示す例では、「C」のキー22を、マーカ12を付した指で押下する場合を示す。
【0028】
図5は、仮想キーボードを斜め方向から入力する場合(その2)を示す図である。図5に示す例は、図4に示す例とは仮想キーボードの角度が異なる。図5に示す例では、「X」のキー23を、マーカ12を付した指で押下する場合を示す。
【0029】
図6は、仮想キーボードを斜め方向から入力する場合(その2)を示す図である。図6に示す例は、図4及び図5に示す例とは仮想キーボードの角度が異なる。図6に示す例では、「F」のキー24を、マーカ12を付した指で押下する場合を示す。図1〜6は、ユーザが仮想キーを押すとき、仮想キーが手に重畳して表示される例である。また、図4〜6に示すように、斜め方向からの入力については、被験者に複数の角度からの入力を行ってもらった。
【0030】
(実験結果)
真上からの視点での入力に対する実験結果は次の通りである。
入力正解率:90.6% 誤入力率:9.4%
斜めからの視点での入力に対する実験結果は次の通りである。
入力正解率:63.5% 誤入力率:36.5%
以上の実験結果から、真上からの視点では、キーを平面的に見ることができるため、指先位置と、描画されたキーとの位置関係を適切に把握できていることが分かる。
【0031】
一方、斜めからの視点では、3次元での指先位置と、描画されたキーとの位置関係を適切に把握できないため誤入力が多い。また、視点の違いやキーの表示方向にかかわらず、正解キーの視点側手前を間違えて押下することが多いことが分かった。
【0032】
図7は、正解位置に対する誤入力時の位置分布を示す図である。図7に示すように、誤入力時には、正解位置に対して、視線方向の手前を押下してしまう傾向がある。
【0033】
図8は、仮想キーボードに対する誤入力を説明するための図である。図8に示すように、斜め方向からの視点で、目的のキー71を押下する場合、視線方向の手前を誤入力する場合が多い。これを平面的に表現すると、目的のキー71を押下するはずが、キー72を押下してしまうことになる。
【0034】
実際には、ユーザは仮想キーに対して斜め方向から見ることがほとんどである。これを考慮すると、カメラ越しの画像に仮想キーを重畳する場合には、斜め方向からの仮想キーを重畳することで、ユーザの操作感を向上させる。しかしながら、上述した実験のように、斜め方向からの仮想キーを画像に重畳すると、誤入力が発生する。
【0035】
以下、上記実験などに基づき、誤入力を防ぐ各実施例について、添付図面を参照しながら説明する。
【0036】
[実施例1]
<システム>
図9は、実施例1におけるシステムの一例を示す図である。図9に示す例では、ユーザはカメラ付きのHMD(Head Mounted Display)を装着し、HMDに重畳表示された仮想キーボードを用いて文字入力を行う。ユーザは、仮想キーを押下すると、その仮想キーに対する文字が入力され、HMDはコンピュータと無線通信することで、コンピュータのアプリケーションに文字を送信する。
【0037】
アプリケーションは、受信した文字を入力し、アプリケーションの表示画面情報をHMDに送信する。HMDは、受信したアプリケーションの表示画面情報を例えばHMDに表示する。
【0038】
図9に示すシステムにおいて、仮想キーボードが重畳された画像をHMDに表示するのではなく、ディスプレイやプロジェクタなどに表示してもよい。また、文字入力の判定処理などは、HMDで行うのではなく、コンピュータやスマートフォンなどの他機で行われてもよい。また、HMD近辺のカメラで撮影した画像を、ユーザからの視点にするため視点変換を行って、視点変換後の画像に仮想キーボードを重畳してHMDに表示してもよい。
【0039】
開示のシステムは、拡張現実環境において、選択オブジェクト、例えば仮想的なキーボードを3次元空間中に表示し、あたかもそこに本物のキーボードが実在するかのようにユーザ自身の指で直感的に操作する。
【0040】
<構成>
図10は、実施例1におけるシステムの構成の一例を示すブロック図である。図10に示す例では、システムは、入力装置101、画像入力装置110、視点・視線検出装置111、表示装置112、アプリケーション113を有する。各装置は、複数の装置が組み合わされて1つの装置を構成してもよい。
【0041】
画像入力装置110は、例えばカメラであり、ユーザの視点に近い位置に設置され、視線と同じ方向の画像を撮影し、取得する。取得された画像は、入力装置101に出力される。なお、画像入力装置110は、必ずしもユーザの視点に近い位置に設置される必要はなく、ユーザの視点とは別の位置にある場合は、画像に対して視点変換を行えばよい。
【0042】
視点・視線検出装置111は、撮像部などを含み、ユーザの視点の位置と、見ている方向(視線方向)を検出する。視点・視線検出装置111は、視線を検出する方法として、角膜及び強膜の境界を検出する方法(強膜トラッカー法)、角膜表面での反射光を検出する方法(角膜反射法)、眼球の電位差を測定する方法(EOG法)、サーチコイルを内蔵したコンタクトレンズを装着する方法(サーチコイル法)などがある。詳しくは、「"視線インタフェースから視線コミュニケーションへ",大野健彦,情報処理学会研究報告、HI,ヒューマンインタフェース研究会報告,P.171-178,2001」や"マンマシンシステム工学 視覚系指標の計測と分析(1)〜眼球運動〜"(http://hydro.energy.kyoto-u.ac.jp/Lab/staff/shimoda/lecture2005/mms/ocular1.pdf)を参照されたい。
【0043】
また、瞳孔中心法と、瞳孔―角膜反射法を組み合わせて視線を検出する技術がある(特開2001−61785号公報を参照されたい)。また、近年は、Webカメラ映像を用いて視線を検出する技術があり、可視光、近赤外光などを利用し、眼球におけるその反射像を利用して視線を特定する。具体的には、瞳孔と虹彩の位置から視線方向を推定する。
【0044】
また、離れた位置から視線を検出できる技術(株式会社ライフテックサポートの視線入力意思伝達装置)や、移動中でも視線を検出できる技術(竹井機器工業株式会社のTalkEyeII)がある。
【0045】
視点・視線検出装置111は、画像入力装置110をユーザの視点に近い位置に設置した場合、視点の位置について、画像入力装置110(例えばカメラ)の位置に等しいとみなす。また、視点・視線検出装置111は、頭部の位置が分かるようなセンサを利用する場合、頭の位置から眼球の位置を推定することができる。例えば、株式会社美貴本の「Track IR」などのヘッドトラッキングシステムなどがある。
【0046】
視点・視線検出装置111は、公知のいずれかの方法を用いて、ユーザの視点、視線を検出し、入力装置101に出力する。
【0047】
表示装置112は、画像入力装置110が撮影した画像、又はその画像に対して入力装置101により仮想物体が重畳された画像を表示する。以下、表示装置112は、HMDを例にして説明するが、通常のディスプレイやプロジェクタであってもよい。通常のディスプレイとは、コンピュータのモニタやテレビなどのディスプレイをいう。
【0048】
アプリケーション113は、コンピュータにより実行されるアプリケーションであり、例えばWindows(登録商標)のWordやExcelなどのアプリケーションである。アプリケーション113は、入力装置101から入力コマンド(例えば文字や数字)などを受け取る。また、アプリケーション113は、取得した文字や数字を表示した画面の画面情報を入力装置101に出力してもよい。
【0049】
入力装置101は、例えば拡張現実環境を提供する装置である。入力装置101は、制御部102、主記憶部103、補助記憶部104、通信部105を有する。各部は、バスを介して相互にデータ送受信可能に接続されている。
【0050】
制御部102は、コンピュータの中で、各装置の制御やデータの演算、加工を行うCPU(Central Processing Unit)である。また、制御部102は、主記憶部103や補助記憶部104に記憶されたプログラムを実行する演算装置であり、入力部や記憶部からデータを受け取り、演算、加工した上で、出力部や記憶部に出力する。
【0051】
主記憶部103は、ROM(Read Only Memory)やRAM(Random Access Memory)などであり、制御部102が実行する基本ソフトウェアであるOSやアプリケーションソフトウェアなどのプログラムやデータを記憶又は一時保存する記憶装置である。
【0052】
補助記憶部104は、HDD(Hard Disk Drive)などであり、アプリケーションソフトウェアなどに関連するデータを記憶する記憶装置である。
【0053】
通信部105は、アプリケーション113に対し、有線又は無線で通信を行う。例えば、入力コマンドや画面情報などが通信される。
【0054】
<機能>
図11は、入力装置101の機能の一例を示すブロック図である。図11に示す例では、入力装置101は、実物体検出部201、仮想物体位置決定部202、視点検出部203、重畳処理部204、押下判定部205、入力コマンド生成部206を有する。なお、入力装置101の各部は、例えば制御部102及びワークメモリとして主記憶部103により実現されうる。また、入力コマンド生成部206は、入力コマンドを送信するときは、例えば通信部105により実現されうる。
【0055】
実物体検出部201は、画像入力装置110から取得した画像を解析し、物体の位置や距離を把握する。物体は、例えば手や指や机などである。この物体を仮想物体と比較して実物体と呼ぶ。また、実物体検出部201は、仮想物体が重畳されている場合は、その仮想物体の領域付近の実物体の面、距離などを検出する。
【0056】
実物体検出部201は、例えば手や指などの実物体を検出する際には、肌色検出やエッジ抽出などを行い、指を検出することができる。また、指にマーカなどを付して検出することもできる。
【0057】
実物体検出部201は、例えば、仮想キーボードを表示したい面と、指に付されたマーカとを用いて、画像(カメラ画像)からマーカと画像入力装置110との相対位置を算出する。
【0058】
マーカを利用した位置のカメラ位置の推定については「拡張現実感システム構築ツールARToolkitの開発」(加藤博一著,電子情報通信学会技術研究報告,PRMU,パターン認識、メディア理解 101(652),79-86,2002-02)や、"3Dキャラクターが現実世界に誕生!ARToolkit拡張現実空間プログラミング入門"(ISBN 978-4048673617)を参照されたい。
【0059】
簡潔に説明すると、実物体検出部201は、マーカのサイズが既知であるとし、画像入力装置110の撮像パラメータと、撮像中のマーカの形状から、マーカの存在する面やマーカの位置・姿勢を推定する。
【0060】
マーカ座標系のn個の特徴点の座標値を(X,Y,Z)(i=0,1,・・・,n−1)とし、マーカ座標系からカメラ座標系への変換行列をTcm、カメラの透視変換行列をCとする。このとき、画像上の座標(x,y)(i=0,1,・・・,n−1)は、式(1)により求められる。
【0061】
【数1】

h:カメラ座標系から画像上の点を変換するためのパラメータ
R:回転要素
T:平行移動要素
実物体検出部201は、Cを既知とすると、n個の特徴点を用いることでTcmを求めることができる。実物体検出部201は、カメラ座標系の原点は視点位置であるため、マーカと視点の位置関係を把握することができる。
【0062】
また、画像内に2つのマーカが含まれている場合を考える。実物体検出部201は、カメラ座標系の点をC、マーカ1の座標系の点をMとして、MからCへの変換行列をTとする。同様に、実物体検出部201は、マーカ2の座標系の点をMとしてMからCへの変換行列をTとする。
【0063】
このとき、カメラ座標系Cからマーカ1への座標系Mへの変換行列は、Tの逆行列T−1となる。カメラ座標系を介することでマーカ1の座標系とマーカ2の座標系の相互変換を行うことができる。実物体検出部201は、マーカ1の座標系Mへのマーカ2の座標系M上の点の変換を、式(2)を用いて行う。
【0064】
【数2】

実物体検出部201は、マーカ1の座標系における、マーカ2の位置が分かることになる。これにより、実物体検出部201は、マーカを利用して指の位置を推定する。
【0065】
なお、実物体検出部201は、上記例以外にも、仮想物体を表示したい面や指先にセンサを付けて、仮想物体と指との距離を求めたり、画像の奥行きを示す距離画像を用いて、指の位置を推定したりして指の位置を求めたりしてもよい。実物体検出部201は、検出した実物体の情報を、仮想物体位置決定部202、重畳処理部204、押下判定部205に出力する。
【0066】
仮想物体位置決定部202は、画像入力装置110から取得した画像に対し、重畳表示する仮想物体の表示位置を決定する。仮想物体位置決定部202の詳細は、図12を用いて説明する。
【0067】
図12は、仮想物体位置決定部202の機能の一例を示すブロック図である。図12に示す仮想物体位置決定部202は、形状決定部301、位置、姿勢決定部302を有する。
【0068】
形状決定部301は、重畳表示する仮想物体に関する情報を扱う。形状決定部301は、表示する仮想物体の立体形状データの作成や、既存の立体形状データの読込みなども行う。立体形状データは、例えば、仮想キーボードの形状を示すデータである。
【0069】
立体形状データには、押下判定領域(当たり判定領域)の定義を含む。押下判定領域は、仮想キーの押下判定に用いる領域であり、例えば、表示される仮想キーから所定値だけ上であり、仮想キーのサイズ分の領域を示す。押下判定領域を所定値上にする理由は、押下と判定されやすくするためである。立体形状データの各データは、個々の別ファイルとなっていてもよい。
【0070】
位置、姿勢決定部302は、実物体検出部201の検出結果に基づき、形状決定部301により決定された仮想物体を表示する位置や向きを決定する。位置、姿勢決定部302は、例えば、仮想物体の表示位置の認識、画像入力装置110の位置の推定、仮想物体の幾何学変換などが行われる。
【0071】
位置、姿勢決定部302は、仮想物体の既知の形状の座標を、画像入力装置110から取得した画像の見え方に合わせて変換する。例えば、位置、姿勢決定部302は、例えば仮想物体を斜め方向から見た形状になるよう座標変換を行う。
【0072】
具体的には、位置、姿勢決定部302は、仮想物を三次元空間中の所定の位置に移動させるため、回転、平行移動、拡大・縮小処理などの座標変換を行う。この座標変換は、いわゆるワールド座標系での座標の変換である。
【0073】
ワールド座標系とは、主に3次元グラフィックスの分野で用いられる、空間全体を表す座標系である。ワールド座標系は、空間の中での物体の位置を示すための座標系で、物体の表示や移動を扱うために用いられる。また、ワールド座標系は、グローバル座標系とも呼ばれる。
【0074】
位置、姿勢決定部302は、座標変換を行って決定された仮想物体の座標を重畳処理部204に出力する。
【0075】
図11に戻り、視点検出部203は、視点・視線検出装置111から取得したユーザの視点、視線データと、画像入力装置110から取得した画像に基づき、ワールド座標系におけるユーザの視点の位置と、画像中の注目位置(視線方向に対応する画像の位置)を検出する。視点検出部203は、検出した視点の位置と、視線方向とを重畳処理部204に出力する。
【0076】
重畳処理部204は、仮想物体位置決定部202により決定された表示位置で仮想物体を画像に重畳表示する。重畳処理部204は、仮想物体位置決定部202から取得した仮想物体の座標に対し、視点検出部203により検出されたユーザの視点位置や、画像入力装置110から取得した画像に合わせて透視変換(射影変換)を行う。前述した座標変換と、射影変換は、アフィン変換と呼ばれる。
【0077】
重畳処理部204は、透視変換を行った仮想物体の座標位置に、仮想物体を重畳表示する。このとき、重畳処理部204は、画像内の実物体との前後関係に矛盾が生じないように描画を行う。
【0078】
例えば、重畳処理部204は、実物体(机)の面から所定値だけ上に仮想物体を描画する。これは、実物体から沈んだ位置や、浮き過ぎた位置に仮想物体が表示されることを防ぐためである。
【0079】
押下判定部205は、実物体検出部201により検出された実物体(例えば指)と、重畳処理部204により重畳表示されている仮想物体とが空間中で交差しているか、または所定距離以内にあるかなどを判定する。
【0080】
このとき、押下判定部205は、視点検出部203から取得した視点位置と重畳表示される仮想物体の位置とに基づき、仮想物体の押下判定に用いる位置を変更する。押下判定に用いる位置とは、押下判定領域の位置や、仮想物体の押下の判定をする際の実物体の座標位置を含む。
【0081】
押下判定部205は、仮想物体に対応する押下判定領域の位置を、仮想物体の位置と視点位置とに基づいて変更しておいてもよい。例えば、押下判定部205は、仮想物体に対応する押下判定領域を視点方向に所定量ずらす。視点方向とは、仮想物体の位置からユーザの目の位置を示す視点位置に向かう方向をいう。
【0082】
この所定量は、仮想物体の位置と視点位置との距離に基づき決定されてもよい。例えば、所定量は、仮想物体の位置と視点位置との距離の数%と決めておけばよい。これにより、仮想キーの位置に応じて適切な値を用いて、押下判定領域の位置をずらすことができる。
【0083】
押下判定部205は、実物体の位置と、基準面との距離を算出し、この距離に基づいて仮想物体が押下されたか否かを判定する。基準面とは、実物体である机の面や、重畳表示された仮想物体の面などである。ここでは、基準面は机の面とする。なお、机の面は、実物体検出部201により、机の所定位置にある一点と法線ベクトルとで表される。押下判定部205は、算出した距離が閾値未満のとき、押下と判定する。押下判定部205は、例えば指と仮想キー、仮想キーと壁などの接触を判定できる。
【0084】
また、押下判定部205は、押下と判定したときの実物体の位置を含む押下判定領域を特定し、その押下判定領域に対応する仮想物体が押下された物体であると判定する。押下判定部205は、視点方向にずれた押下判定領域で押下判定を行うことができるため、ユーザの押し間違いを少なくすることができる。これは、視線方向の手前のキーを押す傾向を利用している。視線方向とは、目から対象物を見る方向をいう。
【0085】
また、押下判定部205は、押下判定領域を仮想物体に対して変更しない場合は、押下判定する際の実物体の座標位置を、視点方向とは逆方向に所定量変更する。これにより、視線方向の手前のキーを押す傾向を利用して、実物体の押下判定時の座標を視点方向の先に変更することで、ユーザの押し間違いを少なくすることができる。この所定量は、押下判定領域と同じように、仮想物体の位置と視点位置との距離に基づき決定されてもよい。
【0086】
図13は、押下判定領域の変更の一例を示す図である。図13に示す白色キーは、仮想キーの表示位置401を示し、灰色キーは、仮想キーに対応する押下判定領域の位置402を示す。仮想キーの表示位置401に対して、押下判定領域の位置402は、視点方向にずれている。これは、押下判定部205が、仮想キーの押し間違いを考慮して視点方向に押下判定領域を変更した結果である。
【0087】
なお、図13に示す例では、押下判定領域が仮想キーの下にあるように表されているが、押下判定領域は、例えば仮想キーから所定値だけ上に位置する。また、押下判定部205は、視点方向への変更について視点方向そのものの方向ではなく、視点方向を仮想キーの平面に射影した方向(第1方向と呼ぶ)を求め、第1方向に所定量をずらすようにしてもよい。
【0088】
これにより、ユーザが、仮想物体が重畳表示された画像を見ながら仮想物体を押下するとき、仮想物体の押し間違いを少なくし、ユーザが意図する仮想物体を押下させることができる。
【0089】
押下判定部402は、押下と判定された仮想物体の座標を入力コマンド生成部206に出力する。
【0090】
図11に戻り、入力コマンド生成部206は、押下判定部205から取得した仮想物体の座標に基づき、入力コマンドを生成する。仮想物体が仮想キーボードである場合、入力コマンド生成部206は、仮想物体の座標に基づき、どのキーコードであるかを特定し、そのキーコードを生成する。
【0091】
入力コマンド生成部206は、生成した入力コマンドをアプリケーション113などに送信する。
【0092】
<動作>
次に、実施例1における入力装置101の動作について説明する。図14は、実施例1における入力制御処理の一例を示すフローチャートである。
【0093】
図14に示すステップS101で、入力装置101は、画像入力装置110から画像を取得する。
【0094】
ステップS102で、実物体検出部201は、取得した画像から実物体を検出する。実物体とは、例えば机の面や指などである。
【0095】
ステップS103で、仮想物体位置決定部202は、実物体検出部201により検出された机の面などに、仮想物体を表示するための表示位置を決定する。このとき、仮想物体位置決定部202は、上述した座標変換を行う。
【0096】
ステップS104で、重畳処理部204は、画像入力装置110から取得した画像に、仮想物体に対して上述した透視変換を行って重畳表示する。
【0097】
ステップS105で、押下判定部205は、仮想物体に対応する押下判定領域を、視点方向に変更する。
【0098】
ステップS106で、押下判定部205は、重畳表示された仮想物体を、検出された実物体が押下したかどうかを判定する。これにより、ユーザの押し間違いを少なくすることができる。
【0099】
押下されたと判定された場合(ステップS106−YES)ステップS107に進み、押下されていないと判定された場合(ステップS106−NO)ステップS101に戻る。
【0100】
ステップS107で、入力コマンド生成部206は、押下と判定された仮想物体の座標に基づいて、入力コマンドを生成する。生成された入力コマンドは、例えば、アプリケーション113に送信される。
【0101】
なお、押下判定部205は、ステップS105を省略し、ステップS106において、押下時の実物体の座標を視点方向から逆方向にずらしてもよい。
【0102】
以上、実施例1によれば、画像に重畳表示された仮想物体に対し、ユーザが意図する仮想物体を適切に押下させることができる。
【0103】
[実施例2]
次に、実施例2における入力装置について説明する。実施例2では、入力装置は、ユーザが仮想キーを押し間違えた場合の正しいキーと誤ったキーとのデータを示す誤り傾向データを参照し、誤り傾向データに保持される誤ったキーが押下されようとする場合に押下判定に用いる位置を変更する。以下に示す実施例では、仮想物体に対して仮想キーボートを例にし、実物体に対して指を例にして説明する。
【0104】
<システムと構成>
実施例2におけるシステム及び入力装置の構成については、実施例1と同様であるため、その説明を省略する。
【0105】
<構成>
図15は、実施例2における入力装置500の機能の一例を示すブロック図である。図15に示す構成で、図11に示す構成と同様のものは同じ符号を付し、その説明を省略する。
【0106】
図15に示す記憶部501は、誤り傾向データを記憶する。記憶部501は、例えば補助記憶部104により実現されうる。誤り傾向データは、以下のデータを保持する。
(1)正しい入力(押下)時の
キーコード、視点位置、キーの座標、指の座標
(2)正しい入力キーに対応する、誤った入力(押下)時の
キーコード、視点位置、キーの座標、指の座標
押下判定部502は、指と、押下判定位置との距離に対し、3つの閾値を設ける。閾値1は、指が仮想キーに近づいたと判断するための閾値である。閾値2は、仮想キーが押下されたと判断するための閾値である。閾値3は、仮想キーが押下された後に指が離れたと判断するための閾値である。
【0107】
押下判定部502は、指と基準面との距離が閾値1未満になったか否かを判定する。基準面とは、例えば机の面や、仮想キーボードが表示される面などである。この距離が閾値1未満になったとき、押下判定部502は、押下されようとしている仮想キー(以下、目的キーと呼ぶ)が、記憶部501に記憶される誤り傾向データで、誤ったキーとして記憶されているか否かを判定する。
【0108】
押下判定部502は、目的キーが誤ったキーとして記憶されていれば、そのキーは間違えやすいキーであるため、その目的キーに対応する押下判定領域を変更する。この変更処理は、実施例1と同様である。このとき、押下判定部502は、重畳処理部503に対し、目的キーの座標を通知するとともに、目的キーの表示位置を変更するよう要求してもよい。
【0109】
押下判定部502は、目的キーが誤ったキーとして記憶されていなければ、目的キーの押下判定領域の位置を変更しない。そもそも間違えにくいキーだからである。
【0110】
押下判定部502は、この距離が閾値2未満になったとき、入力コマンド生成部206に押下された仮想キーの座標を通知する。押下判定部502は、この距離が閾値2未満になった後に、閾値3より大きくなれば仮想キーの押下が終了したことを入力コマンド生成部206に通知する。閾値2及び閾値3の判定は、実施例1でも行われる。
【0111】
重畳処理部503は、押下判定部502から変更要求を受けた場合、重畳表示している目的キーの表示位置を変更する。重畳処理部503は、目的キーを、押下判定部502により通知される座標で特定できる。
【0112】
重畳処理部503は、押下判定領域が変更された場合、目的キーの表示位置を、押下判定領域に合わせて変更するようにしてもよい。
【0113】
これにより、ユーザが仮想キーを押下しようとしたときに、その仮想キーが間違えやすいキーであれば、視点方向に押下判定領域の位置を変更することができる。
【0114】
<変更例>
次に、実施例2における位置変更例について説明する。図16は、仮想キーの表示位置及び押下判定領域を変更する例(その1)を示す図である。図16に示す例では、ユーザが表示装置111越しに斜め方向から仮想キーボードを見て、仮想キー31を押下しようとする例である。実際は、仮想キーの視線方向手前を押すことが多い。また、この仮想キー31は、誤入力キーとして誤り傾向データに記憶されているとする。
【0115】
このとき、押下判定部502は、仮想キー31の押下判定領域を視点方向に所定値ずらす。この所定値は、予め決められた値でもよいし、この仮想キー31と視点位置との距離に基づいて決められてもよい。また、押下判定部502は、仮想キー31から視点方向にある仮想キー32、33に対応する押下判定領域も、視点方向に変更しておく。仮想キー31の移動により、重複しないようにするためである。
【0116】
重畳処理部503は、例えば、仮想キー31を、本来の表示位置41から表示位置42に変更する。変更するのは、押下判定部502から変更要求が通知された後である。また、重畳処理部503は、仮想キー31だけを変更するのではなく、仮想キー31の変更に伴い仮想キー32,33も合わせて表示位置を変更する。これは、仮想キー31の表示位置を変更することで、仮想キー31から見て視点方向の仮想キーも、仮想キー31と重複しないように変更した方がいいからである。
【0117】
図17は、仮想キーの表示位置及び押下判定領域を変更する例(その2)を示す図である。図17に示す例では、ユーザが表示装置111越しに斜め方向から斜めに表示された仮想キーボードを見て、仮想キー31を押下しようとする例である。また、この仮想キー31は、誤入力キーとして誤り傾向データに記憶されているとする。
【0118】
このとき、押下判定部502は、仮想キー31の押下判定領域を視点方向に所定値ずらす。この所定値は、予め決められた値でもよいし、この仮想キー31と視点位置との距離に基づいて決められてもよい。また、押下判定部502は、仮想キー31から視点方向にある仮想キー34、35に対応する押下判定領域も、視点方向に変更しておく。
【0119】
重畳処理部503は、例えば、仮想キー31を、本来の表示位置41から表示位置43に変更する。変更するのは、押下判定部502から変更要求が通知された後である。また、重畳処理部503は、仮想キー31だけを変更するのではなく、仮想キー31の変更に伴い仮想キー33,34も合わせて表示位置を変更する。これは、仮想キー31の表示位置を変更することで、仮想キー31から見て視点方向の仮想キーも、仮想キー31と重複しないように変更した方がいいからである。
【0120】
図18は、仮想キーの押下判定領域を変更する例(その1)を示す図である。図18に示す例は、図16に示す例の押下判定領域のみを変更した例である。図18に示す例では、仮想キー31に対応する押下判定領域が視点方向の位置51に変更されている。仮想キー31の表示位置は、位置41である。押下判定領域の位置51の変更に伴い、仮想キー32,33に対応する押下判定領域の位置がそれぞれ視点方向の位置52、53に変更されている。
【0121】
図19は、仮想キーの押下判定領域を変更する例(その2)を示す図である。図19に示す例は、図17に示す例の押下判定領域のみを変更した例である。図19に示す例では、仮想キー31に対応する対応する押下判定領域の位置が視点方向の位置54に変更されている。仮想キー31の表示位置は、位置41である。押下判定領域の位置51の変更に伴い、仮想キー32,33に対応する押下判定領域の位置がそれぞれ視点方向の位置55,56に変更されている。
【0122】
よって、押下判定部502は、目的キーに対応する押下判定領域の位置の変更に伴い、目的キーから視点方向にある他の仮想キーに対応する押下判定領域の位置を変更する。これにより、目的キーに対応する押下判定領域の位置を変更することで、他の仮想キーに対応する押下判定領域と重複することを防ぐことができる。
【0123】
<動作>
次に、実施例2における入力装置500の動作について説明する。図20は、実施例2における入力制御処理の一例を示すフローチャートである。図20に示すステップS201で、仮想物体位置決定部202は、立体形状データを読み込み、押下判定部502は、誤り傾向データを読み込む。
【0124】
ステップS202で、入力装置500は、画像入力装置110から画像を取得する。
【0125】
ステップS203で、実物体検出部201は、取得した画像を解析する。
【0126】
ステップS204で、実物体検出部201は、仮想キーボードの表示位置が画像内にあるかないかを判定する。例えば、実物体検出部201は、所定サイズの面が画像内にあれば表示位置ありと判定する。なお、仮想キーボードは、画像内の所定領域に表示すると予め決定されていてもよい。
【0127】
仮想キーボードの表示位置があれば(ステップS204−YES)ステップS205に進み、仮想キーボードの表示位置がなければ(ステップS204−NO)ステップS212に進む。実物体検出部201は、表示位置ありと判定すると、k_flagを1にし、表示位置なしと判定すると、k_flagを0にする。
【0128】
ステップS205で、実物体検出部201は、取得した画像を解析し、手や指を検出する。手や指の検出は、肌色検出を行ったり、マーカを付した指を検出したり、指に付したセンサで検出したりしてもよい。
【0129】
ステップS206で、実物体検出部201は、手や指が画像中に含まれるか否かを判定する。手や指が画像中に含まれれば(ステップS206−YES)ステップS207に進み、手や指が画像中に含まれなければ(ステップS206−NO)ステップS212に進む。実物体検出部201は、手や指が画像中に含まれると判定すると、h_flagを1にし、手や指が画像中に含まれないと判定すると、h_flagを0にする。
【0130】
ステップS207で、視点検出部203は、視点・視線検出装置111から取得した視点、視線データに基づき、空間中の視点位置と、視線方向を検出する。
【0131】
ステップS208で、重畳処理部503は、k_flagが1であり、かつ、h_flagが1であるか否かを判定する。この条件を満たす場合は、仮想キーボードを重畳表示すると判定され、ステップS209に進み、この条件を満たさない場合は、仮想キーボードを重畳表示しないと判定され、ステップS212に進む。
【0132】
ステップS209で、押下判定部502は、仮想キーボード(仮想物体)と手や指との距離を算出する。
【0133】
ステップS210で、押下判定部502は、算出した距離に基づき、仮想キーの表示を変更させる必要があるか否かを判定する。変更の必要がある場合(ステップS210−YES)は、ステップS211に進み、変更の必要がない場合(ステップS210−NO)は、ステップS212に進む。
【0134】
変更の必要があるとは、算出した距離が閾値1未満であること、かつ、閾値1未満である仮想キー(目的キー)が誤り傾向データの誤ったキーとして保持されていることをいう。この条件は、指や手が仮想キー(目的キー)に近づき、かつ、この目的キーの押し間違いが多いことを示す。
【0135】
ステップS211で、押下判定部502は、目的キーの押下判定領域の位置を、視点方向にずらす。また、押下判定部502による表示変更命令で、重畳処理部503は、重畳表示対象の目的キーの表示位置を、押下判定領域に合わせて変更する。(図16、17参照)
ステップS212で、重畳処理部503は、画像入力装置110から取得した画像を表示する。
【0136】
ステップS213で、重畳処理部503は、k_flagが1であるかを判定する。k_flagが1であれば(ステップS213−YES)ステップS214に進み、k_flagが0であれば(ステップS213−NO)ステップS202に戻る。
【0137】
ステップS214で、重畳処理部503は、座標変換、透視変換を行った仮想キーボードを画像に重畳表示する。このとき、手や指が仮想キーに閾値1よりも近づいていれば、この仮想キーの表示位置の位置が変更された状態で重畳表示される。
【0138】
ステップS215で、押下判定部502は、算出した距離が閾値2未満になったか否かを判定する。距離が閾値2未満であれば(ステップS215−YES)仮想キーが押下されたと判定され、ステップS216に進み、距離が閾値2以上であれば(ステップS215−NO)仮想キーは押下されていないと判定され、ステップS202に戻る。
【0139】
ステップS216で、入力コマンド生成部206は、押下されたと判定された仮想キーに対応するキーコードを生成する。
【0140】
なお、ステップS211で、仮想キーの表示位置を変更するようにしたが、この変更は必ずしも必要な処理ではない。入力装置500は、仮想キーの押下判定領域の位置だけを変更するようにしてもよい(図18、19参照)。
【0141】
図21は、基準面と閾値との関係を示す図である。図21に示す例では、閾値1(TH1)は、指が仮想キーに近づいたと判断される距離を示す。閾値2(TH2)は、仮想キーが押されたと判断できる距離を示す。閾値3は仮想キーが押された後に、離れたと判断するための距離を示す。ここでは、基準面と指との距離をdとする。基準面は、例えば実物体の面や仮想キーボードの面とする。
【0142】
図22は、押下判定部502による押下判定処理の一例を示すフローチャートである。図22に示すステップS301で、押下判定部502は、距離dがTH1未満であるか否かを判定する。押下判定部502は、距離dがTH1未満であれば、k_nearを1にし、距離dがTH1以上であれば、k_nearを0にする。
【0143】
ステップS302で、押下判定部502は、距離dがTH2未満であるか否かを判定する。押下判定部502は、距離dがTH2未満であれば、k_downを1にし、距離dがTH2以上であれば何もしない。
【0144】
ステップS303で、押下判定部502は、距離dがTH3より大きく、かつ、k_downが1であるかを判定する。押下判定部502は、この条件を満たせば、k_downを0にし、この条件を満たさなければ何もしない。押下判定部502は、ステップS303の処理が終わると、次の画像の処理を行う。
【0145】
これにより、押下判定部502は、k_nearが1のときに、押下判定領域の位置を変更し、また、重畳処理部503に表示位置の変更を要求する。押下判定部502は、k_downが1のときに、押下がなされたと判定し、入力コマンド生成部206に押下された仮想キーの情報を通知する。
【0146】
なお、押下判定部502は、所定時間内にk_downが0にならなければ連続入力と判定し、所定時間内にk_downが0になれば、次の押下判定を行う。
【0147】
以上、実施例2によれば、実物体(例えば指)が仮想キーに近づいた場合に、位置を変更する押下判定領域を必要最小限に抑えることができる。また、実施例2によれば、押下判定領域の位置の変更に合わせて、仮想キーの表示位置を変更させることもできる。また、実施例2によれば、誤り傾向データを参照するため、誤入力が発生しない仮想キーに対しては、押下判定領域の位置又は仮想キーの表示位置を変更させないこともできる。
【0148】
[実施例3]
次に、実施例3における入力装置について説明する。実施例3では、入力装置は、実施例2で用いた、ユーザが仮想キーを押し間違えた場合の正しいキーと誤ったキーとのデータを示す誤り傾向データを更新する。以下に示す実施例では、仮想物体に対して仮想キーボートを例にし、実物体に対して指を例にして説明する。
【0149】
<システムと構成>
実施例3におけるシステム及び入力装置の構成については、実施例1と同様であるため、その説明を省略する。
【0150】
<構成>
図23は、実施例3における入力装置600の機能の一例を示すブロック図である。図23に示す構成で、図11、15に示す構成と同様のものは同じ符号を付し、その説明を省略する。入力コマンド生成部601は、生成したキーコードを学習部602に出力する。
【0151】
学習部602は、仮想キー入力時の指及び仮想キーの座標と、文字を消した情報とを利用して、誤入力の検出を行う。学習部602は、誤入力されたキー、入力し直したキー、及びそれらのキーが押下された時の座標及び視点位置を用いて、仮想キー毎の誤り傾向データの学習を行う。
【0152】
例えば、学習部602は、BackSpaceキーのキーコードを取得した場合、誤入力が発生したと検出できる。学習部602は、次に入力されたキーコードが正しい入力であると判断できる。
【0153】
なお、学習部602は、入力し直した後の入力も間違えたり、連続して削除したり、いろいろな場合を想定するとよい。実施例3では、削除後の入力も間違えていた場合も検出できる場合について後述する。
【0154】
学習部602は、誤入力の場合のキーコード、視点位置、仮想キーの座標、指の座標を誤りデータとしてバッファに保存する。
【0155】
また、学習部602は、正しい入力の場合のキーコード、視点位置、仮想キーの座標、指の座標を正しいデータとしてバッファに保存する。学習部602は、誤りデータと正しいデータとを関連付けて、記憶部603に記憶される誤り傾向データを更新する。キーコードは、例えば入力コマンド生成部601から取得され、視点位置、仮想キーの座標、指の座標は、例えば押下判定部502から取得される。
【0156】
記憶部603は、予め初期の誤り傾向データを記憶しておく。初期の誤り傾向データは、事前の実験などにより設定されていればよい。また、誤り傾向データは、ユーザ毎に変更されるとよいため、一定時間更新がなければ誤り傾向データを初期化するようにしてもよい。
【0157】
これにより、誤り傾向データをユーザに合わせて学習することができ、そのユーザに対して、押下判定領域の位置や仮想キーの表示位置の変更を適切に行うことができる。
【0158】
<動作>
次に、実施例3における入力装置600の動作について説明する。まず、図24、25を用いて実施例3における入力制御方法を説明する。図24は、実施例3における入力制御処理(その1)の一例を示すフローチャートである。
【0159】
図24に示すステップS401で、仮想物体位置決定部202は、立体形状データを読み込み、押下判定部502は、初期の誤り傾向データを読み込む。
【0160】
ステップS402〜S416は、図20に示すステップS202〜S216と同様であるため、説明を省略する。
【0161】
ステップS417で、学習部602は、現在のキーコードと、入力時の指の座標、仮想キーの座標、視点位置をバッファに保存する。以下、キーコード、入力時の指の座標、仮想キーの座標、視点位置のデータをまとめて入力データと呼ぶ。
【0162】
ステップS418で、学習部602は、現在の入力が誤入力であるかを判定する。誤入力であれば(ステップS418−YES)S419に進み、誤入力でなければ(ステップS418−NO)ステップS420に進む。誤入力であるか否かは、例えば、BackSpaceキーのキーコードであるかどうかで判断できる。
【0163】
ステップS419で、学習部602は、保存しておいた前の入力データを誤りデータとして保持する。ステップS419の処理後は、ステップS402に戻る。
【0164】
ステップS420で、学習部602は、誤入力後の正しい入力が行われたか否かを判定する。正しい入力が行われれば(ステップS420−YES)ステップS421に進み、通常の入力が行われれば(ステップS420−NO)ステップS402に戻る。
【0165】
ステップS421で、学習部602は、誤りデータと、正しい入力データとを関連付けて誤り傾向データに追加する。
【0166】
ステップS422で、学習部602は、追加されたデータに基づき、誤り傾向データを更新する。
【0167】
これにより、誤り傾向データがユーザの誤入力の癖に合わせて更新されるので、ユーザの誤入力の癖に合わせて、押下判定領域の位置、又は仮想キーの表示位置の変更処理を行うことができる。
【0168】
図26は、誤入力及び正しい入力を検出する処理の一例を示すフローチャートである。図26に示す例では、誤入力後の入力も間違えていた場合も間違いとして判断できる処理を示す。
【0169】
ステップS501で、学習部602は、パラメータd_flag、n_flagを0に初期化する。d_flagは、正しい入力に対応する誤りの入力を見つけるためのパラメータである。n_flagは、削除されるまでのキーの連続数を表すパラメータである。
【0170】
ステップS502で、学習部602は、入力コマンド生成部601からキーを入力する。ステップS503で、学習部602は、入力データをバッファに保存する。
【0171】
ステップS504で、学習部602は、キーコードが削除キー(例えばBackSpaceキー)を表すか否かを判定する。削除キーであれば(ステップS504−YES)ステップS505に進み、削除キーでなければ(ステップS504−NO)ステップS509に進む。
【0172】
ステップS505で、学習部602は、前の入力が誤りであることを検出する。
【0173】
ステップS506で、学習部602は、d_flagが0であるか否かを判定する。d_flagが0であれば(ステップS506−YES)ステップS507に進み、d_flagが0でなければ(ステップS506−NO)ステップS508に進む。
【0174】
ステップS507で、学習部602は、d_flagを1にし、n_flagを0にする。ステップS507の処理後は、ステップS502に戻る。
【0175】
ステップS508で、学習部602は、d_flagに1を加算し、n_flagを0にする。ステップS508の処理後は、ステップS502に戻る。
【0176】
ステップS509で、学習部602は、d_flagが0ではなく、かつ、n_flagが1より大きいかを判定する。この条件を満たす場合(ステップS509−YES)ステップS511に進み、この条件を満たさない場合(ステップS509−NO)ステップS510に進む。
【0177】
ステップS509では、削除キーの後に、削除キー以外のキーが2回続いたかを判定している。これにより、削除キーの後に、文字キーを入力後、さらに削除キーが押下された場合、削除キーの間の文字キーを誤入力と判断することができる。
【0178】
ステップS510で、学習部602は、n_flagに1を加算する。ステップS510の処理後は、ステップS502に進む。
【0179】
ステップS511で、学習部602は、一つ前の入力を正解(正しい入力)と判断する。
【0180】
ステップS512で、学習部602は、d_flagが0より大きいか否かを判定する。d_flagが0より大きければ(ステップS512−YES)ステップS513に進み、d_flagが0であれば(ステップS512−NO)ステップS501に戻る。
【0181】
ステップS513で、学習部602は、2×d_flag+1の入力を、今回の正解に対応する誤入力と判断する。
【0182】
ステップS514で、学習部602は、正解時と誤り時の入力データで、誤り傾向データを更新する。ステップS515で、学習部602は、d_flagを1減算する。ステップS515の処理後は、ステップS512に戻る。
【0183】
<誤入力及び正しい入力を検出する具体例>
図26の処理に基づく具体例について説明する。図27は、誤入力及び正しい入力を検出する具体例を説明するための図である。図27に示す例では、a、b、dの順に文字が入力され、次に、削除が入力されたとする。
【0184】
学習部602は、削除が入力された時点で、dが誤りであったと判定する。次に、eが入力され、削除が入力される。学習部602は、削除が入力された時点で、eが誤りであったと判定する。
【0185】
次に、c、dの順で文字が2回連続で入力されたとする。学習部602は、dの一つ前のcが正解(正しい入力)だったと判定する。学習部602は、このcに対応する誤りを、eとdとであると判定する。よって、学習部602は、このcに対応する入力データの誤りデータとして、eとdとの入力データを関連付け、誤り傾向データを更新する。
【0186】
図26に示すアルゴリズムは、あくまでも一例であって、連続で削除が入力される場合なども考慮してアルゴリズムを適宜変更すればよい。
【0187】
以上、実施例3によれば、誤り傾向データがユーザの誤入力の癖に合わせて更新されるので、ユーザの誤入力の癖に合わせて、押下判定領域の位置、又は仮想キーの表示位置の変更処理を行うことができる。
【0188】
[変形例]
次に、各実施例の変形例について説明する。上記実施例では、仮想物体として仮想キーボードを例にして説明したが、仮想物体は、選択オブジェクトであればよい。例えば、選択ボタンや、吹き出しなどでもよい。この吹き出しは、例えばテキストの単語や物などの実物体から出される吹き出しである。
【0189】
この吹き出しが選択された場合に、アプリケーション113は、吹き出し元の単語や物の詳細情報を調べる。重畳処理部は、この詳細情報を画像に重畳表示することも可能である。
【0190】
また、実物体は、指や手に限られるものではない。例えば、3次元位置を特定可能な指示棒などでもよい。
【0191】
なお、前述した各実施例で説明した入力制御処理を実現するためのプログラムを記録媒体に記録することで、各実施例での入力制御処理をコンピュータに実施させることができる。例えば、このプログラムを記録媒体に記録し、このプログラムが記録された記録媒体をコンピュータや携帯装置に読み取らせて、前述した入力制御処理を実現させることも可能である。
【0192】
なお、記録媒体は、CD−ROM、フレキシブルディスク、光磁気ディスク等の様に情報を光学的,電気的或いは磁気的に記録する記録媒体、ROM、フラッシュメモリ等の様に情報を電気的に記録する半導体メモリ等、様々なタイプの記録媒体を用いることができる。
【0193】
以上、実施例について詳述したが、特定の実施例に限定されるものではなく、特許請求の範囲に記載された範囲内において、種々の変形及び変更が可能である。また、前述した各実施例の構成要素を全部又は複数を組み合わせることも可能である。
【0194】
なお、以上の各実施例に関し、さらに以下の付記を開示する。
(付記1)
画像を取得する実物体検出部と、
前記画像に重畳する仮想物体の表示位置を決定する位置決定部と、
ユーザの視点位置を検出する視点検出部と、
決定された表示位置で前記仮想物体を前記画像に重畳表示する重畳処理部と、
検出された前記視点位置と重畳表示された前記仮想物体の位置とに基づき、前記仮想物体の押下判定に用いる位置を変更する押下判定部と、
を備える入力装置。
(付記2)
前記実物体検出部は、
前記画像に含まれる実物体を検出し、
前記押下判定部は、
前記実物体と重畳表示された前記仮想物体との距離を算出し、前記距離が所定値以下である場合に、前記押下判定に用いる位置の変更処理を行う付記1記載の入力装置。
(付記3)
前記押下判定部は、
前記仮想物体の押下判定に用いる領域を示す前記仮想物体の押下判定領域の位置を、前記仮想物体から前記視点位置方向に所定量変更する付記1又は2記載の入力装置。
(付記4)
前記押下判定部は、
前記仮想物体に対して押下の判定をする際に前記実物体の座標の位置を、前記仮想物体から前記視点位置とは逆方向に所定量変更する付記1又は2記載の入力装置。
(付記5)
前記所定量は、前記視点位置と前記仮想物体との距離に基づいて決定される付記3又は4記載の入力装置。
(付記6)
前記重畳処理部は、
前記押下判定領域の位置が変更された場合、前記押下判定領域に対応する仮想物体の表示位置を前記押下判定領域の位置に合わせて変更する付記3記載の入力装置。
(付記7)
前記仮想物体は仮想キーボードであり、
正しい入力である場合の仮想キーの座標、及び該仮想キーの押下時における前記実物体の座標を含む第1データと、誤った入力である場合の仮想キーの座標、及び該仮想キーの押下時における前記実物体の座標とを含む第2データとを関連付けた第3データを記憶する記憶部をさらに備え、
前記押下判定部は、
前記実物体との距離が前記所定値以内にある仮想キーが、前記記憶部に記憶されている仮想キーである場合に、前記押下判定に用いる位置の変更処理を行う付記2乃至6いずれか一項に記載の入力装置。
(付記8)
前記仮想キーボードの仮想キーに対する誤入力を検出し、誤入力されたときの仮想キーの座標、及び該仮想キーの押下時における前記実物体の座標と、入力され直したときの仮想キーの座標、及び該仮想キーの押下時における前記実物体の座標とを用いて前記第3データを更新する学習部をさらに備える付記7記載の入力装置。
(付記9)
画像を取得し、
前記画像に重畳する仮想物体の表示位置を決定し、
ユーザの視点位置を検出し、
決定された表示位置で前記仮想物体を前記画像に重畳表示し、
検出された前記視点位置と重畳表示された前記仮想物体の位置とに基づき、前記仮想物体の押下判定に用いる位置を変更する処理をコンピュータが実行する入力制御方法。
(付記10)
画像を取得し、
前記画像に重畳する仮想物体の表示位置を決定し、
ユーザの視点位置を検出し、
決定された表示位置で前記仮想物体を前記画像に重畳表示し、
検出された前記視点位置と重畳表示された前記仮想物体の位置とに基づき、前記仮想物体の押下判定に用いる位置を変更する処理をコンピュータに実行させる入力制御プログラム。
【符号の説明】
【0195】
101、500、600 入力装置
102 制御部
103 主記憶部
104 補助記憶部
105 通信部
110 画像入力装置
111 視点・視線検出装置
112 表示装置
112 アプリケーション
201 実物体検出部
202 仮想物体位置決定部
203 視点検出部
204、503 重畳処理部
205、502 押下判定部
206、601 入力コマンド生成部
301 形状決定部
302 位置、姿勢決定部
501、603 記憶部
602 学習部

【特許請求の範囲】
【請求項1】
画像を取得する実物体検出部と、
前記画像に重畳する仮想物体の表示位置を決定する位置決定部と、
ユーザの視点位置を検出する視点検出部と、
決定された表示位置で前記仮想物体を前記画像に重畳表示する重畳処理部と、
検出された前記視点位置と重畳表示された前記仮想物体の位置とに基づき、前記仮想物体の押下判定に用いる位置を変更する押下判定部と、
を備える入力装置。
【請求項2】
前記実物体検出部は、
取得した画像に含まれる実物体を検出し、
前記押下判定部は、
前記実物体と重畳表示された前記仮想物体との距離を算出し、前記距離が所定値以下である場合に、前記押下判定に用いる位置の変更処理を行う請求項1記載の入力装置。
【請求項3】
前記押下判定部は、
前記仮想物体の押下判定に用いる領域を示す前記仮想物体の押下判定領域の位置を、前記仮想物体から前記視点位置方向に所定量変更する請求項1又は2記載の入力装置。
【請求項4】
前記押下判定部は、
前記仮想物体に対して押下の判定をする際に前記実物体の座標の位置を、前記仮想物体から前記視点位置とは逆方向に所定量変更する請求項1又は2記載の入力装置。
【請求項5】
前記重畳処理部は、
前記押下判定領域の位置が変更された場合、前記押下判定領域に対応する仮想物体の表示位置を前記押下判定領域の位置に合わせて変更する請求項3記載の入力装置。
【請求項6】
前記仮想物体は仮想キーボードであり、
正しい入力である場合の仮想キーの座標、及び該仮想キーの押下時における前記実物体の座標を含む第1データと、誤った入力である場合の仮想キーの座標、及び該仮想キーの押下時における前記実物体の座標とを含む第2データとを関連付けた第3データを記憶する記憶部をさらに備え、
前記押下判定部は、
前記実物体との距離が前記所定値以内にある仮想キーが、前記記憶部に記憶されている仮想キーである場合に、前記押下判定に用いる位置の変更処理を行う請求項2乃至5いずれか一項に記載の入力装置。
【請求項7】
前記仮想キーボードの仮想キーに対する誤入力を検出し、誤入力されたときの仮想キーの座標、及び該仮想キーの押下時における前記実物体の座標と、入力され直したときの仮想キーの座標、及び該仮想キーの押下時における前記実物体の座標とを用いて前記第3データを更新する学習部をさらに備える請求項6記載の入力装置。
【請求項8】
画像を取得し、
前記画像に重畳する仮想物体の表示位置を決定し、
ユーザの視点位置を検出し、
決定された表示位置で前記仮想物体を前記画像に重畳表示し、
検出された前記視点位置と重畳表示された前記仮想物体の位置とに基づき、前記仮想物体の押下判定に用いる位置を変更する処理をコンピュータが実行する入力制御方法。
【請求項9】
画像を取得し、
前記画像に重畳する仮想物体の表示位置を決定し、
ユーザの視点位置を検出し、
決定された表示位置で前記仮想物体を前記画像に重畳表示し、
検出された前記視点位置と重畳表示された前記仮想物体の位置とに基づき、前記仮想物体の押下判定に用いる位置を変更する処理をコンピュータに実行させる入力制御プログラム。

【図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

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図13】
image rotate


【公開番号】特開2013−41431(P2013−41431A)
【公開日】平成25年2月28日(2013.2.28)
【国際特許分類】
【出願番号】特願2011−178093(P2011−178093)
【出願日】平成23年8月16日(2011.8.16)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】