以下に、図面を参照して本発明の実施形態を詳細に説明する。なお、以下で説明する実施形態は、本発明を具体的に実施した場合の一例を示すものであり、これに限るものではない。
<第1の実施形態>
タッチ状態から非タッチ状態への状態遷移後に操作種別が確定する操作のうち、タップとは、一般的にはタッチ入力の対象面となる所定の面上の1点を指定するために入力されることが多い操作種別である。多くの場合、タップを認識するために満たされるべき条件(以下、タップ条件)は、物体が対象面に対してタッチ状態になってから、対象面に沿う方向の移動をしないまま、リリースされることである。さらにタップ条件には、タッチからリリースまでが、極短い時間の間に検出されることが加わることもある。この場合、時間に関する条件を満たすために、タップを行うための指先の動きのスピードは比較的速いものになることが想定される。一方、タッチ状態から非タッチ状態への状態遷移後に操作種別が確定する操作のうち、フリックとは、一般的には、対象面に沿ったある方向を指定するために入力されることが多い操作種別である。さらにフリックでは、リリース直前の指先の移動スピードに基づくフリックスピードが指定される場合がある。多くの場合、フリックを認識するために満たされるべき条件(以下、フリック条件)は、物体と対象面がタッチ状態から非タッチ状態に遷移する直前に、物体が、所定のスピードを越えるスピードで、物体が対象面に沿う方向に移動することである。なおフリック条件には、物体と対象面がタッチ状態である間の指先の移動に関する条件は含まれないことも多い。つまり、フリックは、タップのように対象面に沿う方向の移動をしない状態で入力されることもあれば、指先がタッチ状態において対象面に沿う方向にある程度移動した後で入力されることもある。
図11は、フリックとタップを利用するアプリケーションの一例を表す。図11(A)は、フリックでサムネイルをスライドする様子を示している。このアプリケーションでは、複数のサムネイルが表示されている表示面がタッチ対象面となり、1つサムネイルが表示されている範囲内をタップで指定することで、そのサムネイルを選択することができる。また、サムネタッチ状態を維持したまま指先を対象面に沿って動かすムーブという種類のタッチ操作によって、また、1つサムネイル列状でフリックをすることで、所定位置に表示させるサムネイルを1つずつ進めることができる。なお図11(A)において、実線で輪郭が描かれた腕は、ユーザの腕の最新の位置を、点線で輪郭が描かれた腕は、移動前に遡った過去(1フレーム前)におけるユーザの腕の位置を表す。
図11(A)の場合、初期状態では、対象面にサムネイル1、2、3が表示されている。そして、ムーブによりサムネイルが途中までスライドし、続いてフリックが入力されたことによって、初期状態から1つずつサムネイルの表示位置が進んだことで、フリック後にはサムネイル2、3、4の2つが表示されている。図11(A)では、フリックが行われるとき、腕自体はほとんど動かず、人差指だけが素早く動かされている。このように、タッチ操作で移動させる対象(サムネイル)が小さかったり、対象を移動させたい距離が短かったりするような場合にフリックが入力される場合の傾向として、このように、腕よりも指を多く動かすような動きがなされること多い。
ユーザがタップやフリックを行う状況は、多岐に渡る。例えば、タップの場合、指定したい点の真上からほぼ垂直にタッチ対象面上に下ろし、そのまま垂直に上げる方法もあるが、一方で、手を連続的に動かしている途中でタップを行うことも考えられる。後者のような状況では、リリースの直後の指先の移動が、タッチ対象面に平行な方向の成分を有する。ここで、タッチ状態から非タッチ状態への遷移が検出されるのが、ユーザが認識しているタイミングより遅れていれば、システムは、非タッチ状態に遷移する前に指先がタッチ対象面に沿う方向に移動をしたと認識することになる。その移動スピードがフリック条件を満たす場合、ユーザがタップを意図していたにも関わらず、フリックの入力が認識されてしまうことになる。図11(A)に示したように、フリックが入力される場合は、指先タッチ対象面に沿う方向へ移動する移動距離に比較すると、腕自体の同じ方向への移動は鈍いあるいは移動しない場合もある。一方、タップが入力される場合、タップ条件でタッチからリリースまでの間に対象面に沿う方向への移動がないことが求められる。従って、ユーザが意識的に指をスライドさせないようにするため、タップ前後に腕自体の動きがあったとしても、指先は腕に対してあまり動かないという傾向がある。そこで本実施形態では、タッチ状態から非タッチ状態への状態遷移後に操作種別が確定する操作として、タップとフリックを例に挙げ、これらの認識精度を向上させるため、リリース前後の指先の移動に加えて、腕の移動に関して検知する情報を利用する。具体的には、腕自体の移動距離を取得するために、ユーザの手のうち指以外の部分に基準点を定め、フリックあるいはタップが入力されたか判定する際に、リリースが検出される前の同一期間での指先に移動と基準点の移動の関係を利用する。ただし、タップとフリックは一例である。本実施形態は、非タッチ状態に遷移した後で操作種別が確定する操作を区別する認識する場合に適用可能である。
図1(A)は、本実施形態で説明する情報処理装置100を設置したテーブルトップインタフェースシステムの外観の一例を示している。情報処理装置100は、プロジェクタの投影光照射部105から投影光を照射することにより、テーブル上や壁面など、任意の平面を対象面として設定できる。図1に示すテーブルトップインタフェースシステムの場合は、情報処理装置100をタッチ対象面101となるテーブル上に設置し、テーブル面上に表示画像を投影する。ここで円形画像2は、プロジェクタによってテーブル面上に投影されたUI部品である。以下では、プロジェクタによってテーブル面上に投影されるUI部品や写真のサムネイルなどの各種画像を総称して表示アイテムという。
また、受光部106は、赤外パターン投影方式の距離画像センサが得る距離画像の視点を示す。本実施形態では、受光部106は、対象面に対して上方から見下ろす画角で撮像する位置に設置される。従って、距離画像センサ115によって得られた距離画像の各画素には、受光部106から被写体までの距離が反映される。なお、距離画像の取得方法は、一例として環境光やテーブル面の表示の影響が小さい赤外パターン投影方式を基に説明するが、用途に応じて視差方式や赤外光反射時間方式(Time−of−Flight方式)などを利用することも可能である。ここで操作領域104のうち、プロジェクタによる投影が可能な範囲と、距離画像センサ115の視野範囲は一致しているものとし、以下では、当該範囲を操作領域104という。
本実施形態では、ユーザが腕103を使って、テーブルトップシステムに対して、タッチ操作や空間ジェスチャ操作を入力する。タッチ操作が入力されるタッチ対象面101は、操作領域104が定義されたテーブル面上となる。距離画像センサ115は、テーブル面を含む空間を画角に収めるように設置され、ユーザは腕103をこの空間に挿入した状態で操作を行う。ただし、本実施形態は、タッチ対象面101がテーブル面(鉛直上に向けられた面)である場合だけでなく、例えば壁面や平面でない物体の表面であったり、仮想的な面であったりする場合にも適用可能である。タッチ操作や空間ジェスチャ操作では、例えば、タッチ対象面101に投影された表示アイテムを操作対象として動かすことなどが可能となる。なお、本実施形態では、図1に示されるように操作領域104に対して平行な二次元平面にx軸とy軸、操作領域104に直交する高さ方向にz軸を設定し三次元位置情報を座標値として扱う。従って、本実施形態において、タッチ対象面に沿う方向、あるいはタッチ対象面に平行な方向というとき、それはxy平面上で定義される方向を言う。ただし、対象面が平面でない場合やユーザと対象面との位置関係によっては、座標軸は必ずしも対象面に平行あるいは直交の関係でなくてもよい。その場合も、z軸は認識対象と対象面との近接関係(両者の間の距離の大きさの程度)を検出する方向に設定され、z軸と交わる方向にx軸とy軸とが設定される。
なお以下では、ユーザがタッチ操作の入力に用いる操作体として、ユーザ自身の腕103を使う場合を例に挙げて説明する。ただし、本実施形態は、指の代わりに手で握ったスタイラスでタッチ操作が入力される場合や、人体ではなくロボットアームを使う場合など、操作体のうちタッチ入力に使用される部分(突起部)が、操作体自体とは独立して可動するような場合に適用可能である。
図1(B)は、本実施形態における情報処理装置100のハードウェア構成の一例を示すブロック図である。同図において、CPU110は、バス113を介して接続する各デバイスを統括的に制御する。オペレーティングシステム(OS)をはじめ、後述するフローチャートに示されるような本発明に係る各処理プログラム、デバイスドライバ等はROM112に記憶されており、RAM111に一時記憶され、CPU110によって適宜実行される。RAM111は、高速にアクセス可能なCPU110の主メモリ、ワークエリア等の一時記憶領域として用いられる。ここでOSおよび各処理プログラム等は外部の記憶装置116に記憶されていてもよく、その場合は電源投入時に必要な情報がRAM111に適宜読み込まれる。また、ディスプレイI/F114は、情報処理装置100内部で生成される表示アイテム(表示画像)をプロジェクタ118が処理可能な信号に変換する。入出力I/F114は、距離画像センサ115から距離情報を取得し、情報処理装置100が処理可能な情報に変換するとともに、記憶装置116と情報処理装置100間で相互にデータの変換を行う。
本実施形態では、情報処理装置100で投影するデジタルデータは記憶装置116に格納されているものとする。記憶装置116としては、ディスクデバイスやフラッシュメモリ、ネットワークやUSBなどの各種の入出力I/F114を介して接続される記憶装置116を使用する。本実施形態において、距離画像センサ115は、操作領域104上の情報を取得するために用いられる撮像部である。距離画像センサ115によって取得された画像は入力画像としてRAM111で一時保存され、CPU110によって適宜処理され、破棄されるが、適宜必要なデータは記憶装置116に蓄積しても構わない。
図1(C)は、本実施形態における情報処理装置100の機能構成の一例を示すブロック図である。情報処理装置100は、画像取得部120、操作体取得部121、指示点検出部122、基準決定部123、操作認識部124、出力制御部125を含んで構成される。これらの各機能部は、CPU110が、ROM112に格納されたプログラムをRAM111に展開し、後述する各フローチャートに従った処理を実行することで実現されている。また例えば、CPU110を用いたソフトウェア処理の代替としてハードウェアを構成する場合には、ここで説明する各機能部の処理に対応させた演算部や回路を構成すればよい。画像取得部120は、情報処理装置100のユーザが、自らの腕を挿入して操作を行うタッチ対象面101上の空間を、距離画像センサ115が撮像したことで得られた画像を、入力画像として取得する。本実施形態における入力画像は、各ピクセルの画素値に距離画像センサ115から被写体までの距離が反映された距離画像である。操作体取得部121は、画像取得部120が取得した入力画像のうち、操作体であるユーザの腕が被写体として写る腕領域を抽出する。本実施形態では、抽出された腕領域を、操作体として追跡していく。指示点検出部122は、操作体取得部121が抽出した腕領域から、ユーザの手のうち指先に相当する位置を、指示点として検出する。なお、指の代わりにスタイラスなどが用いられている場合、その先端が指先に相当するものとして指示点として検出される。本実施形態では、入力画像の多数のピクセルのうち、1点の座標が指示点の位置として検出されるとする。基準決定部123は、腕領域の中で、指示点検出部122が検出する指先とは異なる位置に、操作体である腕の位置の基準として扱われる基準点を決定する。例えば、手の甲の中心や手首の中心に相当する1点の座標を求める。操作認識部124は、指示点検出部122が検出する指示点の位置やその移動に関する方向やスピードなどが辞書に所定の条件を満たすかに基づいて、情報処理装置100に入力される所定のタッチ操作を認識する。その際、指先が、タッチ対象面に対してタッチ状態から非タッチ状態に遷移した場合、それまでの所定の期間における指示点の移動と、同じ期間での基準点の移動とを使って、リリース後に入力の有無が確定する所定のタッチ操作が入力されたかを判定する。出力制御部125は、操作認識部124によって認識された操作に対応する各種出力を制御する。例えば、タッチ対象面101に投影させるための画像を生成してプロジェクタ118に対して出力する。各機能部は、RAM111、ROM112あるいは、記憶装置116を処理中のデータや情報を保持する保持部として利用する。
この他、手ぶり等の空間ジェスチャ動作を認識するジェスチャ認識部など、情報処理装置100の使用目的やアプリケーションに応じた機能部を構成することができる。
次に、図2に示すタッチ認識処理のフローチャートを用いて、情報処理装置100が行うタッチ認識処理を詳細に説明する。本実施形態では、距離画像センサ115によって撮影された距離画像が情報処理装置100に入力されたことに応じて図2のフローチャートの処理が開始される。また本実施形態では、図2のフローチャートの処理が、距離画像センサ115から距離画像が入力される毎に繰り返される。従って処理が繰り返される周期は、距離画像センサ115の撮像映像のフレームレートに一致する。
ステップS100において、画像取得部120は距離画像センサ115によって撮像された距離画像を、入力画像として一定時間毎に取得し、RAM111に随時保持する。距離画像センサ115によって撮像された距離画像の画素値は距離画像センサ115までの距離を表している。
ステップS101において、操作体取得部121は、画像取得部120によって取得された距離画像から操作体である人の腕が写る領域(腕領域)を抽出する。そして、抽出した腕領域の輪郭を示す位置情報を取得し、RAM111にその情報を保持する。ここで人の腕とは、人の肩から指先にかけての部位の全てを指し、撮像画像のうち、人の腕に該当する部分が一部写る領域が、腕領域である。また本実施形態において手とは、腕のうち、手首から先の全てを差す。手には、5指、掌、甲といった部位が含まれる。操作体取得部121の実際の処理としては、取得した距離画像の各画素が示すz方向の座標値に対して閾値処理を行うことで、テーブルよりも高さが高い座標値を持ち、かつ画像端と接触する領域を、腕領域として抽出する。ただし、腕領域の抽出方法はこれに限られず、例えば別途撮像された操作領域104のRGB画像における肌色領域に対応する部分を抽出する等してもよい。また、本実施形態の操作体取得部121は、腕領域が抽出された入力画像に微分フィルタを適用することに基づいて、輪郭線の座標を取得する。さらに、操作体取得部121は腕領域と画像端が接触するピクセルの平均位置(以下、侵入位置)を取得し、これをRAM111に保持する。
ステップS102において、基準決定部123は、操作体取得部121によって取得された腕領域のうち、指先ではない位置に、基準点を決定する。基準点は、腕自体の位置を表す座標を得るために決定するものである。本実施形態では、腕領域のうち、手の甲部分の中心に相当する点を特定し、その位置を基準点と決定する。手の甲の中心を特定する方法としては、例えば、腕領域内の各ピクセルについて、侵入位置として取得したピクセルからの距離と腕領域の輪郭線までの最短距離の積を求め、それが最大となるピクセルの位置を算出する。ただしこの方法は一例であり、別の方法を用いてもよい。基準決定部123は基準点の三次元位置を取得し、RAM111にその情報を保持する。距離画像における基準点のピクセルは、距離画像センサ115から見た、手の甲の中心の表面部分までの距離を表している。なお、図1(A)のテーブルトップインタフェースシステムでは、上方から入力画像を撮像するため、基準点は「手の甲部分の中心」と表現しているが、撮像系の設定の仕方によっては、同じ位置を「掌の中心」と表現する方が自然な場合もある。例えば、透明度を有するタッチ対象面を、下方から撮像した入力画像を得る構成の場合は、距離画像に撮像されるのは腕の掌側の表面になる。このように手の部位の呼称は適宜選択されればよい。
本実施形態では、距離画像中での、基準点として決定されたピクセルの位置及び画素値に、キャリブレーションパラメータを反映させた計算処理により、図1(A)に示されている(x、y、z)座標に変換する。そして変換結果を、腕全体としての位置を表す基準点の3次元位置情報として取得する。なお、本実施形態では腕領域の基準点として手の甲の中心を求める例を説明したが、基準点は、腕全体の位置を得るための基準として扱える位置情報であれば、甲の中心に限られない。例えば手首の中心を求めてもよい。
ステップS103において、指示点検出部122は、操作体取得部121によって取得された腕領域から、操作体が示す位置を表す指示点として、指先に相当するピクセルを特定する。例えば、腕領域の中で侵入位置からのユークリッド距離が最大となる点を指先として検出する。ただしこの検出方法は一例であり、別の方法を用いてもよい。さらに指示点検出部122は、ステップS102と同様の方法で、指先に相当するピクセルの、画像上の位置と画素値とから、指先の三次元位置情報を取得し、RAM111にその座標情報を保持する。ここで、指先のz座標は、対象面と指先との間の距離を表している。言い換えれば、指先に相当するピクセルのz座標は、対象面101からの、指先の高さを表す。以後、ステップS103で取得される指示点のz座標を、指先高さと呼ぶ。本実施形態では指先高さの尺度として三次元空間上のユークリッド距離(mm)を用いるが、別の距離尺度を用いてもよい。
ステップS104からステップS106において、操作認識部124は指先がタッチ状態か非タッチ状態かを判定する。なお、情報処理装置100の初期状態は非タッチ状態である。まず、ステップS104において、操作認識部124は、取得されている指先高さが、所定のタッチ閾値以下か判定する。タッチ閾値は、ユーザの指先がタッチ対象面にタッチしているとみなすことができるタッチ状態を検出するための所定の高さの値である。本実施形態では、距離画像センサ115の検出誤差や、画素値に基づいてz座標を算出する計算に生じる誤差を考慮した上で、適切な値が事前に設定されている。例えば、情報処理装置100の設計時、あるいは設置時など、アプリケーションに対する操作が開始されるより前に設定されるとする。指先高さが所定のタッチ閾値以下の場合(ステップS104でYES)、ステップS107に進む。指先高さが所定のタッチ閾値以下ではない場合(ステップS104でNO)、ステップS105に進む。
ステップS105において、操作認識部124は、取得されている指先高さが、所定のリリース閾値以下か判定する。リリース閾値は、ユーザの指先がタッチ入力を終えたとみなすことができる非タッチ状態を検出するための所定の高さの値である。本実施形態では、リリース閾値もタッチ閾値と同様に、距離画像センサ115の検出誤差や、画素値に基づいてz座標を算出する計算に生じる誤差を考慮した上で、適切な値が事前に設定されている。指先高さが所定のリリース閾値以下の場合(ステップS105でYES)、ステップS106に進む。指先高さが所定のリリース閾値以下ではない場合(ステップS105でNO)、ステップS113に進む。なお、ステップS104及びステップS105の閾値処理において、指先高さが各閾値と一致する場合をいずれの判定結果にするかは閾値の定め方と同様、システムの構成や環境に合わせて適宜選択されればよい。本実施形態では、少なくとも、指先高さがタッチ閾値より小さい場合をタッチ状態、指先高さがリリース閾値より大きい場合を非タッチ状態として定義し、指先高さがリリース閾値を上回ったことに応じて、タッチ状態から非タッチ状態への遷移を検出する。
ステップS106において、操作認識部124は、指先が前フレームまでの処理の結果として、既にタッチ状態に遷移しているかを判定する。本実施形態では、後述するステップS107あるいはステップS113で、最後に遷移した状態を示す情報がRAM111に保持される。操作認識部124は、RAM111を参照することで、ステップS106の判定を行う。既にタッチ状態である場合(ステップS106でYES)、ステップS108へ進む。タッチ状態ではない場合(ステップS106でNO)、現フレームの入力画像を対象とした図2のフローチャートの処理を終了する。本実施形態では、タッチ状態ではない場合とは、非タッチ状態である場合に相当する。情報処理装置100が起動された直後など、タッチ状態への遷移が検出されておらず、RAM111に状態遷移の結果が保持されていない場合、ステップS106の判定結果は常にNOとなる。従って、ステップS106でNOの判定がなされる場合とは、非タッチ状態への遷移がなされている後であるか、あるいは、未だタッチ入力が行われていない初期状態である場合であるため、この時点ではタッチ操作の認識を行う必要が生じていないと言える。
ステップS107からステップS112までの処理は、指先がタッチ対象面に対するタッチ状態にある場合に行われる処理である。ステップS107で、操作認識部124は、指先の状態を、タッチ状態に遷移させ、RAM111にそれを示す情報を保持する。ステップS108で、操作認識部124は現在時刻をタッチ時刻としてRAM111に保持する。本実施形態では、タッチ開始時刻は、次に非タッチ状態への遷移が検出されるまでの各フレームで取得され、RAM111に蓄積される。ステップS109で、操作認識部124は、現フレームで決定された基準点の位置を表す座標情報を、最新の基準点の位置としてRAM111に保持する。そして、現フレームから検出された指先(指示点)の位置を表す座標情報を、最新の指示点としてRAM111に保持する。タッチ位置は、次に非タッチ状態への遷移が検出されるまでの各フレームで取得され、RAM111に蓄積される
ステップS110からステップS112において、操作認識部124はムーブを認識する。ムーブは、タッチ状態のまま指先をタッチ対象面に沿って移動させるのに従い、表示アイテムを移動させる指示の入力等に用いられる。ムーブは、ドラッグと呼ばれることもある。ステップS110では、操作認識部124は、タッチ状態での指示点の移動距離を取得する。ここで取得する移動距離とは、タッチ対象面に平行な方向、すなわちxy平面上での移動距離である。本実施形態では、操作認識部124は、RAM111に保持されている指示点の位置情報を参照して、前フレームと現フレームでの指示点の位置のx座標及びy座標から、2点間の距離を取得する。取得された距離が、フレーム間での指示点の移動距離である。
ステップS111では、操作認識部124が、取得した移動距離が所定のムーブ閾値以上かを判定する。取得した移動距離が所定のムーブ閾値以上であれば(ステップS111でYES)、ステップS112に進む。取得した移動距離が所定のムーブ閾値以上でなければ(ステップS111でNO)、現フレームを対象とする図2のフローチャートの処理を終了する。ムーブ閾値は、指示点の位置の検出誤差を考慮した上で、ユーザが意図的に指先を移動したとみなせるだけの距離が予め設定される。ムーブ閾値は、タップ条件に含まれる距離の閾値と同一であってもよく、タップ閾値より大きい距離としてもよいが、少なくとも、ムーブが一度でも認識された場合は、タップ条件は満たされないように設定される必要がある。ムーブとタップは排他的な関係にある操作種別だからである。なお、本実施形態において、ステップS110で取得する距離を、xy平面上での距離とするのは、ムーブ自体がタッチ状態のままタッチ対象面上に指を沿わせる操作であり、z方向の移動量が操作としての意味を持たないからである。タッチ閾値が十分小さく設定できる環境では、ムーブが行われたときにフレーム間でz座標に生じる差分は、微小となるため、移動距離の計算にz座標を考慮しても判定結果に影響することは少ない。しかしながら、通常、タッチ閾値は高さの検出誤差を吸収するだけの大きさをもつように設定される。従って、本実施形態では、ムーブの有無の判定に、z軸方向の移動の影響が反映されないように、移動距離を算出する方向を限定する。
ステップS112において、操作認識部124は、ムーブが入力されたことを認識し、出力制御部125など、入力操作に対する応答に関わる各機能部に通知する。例えば、ムーブイベントを発行する。出力制御部125は、アプリケーションの規定に従い、ムーブイベントに応じて出力すべき情報をROM112や記憶装置116から取得し、プロジェクタ118などの出力デバイスに出力させる。ステップS112の処理が完了したら、現フレームを対象とする図2のフローチャートの処理を終了する。
一方、ステップS113からステップS117は、指先が非タッチ状態であると判定された場合に実行される処理である。ステップS113において、操作認識部124は指先の状態を、非タッチ状態に遷移させ、RAM111にそれを示す情報を保持する。本実施形態では、タッチ状態から非タッチ状態への遷移が検出されたことで、リリースの動作を認識する。ステップS114において、操作認識部124は現在時刻をリリース時刻としてRAM111に保持する。リリース時刻は、常に最新の情報のみがRAM111で保持される。ステップS115において、操作認識部124は、現フレームから検出された基準点の位置を表す座標情報を、リリース時の基準点の位置としてRAM111に保持する。そして現フレームから検出された指先(指示点)の位置を表す座標情報を、リリース時の基準点の位置情報としてRAM111に保持する。リリース時の基準点及び指示点の位置情報常に最新の情報のみが保持される。
ステップS116において、操作認識部124は、リリース後に確定する操作の認識処理を行う。本実施形態では、リリース後に確定する操作の認識処理において、タップとフリックの有無を判定する。ステップS116の処理が完了すると、タップとフリックのいずれかが認識される、あるいは、いずれでもないことが確定する。なお、本実施形態の場合、タップとフリックのいずれも認識されない場合とは、タッチ状態の間にムーブが入力された後で、フリックすることなくリリースが行われた場合である。ステップS116の処理の詳細な内容は後述する。ステップS117で、操作認識部124は、RAM111に保持されている、タッチ開始時刻、タッチ状態で検出された指示点と基準点の位置情報、及びムーブの有無を表す情報をクリアする。以上が、図2のフローチャートの処理である。
次に、図4のフローチャートを用いて、本実施形態のステップS116で実行される、リリース後に確定する操作の認識処理について説明する。本実施形態において、リリース後、すなわち非タッチ状態への遷移後に確定するタッチ操作はタップとフリックの二種類である。上述した通り、タップは、タッチ開始後、所定の時間(通常は数フレーム分などの短い時間)の間に、指先がリリースされたことと、タッチからリリースまでの間に、所定のタッチ対象面に沿う方向に移動が生じていないことを条件に認識される操作である。また、フリックは、リリース直前に対象面に沿う方向に高速な移動がなされたことを条件に認識される操作である。このように、タップとフリックはどちらもリリースがどのような条件下で行われたかが、認識条件に含まれる。さらに、これらの2つは排他的な関係にあり、同時に入力されることはない。つまり、タップが入力されたことが確定した時点で、フリックが入力された可能性はないとみなすことができ、一方で、フリックが入力されたことが確定した時点で、タップが入力された可能性はないとみなすことができる。
ステップS200において、操作認識部124は、非タッチ状態への遷移が検出するまでの特定期間における指示点の移動を表す第1ベクトルを取得し、RAM111に保持する。本実施形態では、第1ベクトルの取得方法として、まずタッチ状態にある間に検出した指先の位置情報のうち、最もz座標が小さいときの位置を表す座標情報を、指示点の最下点位置として取得する。そして、ステップS115で保持されたリリース時の指示点の三次元座標と、指示点の最下点位置の三次元座標との差をとることで、3次元空間での第1ベクトルを取得することができる。ただしこの方法は一例であり、別の方法を用いてもよい。例えば、第1ベクトルはxy座標で定義された2次元のベクトルとして求めても構わない。
ステップS201において、操作認識部124は、非タッチ状態への遷移が検出するまでの特定期間における、基準点の移動を表す第2ベクトルを取得し、RAM111に保持する。なお、第1ベクトルと第2ベクトルは、同一期間での指示点と基準点の移動を表すベクトルである。本実施形態では、第2ベクトルの取得方法として、まず指示点の最下点位置が検出されたのと同じフレームにおいて取得された、基準点の位置を表す座標情報を、基準点の最下点位置として取得する。そして、ステップS115で保持されたリリース時の指示点の三次元座標と、と基準点の最下点位置の三次元座標との差をとることで3次元空間での第2ベクトルを取得することができる。ただしこれは一例であり、別の方法を用いてもよい。例えば、第2ベクトルはxy座標で定義された2次元のベクトルとして求めても構わない。
ステップS202において、操作認識部124はタップ仮認識処理を行う。ここで、図4(A)のフローチャートを用いて、タップ仮認識処理の内容を説明する。まず、ステップS300において、操作認識部124は、リリース中の対象面に沿う方向の移動距離を取得する。本実施形態ではまず、操作認識部124は、ステップS200の処理でRAM111に保持された指示点の最下点位置の座標情報と、最下点位置が検出されたときのフレームに対応するタッチ時刻もRAM111から取得する。そして、操作認識部124は、取得した指示点の最下点位置の情報と、ステップS115でRAM111に保持されたリリース時の指示点の位置情報に基づいて、この間の指示点のタッチ対象面に沿う方向への移動距離を取得する。具体的には、それぞれの3次元座秒情報のうち、xy成分のみを用いて移動距離を算出する。なお、ここで求める移動距離が、第1ベクトルの大きさと一致するとみなせる環境であれば、ステップS301で操作認識部124は、RAM111から第1ベクトルの大きさ情報を取得するとしてもよい。また、第1ベクトルをxy平面に投影し、その大きさを取得してもよい。
ステップS301では、操作認識部124が、取得した移動距離がタップ距離閾値より小さいかを判定する。タップ距離閾値は、タップ条件のうち、物体が対象面に対してタッチ状態になってから非タッチ状態までにタッチ対象面に沿う方向の移動がなされていないことを判定するための設けられる距離の閾値である。従って、タップ距離閾値としては、位置情報の検出誤差を吸収した上で、ユーザが意図的に指を物体が対象面に沿う方向に移動させてはいないとみなすために適切な距離の値が設定される必要がある。ただし本実施形態では、ユーザが指先をタッチ対象面に垂直な方向に下ろして直上に上げるという理想的な入力を行う場合だけでなく、腕自体を動かしている途中でタップを入力するような場合にもタップを認識するためタップ距離閾値に余裕を持たせる。従来であれば、タップ距離閾値に余裕を持たせて大きく設定した場合、フリック入力との混同が発生し易くなるが、本実施形態では、後述するタップorフリック選択処理により、そのような場合にも認識精度を低下させないように処理する。取得した移動距離が、タップ距離閾値より小さいと判定される場合(ステップS301でYES)、処理はステップS302に移行する。取得した移動距離がタップ距離閾値より小さいと判定されない場合(ステップS301でNO)、処理はステップS304へ移行する。
ステップS302において、操作認識部124は、タッチ状態であった時間がタップ時間閾値より短いかを判定する。本実施形態では、タッチ状態であった時間として、ステップS300で取得した指示点の最下点位置が検出されたときのタッチ時刻と、ステップS114で保持されたリリース時刻の差を取得した上で、タップ時間閾値より短いかを判定する。ただし、非タッチ状態からタッチ状態への遷移が検出された時刻を基準に、タッチ状態であった時間を計算することもできる。ここでタップ時間閾値とは、タップ条件のうち、タッチからリリースまでの時間に関する閾値である。例えば、1秒といった時間が設定される。ただし、タップ条件に時間に関する条件が含まれない場合、ステップS302は省略されてもよい。ただし、タップ時間閾値として短い時間が設定されている場合に、タップとフリックの混同がより発生しやすい傾向がある。本実施形態では、後述するそのような場合にも認識精度を低下させないように処理することができる。タッチ状態であった時間がタップ時間閾値より短いと判定される場合(ステップS302でYES)、ステップS303に進む。タッチ状態であった時間がタップ時間閾値より短いと判定されない場合(ステップS302でNO)、ステップS304に進む。
ステップS303において、操作認識部124は、タップフラグを「ON」に設定し、RAM111に保持し、タップ仮認識処理を終了する。タップフラグの初期値は「OFF」であるとする。本実施形態では、タップフラグが「OFF」である場合は、タップは入力されていないと一意にみなすことができる場合である。ステップS304において、操作認識部124は、タップフラグを「OFF」に設定してRAM111に保持し、タップ仮認識処理を終了する。
図3のフローチャートの処理に戻り、ステップS203においては、操作認識部124が、フリック仮認識処理を行う。ここで、図4(B)のフローチャートを用いて、フリック仮認識処理の内容を説明する。ステップS400において、操作認識部124は、指示点のリリーススピードを取得する。ここで取得されるリリーススピードとは、タッチ状態から非タッチ状態への遷移が検出するまでの所定の時間の間における、指示点のタッチ対象面に沿う方向の移動スピードである。本実施形態では、非タッチ状態への遷移が検出される前のフレームで検出されていた指示点のxy座標と、ステップS115で保持したリリース時の指示点のxy座標との差分と、フレームレートとから、指示点のリリーススピードを取得する。ただし、別の方法を用いてもよい。例えば、非タッチ状態への遷移が検出される前のフレームで検出されていた指示点のxy座標と、ステップS115で保持したリリース時の指示点のxy座標との差分とを用いて、指示点の1フレームあたりの移動距離をリリーススピードとして取得してもよい。
ステップS401において、操作認識部124は、取得した指示点のフリックスピードが、フリック条件となる所定のスピードを表すフリック閾値以上かを判定する。取得したフリックスピードが、フリック閾値以上であると判定された場合(ステップS401でYES)、ステップS402に進む。取得したフリックスピードが、フリック閾値以上であると判定されない場合(ステップS401でNO)、ステップS403に移行する。なお、フリック条件は、x方向のリリーススピードとy方向のリリーススピードのそれぞれに対して設けられてもよい。
ステップS402において、操作認識部124はフリックフラグを「ON」に設定し、RAM111に保持し、フリック仮認識処理を終了する。フリックフラグの初期値は「OFF」であるとする。本実施形態では、フリックフラグが「OFF」である場合は、フリックは入力されていないと一意にみなすことができる場合である。ステップS403において、操作認識部124はフリックフラグを「OFF」に設定し、RAM111に保持し、フリック仮認識処理を終了する。
図3のフローチャートに戻り、ステップS204において、操作認識部124はタップフラグが「ON」かつフリックフラグが「OFF」かを判定する。判定結果がYESである場合はステップS205に進む。判定結果がNOの場合、ステップS206へ移行する。ステップS205において、操作認識部124は、タップが入力されたと判定する。従って、タップを認識したことを、出力制御部125など、入力操作に対する応答に関わる各機能部に通知する。例えば、タップイベントを発行する。出力制御部125は、アプリケーションの規定に従い、ムーブイベントに応じて出力すべき情報をROM112や記憶装置116から取得し、プロジェクタ118などの出力デバイスに出力させる。ステップS205の処理が完了したら、図3のフローチャートの処理を終了し、上述したステップS117に進む。
ステップS206では、操作認識部124は、フリックフラグが「ON」かつタップフラグが「OFF」かを判定する。判定結果がYESである場合はステップS207へ、判定結果がNOである場合はステップS208へ移行する。ステップS207において、操作認識部124は、フリックが入力されたと判定する。従って、フリックを認識したことを、出力制御部125など、入力操作に対する応答に関わる各機能部に通知する。例えば、フリックイベントを発行する。出力制御部125は、アプリケーションの規定に従い、ムーブイベントに応じて出力すべき情報をROM112や記憶装置116から取得し、プロジェクタ118などの出力デバイスに出力させる。ステップS205の処理が完了したら、図3のフローチャートの処理を終了し、上述したステップS117に進む。
ステップS208では、操作認識部124は、タップフラグとフリックフラグの両方が「ON」かを判定する。判定結果がYESである場合、ステップS209に進む。判定結果がNOである場合、図3のフローチャートの処理を終了し、上述したステップS117に進む。なお、ステップS208でNOと判定される場合は、すなわち、タップとフリックの両方が入力されていない場合である。本実施形態においては、タッチ状態の間にムーブが入力された後で、フリックすることなくリリースが行われた場合がこれに相当する。
ステップS209で、操作認識部124はタップorフリック選択処理を行い、図3のフローチャートの処理を終了する。タップorフリック選択処理とは、タップとフリックの両方について、入力された可能性があると仮認識されている状態で、より尤もらしい方の操作を選択する処理である。
次に図5のフローチャートを参照して、タップorフリック選択処理の内容を説明する。まず、ステップS500において、操作認識部124は、ステップS200で取得した第1ベクトルとステップS201で取得した第2ベクトルについて、タッチ対象面に平行な方向の成分(xy成分)が類似するとみなされるかを判定する。本実施形態では、第1ベクトルと第2ベクトルのxy成分の類似度を取得し、ベクトルの類似度に関する第1閾値との比較処理によって判定を行う。本実施形態では、ベクトルの類似度として、ベクトルの内積を用いる。従って、類似度は0に近いほどベクトルが垂直に近いことになる。従って、第1閾値は、内積の値の値が設定される。操作認識部124は、類似度がベクトルの類似度に関する第1閾値以上である場合に、2つのベクトルが類似するとみなされると判定する。2つのベクトルが類似するとみなされる場合(ステップS500でYES)、ステップS501に進む。2つのベクトルが類似するとみなされない場合(ステップS500でNO)、ステップS502に進む。
ステップS501において、操作認識部124は、ステップS207と同じように、フリックを認識し、タップorフリック選択処理を終了する。
ステップS502において、操作認識部124は、ステップS205と同じように、タップを認識し、タップorフリック認識処理を終了する。以上が、本実施形態で実行される、一連のタッチ認識処理である。なお、本実施形態では、指示点として検出した指先の移動、及び基準点の移動を表す情報として、ベクトルを用いる例を説明した。しかしながら、移動を表す情報は、ベクトル形式に限定されない。例えば、ベクトルの大きさと方向に相当する、移動距離や移動方向のそれぞれを用いてもよい。
次に、図6(A)〜(D)を用いて、フリックあるいはタップが入力されるときのユーザの腕と指の状態の具体例を説明する。図6(A)〜(D)はタッチ操作中のユーザの腕を、距離画像センサ115の位置から見た様子を図示している。破線の腕輪郭202はタッチ最下点時の腕領域、実線の腕輪郭200はリリース時の腕領域を示している。また、破線の円203はタッチ最下点時の基準点、実線の円201はリリース時の基準点を示している。実線の矢印は第1ベクトル、二重線の矢印は第2ベクトルを示している。ただし、タッチ最下点時とリリース時で移動がない場合には、タッチ最下点時の腕輪郭202、基準点203、第1ベクトル、第2ベクトルは図示していない。また、図6(A)〜(D)の全てにおいて、タッチ最下点のタッチ時刻とリリース時刻の差はタップ時間閾値未満より小さい。
図6(A)は、ユーザがタップを入力している様子を表す。この場合、腕自体には、xy平面方向の移動がほとんど生じないことが多い。第1ベクトルと第2ベクトルは大きさがほぼ0であるため図示していない。タッチからリリースまで指先のxy座標はほぼ動かないため、タップ認識処理でタップフラグが「ON」、フリック認識処理でフリックフラグが「OFF」にセットされ、最終的にはタップが認識される。
図6(B)は、ユーザが、腕自体はあまり動かさずに、指先を高速に移動させることでフリックを行った様子を表す。ただし、指がタッチ状態であったの短時間には、xy平面方向の移動はなされていないとする。これにより、第1ベクトルは図示しているが、第2ベクトルの大きさはほぼ0であるため図示していない。タップ認識処理ではタップフラグが「ON」にセットされる。そしてリリースの瞬間に指先がxy方向に素早く移動しリリース時指先xy移動速度が大きいため、フリック認識処理ではフリックフラグが「ON」にセットされる。最終的にタップorフリック選択処理では第1ベクトルと第2ベクトルの類似度が小さいため、フリックが認識される。
図6(C)は、ユーザが腕を静止させることなくxy平面方向に移動させている途中で、タップ操作が入力される様子を表す。タップ認識処理ではタップフラグが「ON」にセットされる。フリック認識処理では、リリース時の指先xy移動速度が大きいためフリックフラグが「ON」にセットされる。図示しているように第1ベクトルと第2ベクトルはほぼ平行であるため類似度は高くなる。そのため、最終的にタップorフリック選択処理では、タップが認識される。テーブルトップ型のデバイスにおいては、ユーザはタッチしてから体の方向へ腕を操作平面から引き抜きながらタップすることが多いが、本実施形態ではそのようなタップもロバストに認識できる。ただし、本実施形態ではタッチ後に腕を移動させる方向に制限はなく、タッチ後にどの方向に腕を動かしてもタップをロバストに認識することができる。
図6(D)は、ユーザが、腕全体を移動させている途中で、指先だけを高速に移動させることでフリックを入力する様子を表す。ただし、指がタッチ状態であったの短時間には、xy平面方向の移動はなされていないとする。これにより、タップ認識処理ではタップフラグが「ON」にセットされる。フリック認識処理では、リリース時指先xy移動速度が大きいためフリックフラグが「ON」にセットされる。図示しているようにフリック時に指先が動くため、第1ベクトルと第2ベクトルの類似度は低くなるため、類似するとみなされない。従って、最終的にタップorフリック選択処理では、フリックが認識される。以上が、本実施形態において、情報処理装置100に対して入力されたユーザ操作に応じて、タッチ操作を認識する処理である。このように本実施形態では、操作体として腕が利用される場合に、タッチ入力に利用される指先の移動と、腕自体の位置を表す基準点の移動の類似度に応じて、フリックとタップの認識精度を向上させる。例えば、距離画像センサの画像取得間隔が長く、かつ取得した画像にノイズが含まれる場合には、指先の情報のみを用いても指先の軌跡が似ている操作を区別することは難しい。図6の例ではあ、指先のタッチ対象面に平行な方向の移動軌跡のみを用いただけでは、図6(B)に示す腕を動かさないフリック操作と図6(C)に示す腕を動かすタップ操作を区別することは難しい。そこで本実施形態では指先に加え基準点の移動情報を考慮することで、タッチ操作の認識精度を向上させることができる。なお、本実施形態ではタッチ操作の認識をルールベースで行っているが、機械学習により学習した識別器を使う等してもよい。
<変形例>
ここで、第1の実施形態の変形例として、上述したタップorフリック選択処理に、さらに別の指標に関する判定処理を加える例を示す。第1の実施形態では、指示点の移動を表す第1ベクトルと、基準点の移動を表す第2ベクトルのうち、タッチ対象面に平行な方向の成分のみを使って判定を行った。それに対し、変形例では、操作体の移動について三次元(xyz)の情報を利用する。
第1の実施形態において参照した図11(A)のように、タッチ操作で移動させる対象が小さかったり、対象を移動させたい距離が短かったりするような場合には、フリックは、腕よりも指を多く動かす、つまり指関節を曲げることで入力されることも多い。しかしながら、比較的大きな表示オブジェクトに対しフリックを行う場合には、指関節を動かすことなく、腕全体を動かしてフリックを行う方が自然な場合がある。例えば、図11(B)のように対象面に大きく表示される文書をフリックでページ送りする場合等がある。図11(B)でも図11(A)と同様、実線で輪郭が描かれた腕は、ユーザの腕の最新の位置を、点線で輪郭が描かれた腕は、移動前に遡った過去(1フレーム前)におけるユーザの腕の位置を表す。図11(B)では初期状態で1ページ目が表示されている。そしてムーブにより文書が途中までページがスライド移動された後、フリックが入力されることで、次ページへの以降が完了した状態が速やかに表示される。図11(B)では、指関節を動かすことなく腕全体を大きく動かすことで、フリックが入力されている。変形例によれば、このような腕の動きによってフリックの入力された場合でも、指示点と基準点のz軸方向の移動について考慮することで、タップとフリックの認識精度を向上させることができる。
以下では、指関節を曲げる動きが伴うフリックを「指フリック」、指関節の動きが伴わない腕を動かして行うフリックを「腕フリック」と定義して説明する。なお、腕フリックを距離画像センサから見た概略図は、図6(C)の腕を動かすタップとほぼ同一になり、第1の実施形態と同じ方法で取得した第1ベクトル、と第2ベクトルのうち、xy方向の成分は類似度が高くなってしまう。しかし、指先の微細な軌跡は腕を動かすタップとは異なる。
変形例における、システムの外観、ハードウェア構成、及び機能構成は、第1の実施形態の図1に示したものに準じる。ただし、変形例の操作認識部124は、第1の実施形態とはタップorフリック選択処理において、さらに後述する複数の処理を実行する。
変形例の情報処理装置100も、第1の実施形態と同様、図2のフローチャートに従ってタッチ認識処理を実行する。ただし、ステップS209では、図9のフローチャートに示されるタップorフリック認識処理を実行する。図9のフローチャートの処理が、第1の実施形態におけるタップorフリック選択処理(図5のフローチャート)と異なるのは、リリースに至るまでの指先の移動について、z成分を用いている点である。以下、図9のフローチャートを参照して、変形例におけるタップorフリック認識処理の内容を説明するが、図5のフローチャートと内容が共通する処理には同じステップ番号を付与し、詳細な説明は省略するとする。変形例の場合、第1ベクトルと第2ベクトルの操作面方向成分が類似しているとみなされた場合(ステップS500でYES)、処理はステップS600に進む。また、第1ベクトルと第2ベクトルの操作面方向成分が類似するとみなされない場合(ステップS500でNO)は、第1の実施形態と同様、ステップ501に進み、フリックが認識される。
ステップS600において、操作認識部124は、第1ベクトルのxy成分の大きさとz成分の大きさの差の絶対値を、ベクトルの成分の大きさに関する第2閾値を比較する。第1ベクトルのxy成分の大きさとz成分の大きさの差の絶対値が第2閾値より小さいと判定される場合(ステップS600でYES)、ステップS602へ移行する。第1ベクトルのxy成分の大きさとz成分の大きさの差が第2閾値より小さいと判定されない場合(ステップS600でNO)、ステップS601へ移行する。
ステップS600の処理は、第1ベクトルのxy成分(対象面に平行な成分)とz成分(対象面に垂直な成分)の大小関係を使うことで、第1ベクトルのみによるフリックとタップの区別が可能かを判定するための処理である。第1ベクトルによるフリックとタップの区別の考え方は、図7(A)を参照して後述する。ステップS600で、判定可能であればステップS601で、指先移動ベクトルのz成分とxy成分の大きさを用いたタップとフリックの判定に移行する。第1ベクトルのみによるフリックとタップの区別ができない(ステップS600でNO)と判定される場合には、ステップS602において、タッチ状態での指示点の軌跡の形状を使ったタップとフリックの区別を行う。タッチ状態での指示点の軌跡の形状を利用する場合の考え方は、図7(B)を参照して後述する。
ステップS601で、操作認識部124は第1ベクトルのz成分の絶対値とxy成分の絶対値の大きさを比較する。詳細は後述する。xy成分のほうが大きい場合にはフリックの認識が確定し、ステップS501へ移行する。z成分のほうが大きい場合にはタップの認識が確定しステップS502へ移行する。
ステップS602で、操作認識部124は指先のタッチ後移動軌跡の形状が、タッチ対象面に近づく側(本実施形態のテーブルトップシステムの場合は下側)に凸を描く形状かを判定する。タッチ後移動軌跡が、タッチ対象面に近づく側に凸を描く形状であればフリックの認識を確定し、ステップS501に移行する。タッチ後移動軌跡が上に凸であればタップに認識を確定し、ステップS502に移行する。
図7を用いて、ステップS600及びステップS601で行う第1ベクトルのz成分の絶対値とxy成分の絶対値の大きさを比較するという処理の詳細を説明する。図7は様々なタッチ操作を操作平面に水平な方向から示した図である。点線はタッチ閾値、破線はリリース閾値を示している。実線の細い矢印はリリースまでの指先の軌跡を示している。指先の軌跡は実際には図7のように連続的に観測されるわけではなく、距離画像の取得間隔に応じて離散的に取得される。黒い矢印は第1ベクトルのz成分、白抜きの矢印はxy成分を示している。図7(A)は腕が動かないタップ、図7(B)は腕が動かない指フリック、図7(C)はタッチ後に腕が動くタップ、図7(D)はタッチ後に腕が動くフリック、図7(E)は腕フリックの様子を示している。図7において、ユーザがタップを意図して入力している場合(A、C)では、タッチ状態での最下点からリリースに至るまでの移動を表すベクトルのうち、xy成分とz成分の大きさに差異が生じ、かつ、z成分の方がxy成分よりも大きい場合が多い。これには、タップ条件に、指示点がxy方向にはほぼ移動しないことが含まれるため、ユーザが速いタイミングで指先を上昇させようとする傾向が反映されている。これに対し、ユーザがフリックを意図して入力している場合(B、D、E)では、タッチ状態での最下点からリリースに至るまでの移動を表すベクトルのうち、xy成分とz成分の大きさに差異が生じ、かつ、xy成分の方がz成分よりも大きい場合が多い。フリック条件には、リリースの直前に指示点がxy方向に高速移動することが含まれるためである。そこで変形例では、上述したように、第1ベクトルのxy成分とz成分の大きさを比較し、いずれかの方が大きいと判定できるだけの差がある場合には、z成分の方が大きければタップ、xy成分の方が大きければフリックと判定する。このように処理することで、図7の場合では、図7(A)では第1ベクトルのz成分とxy成分の大きさに十分に差があり、かつ、z成分がxy成分より大きいと判定され、タップが認識される。そして、図7(D)(E)では、のz成分とxy成分の大きさに十分に差があり、xy成分がz成分より大きいと判定され、フリックが認識される。図7(B)(C)では、第1ベクトルのz成分とxy成分の大きさに十分な差がないため、第1ベクトルの情報のみでは、タップとフリックを区別しきれないとみなされることになる。
次に、図8を用いて、ステップS602で行われるタッチ後軌跡の凹凸判定について詳細に説明する。図8(A)〜(E)は、図7(A)〜(E)と同様に、タッチ操作を操作平面に水平な方向から示した図である。点線はタッチ閾値、破線はリリース閾値を示している。図8にも図7と同様の符号「OFF」っており、図8(A)は腕が動かないタップ、図8(B)は腕が動かない指フリック、図8(C)はタッチ後に腕が動くタップ、図8(D)はタッチ後に腕が動く指フリック、図8(E)は腕フリックの様子を示している。
白抜きの円は、離散的に取得された指先の観測点を表している。対象面に近いほうからそれぞれ、最下点、最下点とリリース位置の中点、リリース位置を表している。中点を中心とした扇形は三点がなす角度を示している。
図8において、ユーザがフリックを意図して入力している場合(B、D、E)では、タッチ状態での最下点からリリースに至るとき、指先がまずタッチ対象面に平行な方向への移動をしてから上昇している。その結果、タッチ状態での最下点からリリースに至るまでの移動軌跡の形状は、タッチ対象面に近づく方向である下方向に膨らんでいる。変形例では、この状態を、移動形状がタッチ対象面に近づく側に凸を描くという。一方で、ユーザがタップを意図して入力している場合(A、C)では、タッチ状態での最下点からリリースに至るときに、タッチ対象面に平行な方向には動かないまま上昇する動きが優先される。その結果、移動軌跡の形状は、フリックの場合とは逆に、タッチ対象面に離れる方向である上方向に膨らんでいる。この現象は、第1ベクトルのxy成分とz成分の大きさが略同じである場合にも生じやすい。ステップS602では、上述した三点がなす角度が180°以上である場合を、下に凸を描く場合、180°より小さい場合を、下に凸を描かない(上に凸)を描く場合と判定すると定義する。これに従い、図8で示す具体例で、上に凸と判定されるのは、図8(A)、(C)であり、下に凸と判定されるのは、図8(B)、(D)、(E)である。
図10の表は、図7及び図8の(A)〜(E)のタッチ操作が、図3及び図9のフローチャートの各ステップでどのように認識・判定されるかをまとめたものである。認識・判定できた場合は○、判定できない場合は×、判定が行われない場合は−を示している。
腕が動かないタップ(A)では、ステップS202でタップフラグが「ON」、ステップS203でフリックフラグが「OFF」にセットされる。タップフラグのみが「ON」なのでタップorフリック選択処理が行われることなく、タップが認識される。
腕が動かない指フリック(B)では、ステップS202及びステップS203で、タップフラグ及びフリックフラグが「ON」にセットされ、ステップS209のタップorフリック選択処理が行われる。ステップS600の指先と基準点の移動ベクトルによる判定では、図6(B)に示すように第1ベクトルと第2ベクトルの類似度が低いため、フリックの認識が確定する。
タッチ後に腕が動くタップ(C)では、ステップS202及びステップS203で、タップフラグ及びフリックフラグが「ON」にセットされ、ステップS209のタップorフリック選択処理が行われる。まず、ステップS600の指先と基準点の移動ベクトルによる判定では、図6(C)に示すように第1ベクトルと第2ベクトルの類似度が高いため、認識は確定せず、ステップS600へ移行する。ステップS600では図7(C)に示すように、z成分とxy成分がほぼ等しいため、ステップS602へ移行する。ステップS602では図8(C)に示すように、三点がなす角度が180度より小さいであり、上に凸であるため、タップの認識が確定する。
タッチ後に腕が動く指フリック(D)では、ステップS202及びステップS203で、タップフラグ及びフリックフラグが「ON」にセットされ、ステップS207のタップorフリック選択処理が行われる。ステップS600の指先と基準点の移動ベクトルによる判定では、図6(D)に示すように第1ベクトルと第2ベクトルの類似度が低いため、フリックの認識が確定する。
腕フリック(E)では、ステップS202及びステップS203で、タップフラグ及びフリックフラグが「ON」にセットされ、ステップS209のタップorフリック選択処理が行われる。まず、ステップS600の指先と基準点の移動ベクトルによる判定では、図6(C)に示すように第1ベクトルと第2ベクトルの類似度が高いため、認識は確定せず、ステップS600へ移行する。ステップS600及びステップS601では図7(E)に示すように、z成分よりxy成分のほうが大きいため、フリックの認識が確定する。
以上が、変形例において、情報処理装置100に対して入力されたユーザ操作に応じて、タッチ操作を認識する処理である。
変形例によれば、フリックに指関節の動きが伴わない場合のように、第1の実施形態で、指示点の移動と基準点の移動が類似してしまう場合でも、フリックとタップの認識精度を向上させることができる。なお、変形例でも、タッチ操作の認識をルールベースで行っているが、機械学習により学習した識別器を使う等してもよい。
(その他の実施形態)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。