図1は、非接触入力装置1の構成を示すブロック図である。非接触入力装置1は、電子機器や機械などの操作対象物に操作者の入力動作に応じた操作データを入力する入力装置であって、操作対象物および非接触入力装置1に操作者が触れることなく操作対象物へのジェスチャ操作を受け付けることができる非接触型の入力装置(タッチレスセンサ、タッチレスジェスチャセンサ)である。
図1に示すように、非接触入力装置1は、光センサ2と、制御部3と、各種データを記憶する記憶部4とを有する。制御部3は、光センサ2および記憶部4と通信可能に接続されている。なお、図示は省略するが、制御部3は、操作対象物にも接続されており、非接触入力装置1で検出された操作データを操作対象物に適宜送信する。
図2は、実施例1の光センサ2の構成を示す図である。図2に示すように、光センサ2は、発光部21と、受光部22と、基板23とを有する。基板23は、平面視において矩形状をなす平板状の部材であり、発光部21および受光部22は、基板23の一方の面(同一面)に配置される。なお、基板23は、平面視において円形状、正方形状または他の多角形状をなす部材であってもよい。
また、発光部21と、受光部22とは、所定の方向に並ぶように配置され、かつ、所定の隙間(距離)を隔てて互いに離間するように配置される。本実施例では、発光部21と、受光部22とは、基板23の長手方向に並ぶように配置される。
発光部21は、所定波長の光を発光する光源を有する。発光部21の光源の光軸は、基板23の表面(基板23における発光部21の設置面)に対し略垂直になるように設けられている。なお、発光部21の光源の光軸は、基板23の表面に垂直な方向に対し多少傾いていてもよい。
発光部21の光源は、たとえば、波長が700nm~1mmの光、いわゆる赤外光を発光する赤外線LEDである。この場合、発光部21から発光される光は、赤外光(赤外線)となる。なお、発光部21から発光される光は、赤外光に限定される必要は無く、発光部21は、赤外光以外の他の波長の光を発光するものでもよい。
また、本実施例では、1つの受光部22に対して1つの発光部21が設けられるようにしたが、1つの受光部22に対して複数の発光部21が設けられてもよい。この場合、複数の発光部21の各々は、受光部22に対する距離が等しくなるように配置される。すなわち、複数の発光部21の各々は、受光部22を中心に同心円状に配置される。また、複数の発光部21の各々は、受光部22に入射する光の光量にムラが出ないように、受光部22の中心を基準に点対称または線対称となる位置に配置される。
受光部22は、発光部から出射された光が検出対象物に照射されることによって生じた反射光を受光して、受光した光の強度(明るさ,光量)に基づく電気信号を出力する。具体的には、受光部22は、受光した光の光量に応じたデジタル値(センサ値)を所定の時間間隔で連続して出力する。
受光部22は、受光した光の光量を検出する検出器としての受光素子を有する。受光素子は、たとえばフォトセンサであり、本実施例では、受光素子の受光面は、発光部21の発光面と略平行な面である。すなわち、受光素子の受光中心方向(受光面に対して垂直な方向)は、発光部21の光源の光軸と同じ方向(平行)となる。なお、受光素子の受光中心方向は、発光部21の光源の光軸の方向に対して、多少傾いていてもよい。ただし、複数の受光素子の受光中心方向は、すべて互いに平行である。
また、受光部22は、3つ以上の受光素子を有する。各受光素子は、基板23の表面上において、第1の方向に2つ以上(複数)配置され、第1の方向に交差する(第1の方向とは異なる)第2の方向に2つ以上並ぶように配置される。すなわち、受光部22では、2方向において複数の受光素子が並ぶように配置される。
本実施例では、図2に示すように、受光部22は、マトリクス状(2×2)に配置される4つの受光素子22A~22Dを有する。本実施例では、第1の方向が基板23の長手方向(発光部21と受光部22とが並ぶ方向)であり、第2の方向が基板23の幅方向である。すなわち、第1の方向と、第2の方向とは直交する方向(直角)である。また、第1の方向および第2の方向のそれぞれの方向に並ぶ受光素子の数は同じである。
なお、受光部22に設けられる受光素子の数および配置態様は特に限定される必要は無い。たとえば、複数の受光素子は、三角形をなすように配置されてもよいし、菱形をなすように配置されてもよいし、2×3のようにいずれかの方向の数が多くなるように配置されてもよいし、3×3(9個)以上のマトリクス状に配置されてもよい。
図3は、基板23の幅方向から見た場合の検出可能領域DRを示す図である。図4は、受光中心方向から見た場合の検出可能領域DRを示す図である。図3および図4に示すように、発光部21から発光された光は、光軸を中心に、放射状に広がる。本実施例では、発光部21を頂点とし、光軸を母線(中心線)とした略円錐状の発光領域が形成される。また、受光部22が受光可能な領域(受光可能領域)は、受光部22を頂点とし、受光中心方向を中心線とした略円錐状の領域である。受光部22は、発光領域と受光可能領域とが重なる領域に検出対象物が存在する場合に、検出対象物に反射した光を受光することができる。したがって、発光領域と受光可能領域とが重なる略円錐状の領域が、光センサ2において検出対象物の存在を検出可能な最大の領域(検出可能領域)DRとなる。
なお、発光部21の放射角度および受光部22が受光可能な角度を大きくすることによって、検出可能領域DRを略半球状または限りなくこれに近い形状の領域とすることもできる。また、光センサ2から発光領域の底面までの距離、すなわち検出可能距離は、発光部21から発光された光の光量(受光部22で反射光を検出可能な程度の光量)によって定まる。このため、発光部21から発光された光の光量を多くする(発光レベルを上げる)ことによって、検出可能領域DRを広く(大きく)することができ、発光部21から発光された光の光量を少なくする(発光レベルを下げる)ことによって、検出可能領域DRを狭く(小さく)することができる。
また、光センサ2で検出可能な検出対象物は、発光部21から発光された光を反射するものであれば良く、操作者の手指、腕等の体の一部だけでなく、操作者が持つペン、電子機器、棒等の物体や、操作者が身に着けている衣服または装飾品の一部等も含まれる。
図1に戻って、制御部3は、非接触入力装置1の各要素を制御する。具体的には、制御部3は、CPU(中央演算処理装置)を有しており、発光部21の点灯/消灯処理、受光部22から入力されるセンサ値の処理、および操作対象物への操作データの送信処理等を行う。
記憶部4は、メイン処理プログラム41、座標変換プログラム42、モード判定プログラム43、動作検出プログラム44、座標データ45、動作検出用データ46、操作データ47が記憶されている。メイン処理プログラム41は、非接触入力装置1の全体的な処理、発光部21の点灯/消灯処理、または操作データを操作対象物に送信する処理等を実行するためのプログラムである。
<座標変換処理>
座標変換プログラム42は、受光部22(各受光素子)から所定の時間間隔で連続して入力されるセンサ値を検出可能領域DRにおける座標データに変換するためのプログラムである。受光部22から入力されるセンサ値を座標データに変換する座標変換処理の方法は特に限定されないが、たとえば、4つの受光素子22A~22Dのそれぞれから入力されるセンサ値から座標データを算出(演算)することができる。
たとえば、発光部21と受光部22が並ぶ方向(受光素子が並ぶ第1の方向)をX方向とし、受光部22の受光中心方向をZ方向とし、X方向およびZ方向のいずれにも直交する方向(X方向およびZ方向によって規定されるXZ平面に直交する方向、または受光素子が並ぶ第2の方向)をY方向とした場合(図3および図4参照)、X座標、Y座標、Z座標のそれぞれは、次の式(数A)、式(数B)、式(数C)によって算出することができる。
〔数A〕
X=((S1+S4)-(S2+S3)/(S1+S2+S3+S4))
〔数B〕
Y=((S1+S2)-(S3+S4)/(S1+S2+S3+S4))
〔数C〕
Z=1-k(S1+S2+S3+S4/Smax)
ここで、S1は、第1の受光素子22Aから入力されるセンサ値であり、S2は、第2の受光素子22Bから入力されるセンサ値であり、S3は、第3の受光素子22Cから入力されるセンサ値であり、S4は、第4の受光素子22Dから入力されるセンサ値であり、Smaxは、検出対象物が最もセンサに近づいた場合のセンサ値を合計した値(検出対象物が検出可能領域DRのうち最も光センサ2に近い位置に存在する場合のセンサ値を合計した値)であり、kは、任意の補正係数である。この場合、X座標、Y座標、Z座標のそれぞれは、受光部22を原点(X=0、Y=0、Z=0)とした座標系のデータとなる。また、Z座標は、4つの受光素子22A~22Dのセンサ値の合計値であるため、光センサ2における総出力値(総光量)ということもできる。
以上のように、検出可能領域DRにおける検出対象物の座標(位置)を算出することができる。座標変換プログラム42に従って変換されたデータは、時系列に従って座標データ45として記憶部に記憶されている。
なお、本実施例では、座標変換処理を座標変換プログラム42に従って制御部3(CPU)が実行するようにしたが、座標変換処理はハードウェア回路により実行されてもよい。この場合、2×2に配置される4つの受光素子の並ぶ向き(第1の方向および第2の方向)をX方向またはY方向に対して45°傾いた状態とし、X方向に並ぶ2つの受光素子のセンサ値の差分をX座標とし、Y方向に並ぶ2つの受光素子のセンサ値の差分をY座標とし、4つの受光素子のセンサ値の合計をZ座標とするような座標変換用の回路を光センサ2と制御部3の間に設ければよい。
<モード判定処理>
モード判定プログラム43は、座標変換プログラム42に従って変換された座標データ45が示す検出対象物の位置(座標)の変化から、検出可能領域DRに検出対象物が進入したか、または検出可能領域DRから検出対象物が退出(退去)したかどうかを判定するためのプログラムである。また、モード判定プログラム43は、検出可能領域DRに検出対象物が存在している状態で、検出可能領域DR内に設定された操作領域R(ジェスチャ操作を受け付ける領域)に検出対象物が進入したか、または操作領域R内から検出対象物が退出したかどうかを判定するためのプログラムでもある。
検出可能領域DRに検出対象物が進入したか、または検出可能領域DRから検出対象物が退出したかどうかを判定する検出可能領域DRに対する進入/退出判定処理の方法は特に限定されない。たとえば、Z座標(光センサ2における総出力値)に検出可能領域DRに検出対象物が進入したか否かを判定するための閾値を設定しておき、Z座標(光センサ2における総出力値)が閾値未満の状態から閾値以上の状態に変化したとき、検出可能領域DRに検出対象物が進入したと判定し、Z座標が閾値以上の状態から閾値未満の状態に変化したとき、検出可能領域DRから検出対象物が退出したと判定することができる。また、Z座標が閾値以上の状態とは、検出可能領域DR内に検出対象物が存在している状態であるともいえる。
さらに、検出可能領域DRに対する進入/退出判定処理では、Z座標のみを用いて判定することができる。したがって、検出可能領域DRからの退出判定後、次の進入を判定するまでの間は、受光部22からのセンサ値に対してZ座標のみ変換し、制御部3の処理負荷を低減することもできる。
図5は、受光中心方向(Z方向)から見た場合の実施例1の操作領域Rを示す図である。図6は基板23の長手方向(X方向)から見た場合の実施例1の操作領域Rを示す図である。図7は斜め上方から見た場合の実施例1の操作領域Rを示す斜視図である。
図5および図6に示すように、検出可能領域DRには、操作領域RのY方向の境界を規定するための2つの仮想境界面が設定されている。各仮想境界面は、XZ平面に平行な面であるので、仮想境界面のY方向の位置は、Y座標の数値で規定されている。言い換えれば、検出可能領域DRのうち、2つの仮想境界面に挟まれた領域、つまり2つの仮想境界面の間の領域が、操作領域Rとなる。このため、仮想境界面のY方向の位置を規定する数値は、操作領域RのY方向の閾値ということもできる。上述したように、検出可能領域DRの座標系は受光部22を原点としているので、2つの仮想境界面のうちの一方の仮想境界面はプラスのY座標で規定され、他方の仮想境界面はマイナスのY座標で規定される。
したがって、図5~図7に示すように、操作領域Rは、XZ平面に沿って延び(X方向およびZ方向に延び)、Y方向に所定の厚みを有する板状の領域となる。すなわち、操作領域Rは、Y座標が(Y=0)のXZ平面を中心に、検出可能領域DRの内側においてY方向に厚みを持たせたような形状の領域となる。
そして、本実施例の非接触入力装置1では、Y座標がゼロ(Y=0)のXZ平面(操作平面)を基準とした操作領域Rにおけるジェスチャ操作を検出する。すなわち、非接触入力装置1では、操作平面が、操作領域Rの基準面となる。また、光センサ2(発光部21および受光部22)は、操作平面の延長面上に位置することになる。本実施例では、光センサ2は、操作平面を下方に延長した延長面上に位置する。すなわち、操作平面(操作領域R)は、光センサ2の上方に設定される。
また、本実施例では、XZ平面を操作平面として説明する。したがって、操作平面と第1の方向は平行であり、かつ、第1の方向は操作平面上の方向であり、受光素子は操作平面の端部または端部近傍から操作平面上へ向かって受光中心線方向が向いている。また、操作平面と第2の方向は直角であり、かつ、第2の方向は操作平面の法線方向である。ただし、受光素子は第1の方向と第2の方向のそれぞれにおいて直交しなくても良い。
なお、操作平面は、X方向およびZ方向に延びる平面であれば、XZ平面に対し多少傾いた面であってもよく、Y座標が操作領域RのY方向の閾値の範囲内であれば、Y座標がゼロ(Y=0)のXZ平面からオフセットした面であってもよい。
なお、操作領域Rおよびこれに含まれる操作平面は、受光部22の受光中心方向と、受光部22の受光中心方向に直交する方向に延びる領域であるといえる。また、本実施例では、操作領域Rおよび操作平面が延びる2方向のうち、受光部22の受光中心方向に直交する方向は、発光部21と受光部22とが並ぶ方向と同じ方向である。すなわち、発光部21および受光部22の両方が操作平面のX軸上に位置する。
以上のように設定された操作領域Rに対して、検出対象物が進入したか、または検出対象物が退出したかどうかを判定する、操作領域Rに対する進入/退出判定処理の方法は特に限定されない。操作領域Rに対する進入/退出判定処理の方法の一例としては、たとえば、座標データ45のY座標が、仮想境界面の外側の座標である状態(検出対象物が操作領域Rの外側に位置する状態)から、仮想境界面の内側の座標である状態(検出対象物が操作領域Rの内側に位置する状態)に変化した場合に、検出対象物が操作領域Rに進入したと判定することができる。また、座標データ45のY座標が、仮想境界面の内側の座標である状態から、仮想境界面の外側の座標である状態に変化した場合に、検出対象物が操作領域Rから退出したと判定することができる。なお、Y座標が仮想境界面の内側の座標である状態とは、操作領域R内に検出対象物が存在している状態であるともいえる。
また、操作領域Rに対する進入/退出判定処理では、Y座標およびこれを算出するためのZ座標のみを用いて判定することができる。したがって、操作領域Rからの退出判定後、次の進入を判定するまでの間は、受光部22からのセンサ値に対してY座標およびZ座標のみ変換し(数Bのみ演算し)、判定処理を行うようにし、制御部3の処理負荷を低減することもできる。
図8は基板23の長手方向から見た場合の入力動作の一例を示す図である。図9は受光中心方向から見た場合の入力動作の一例を示す図である。図10は斜め上方から見た場合の入力動作の一例を示す斜視図である。
図8~図10に示すように、検出対象物が操作領域R内に存在する場合には、操作平面(操作領域R)における動作検出が可能な状態となり、検出対象物が操作領域R外に存在する(検出対象物が操作領域R内に存在しない)場合には、動作検出が不可能な状態となる。本実施例では、操作領域Rに対する進入が判定されたときに、ジェスチャ操作を検出するモード(動作検出モード)が開始され、操作領域Rからの退出が判定されたときに、動作検出モードが終了する。このため、モード判定プログラム43は、動作検出モードを開始/終了するためのプログラムでもある。
<動作検出処理>
動作検出プログラム44は、動作検出モードの実行中に、座標データ45が示す検出対象物の位置(座標)の変化、すなわち、受光部22(各受光素子)から入力されるセンサ値の変化から、操作領域R(操作平面)における検出対象物の動作(ジェスチャ操作)を演算により検出するためのプログラムである。
座標データ45の変化から操作平面における動作を検出する動作検出処理の方法は特に限定されないが、たとえば、座標データ45のX座標およびZ座標の変化から、操作平面における検出対象物の移動方向を示すベクトル(検出対象のベクトル)を所定の検出サイクル(5~30mm/sec)で区切って連続して検出し、検出対象のベクトルに基づいて、ジェスチャ操作を検出する方法がある。すなわち、所定時間間隔で連続して取得した座標データ45の変化から、ジェスチャ操作を検出する。
この場合、予め登録されたジェスチャ操作(登録ジェスチャ)に対応する基準となるベクトル(基準ベクトル)のデータを予め作成しておき、検出対象のベクトルが検出される度に、検出対象のベクトルのデータと基準ベクトルのデータとを照らし合わせて、検出対象のベクトルが基準ベクトルかどうか、すなわち、操作平面における検出対象物の動作が登録ジェスチャかどうかを判定する。
図11は、実施例1の動作判定用(ジェスチャ判定用)のヒストグラムの一例を示す説明図である。図11に示すように、実施例1では、登録ジェスチャとして、操作平面において上下左右の各々に向かう直線的なジェスチャ(上下左右のいずれかの方向に向かって直線を描くようなジェスチャ)V1~V4と、操作平面上の右回転のジェスチャ(時計回りに円を描くようなジェスチャ)V5と、操作平面上の左回転のジェスチャ(反時計回りに円を描くようなジェスチャ)V6とが登録されており、また、登録ジェスチャV1~V6のそれぞれに対応する基準ベクトルが登録されている。なお、基準ベクトルにおける左右の向きについては、Y座標のマイナス側から見た場合の左右に合わせて設定されており、Y座標のプラス側から見た場合には、左右の向きが反転することになる。
具体的には、直線的なジェスチャV1~V4については、検出サイクルの前後(開始時点および終了時点)における2つの座標データ45の位置の差分、すなわち、前回(サイクル開始時)の位置P1(x1,z1)と、今回(サイクル終了時)の位置P2(x2,z2)との差分から生成されたベクトルを検出対象のベクトルとして判定する。
また、回転動作V5,V6については、2回分の検出サイクルにおける3つの座標データ45の位置の差分、すなわち、前々回(1回目のサイクル開始時)の位置P0(x0,z0)と、前回(1回目のサイクル終了時および2回目のサイクル開始時)の位置P1(x1,z1)と、今回(2回目のサイクル終了時)の位置P2(x2,z2)とから生成される2つのベクトルの外積の正負で判別する。そして、動作検出モードが開始されると、検出サイクルが終了する度に、検出対象のベクトルが登録ジェスチャV1~V6のそれぞれに対応する基準ベクトルかどうかが判定される。
また、実施例1のジェスチャ判定用のヒストグラムでは、登録ジェスチャの検出数がカウントされる(図11における「検出数」の欄)。検出対象のベクトルが登録ジェスチャであると判定された場合、すなわち、登録ジェスチャが検出された場合、検出された登録ジェスチャの検出数が1カウントアップ(1加算)される。図11は、左から右に向かう直線的なジェスチャV1と、下から上に向かう直線的なジェスチャV4とが、それぞれ1回ずつ検出された状態のヒストグラムを示している。
検出対象のベクトルのデータ、基準ベクトルのデータ(登録ジェスチャのデータ)、およびジェスチャ判定用のヒストグラムのデータは、動作検出用データ46として記憶部に記憶されている。
そして、動作検出モードが終了した場合、すなわち、操作領域Rからの退出が判定された場合、動作検出モードの実行中に検出されたジェスチャ操作のデータ(操作データ)47が検出数に応じて生成され、操作データ47は、適宜のタイミングで操作対象物に送信される。なお、複数のジェスチャ操作が検出されていた場合、複数のジェスチャ操作のデータを含む1つの操作データ47が生成されるようにしてもよいし、1つのジェスチャ操作毎に対して1つの操作データ47が生成されるようにしてもよい。また、複数のジェスチャ操作のデータを含む1つの操作データ47が生成される場合には、操作データ47は、複数のジェスチャ操作の検出された順番のデータを含むようにしてもよい。
<フローチャート>
図12は動作判定処理のフローチャート図である。以下、図12を参照して動作判定処理を説明する。動作判定処理は、検出可能領域DRに検出対象物が進入したとき、すなわち、Z座標(光センサ2における総出力値)が閾値未満の状態から閾値以上の状態に変化したときに開始される。
動作判定処理が開始されると、操作領域Rに対する進入判定を行う(ステップS1)。ステップS1で検出対象物が操作領域Rに進入したと判定されなければ(ステップS1:NO)、同じステップS1に戻る。すなわち、検出対象物が操作領域Rに進入したと判定されるまで待機する。
一方、ステップS1で検出対象物が操作領域Rに進入したと判定されれば(ステップS1:YES)、動作検出モードを開始し、検出対象のベクトルを検出し(ステップS2)、ステップS2で検出された検出対象のベクトルが基準ベクトルかどうかを判定する(ステップS3)。
ステップS3で検出対象のベクトルが基準ベクトルでないと判定されれば(ステップS3:NO)、後述するステップS5に進む。一方、ステップS3で検出対象のベクトルが基準ベクトルであると判定されれば(ステップS3:YES)、基準ベクトルに対応する登録ジェスチャ(動作)の検出数を1カウントアップして(ステップS4)、操作領域Rからの退出判定を行う(ステップS5)。
ステップS5で検出対象物が操作領域Rから退出したと判定されなければ(ステップS5:NO)、すなわち、検出対象物が操作領域Rに留まっている場合には、ステップS2に戻り、ステップS2~ステップS4の処理を検出サイクル毎に繰り返し行う。
一方、ステップS5で検出対象物が操作領域Rから退出したと判定されると(ステップS5:YES)、動作検出モードを終了し、登録ジェスチャ(動作)が検出されていたかどうかを判定する(ステップS6)。
ステップS6で登録ジェスチャが検出されていないと判定されれば(ステップS6:NO)、後述するステップS8に進む。一方、ステップS6で登録ジェスチャが検出されていたと判定されれば(ステップS6:YES)、検出された登録ジェスチャに対応する操作データを生成し(ステップS7)、ジェスチャ判定用のヒストグラムのデータを初期化し(ステップS8)、動作判定処理を終了するかどうか、すなわち、検出可能領域DRから検出対象物が退出したかどうかを判定する(ステップS9)。
ステップS9で検出可能領域DRから検出対象物が退出したと判定されなければ(ステップS9:NO)、すなわち、検出対象物が検出可能領域DR内に留まっているには、ステップS1に戻る。一方、ステップS9で検出可能領域DRから検出対象物が退出したと判定されれば(ステップS9:YES)、動作判定処理を終了する。
以上のように、本発明では、光センサ2が操作平面の延長面上に位置し、操作平面における検出対象物の動作を検出するので、光センサ2と検出対象物との距離(Z方向の距離)に関係なく、検出対象物の動作(ジェスチャ操作)を精度よく検出することができる。また、操作平面における検出対象物の動作を検出するので、検出対象物の大きさに関係なく、検出対象物の動作を精度よく検出することができる。
さらに、受光部22が第1の方向および前記第1の方向に交差する第2の方向のそれぞれに2つ以上並ぶように配置される複数の受光素子22A~22Dを有し、複数の受光素子22A~22Dから出力された複数のセンサ値に基づいて操作平面における検出対象物の3次元位置(X座標、Y座標、Z座標)を検出するので、検出対象物の動作を精度よく検出することができる。
さらにまた、受光部22から入力されるセンサ値を整数演算処理により座標データに変換し、変換した座標データの変化(差分)から操作平面における検出対象物の動作を検出するので、複雑な演算をする必要が無く、制御部3の処理負荷を低減することができ、製造コストの低減、高速処理化、または応答速度の向上を図ることができる。
なお、上述の構成に加えて、操作平面または操作領域Rを視覚的に認識できるようにする構成を付加してもよい。たとえば、映像を空中に表示させる空中結像部を設け、操作平面または操作領域Rに対応する映像を表示させるようにしてもよい。また、操作平面または操作領域Rの端部の位置に指標となる指標物を配置してもよい。
さらに、ジェスチャの判定は、座標に限らず、各受光素子で取得する明度等のセンサ値の所定時間間隔で連続するデータ列の変化から判定する構成としてもよい。この場合は、人工知能(AI)を用いて、様々なジェスチャの学習データを人工知能(AI)に学習させておき、この人工知能(AI)によって取得したセンサ値のデータ列がどのジェスチャに該当するか判定する構成としてもよい。
さらにまた、上述の実施例では、発光部21および受光部22の両方が操作平面のX軸上に位置するようにしたが、発光部21および受光部22は、Y方向に並ぶように配置されてもよいし、X方向およびY方向以外の任意の方向に並ぶように配置されてもよい。ただし、これらの場合には、受光部22は、X軸上に配置されていることが好ましい。
図15は実施例3の非接触入力装置1の構成を示すブロック図である。実施例3の非接触入力装置1では、単数または複数の動作からサインを検出することができる点が実施例1と異なる。なお、サインとは、複数のジェスチャ操作(動作)で描画(構成)される数字、記号、図形、パターン(模様)等のことである。図15に示すように、実施例3では、サインを検出するための構成として、記憶部4には、実施例1の内容に加え、方向判定プログラム49、サイン検出プログラム50,サイン参照テーブル51が記憶されている。
<方向判定処理>
方向判定プログラム49は、座標データ45が示す検出対象物の位置(座標)の変化から、操作領域Rに検出対象物が進入した方向(Y方向の向き)、すなわち、操作領域Rに検出対象物がY座標のプラス側から進入したか、Y座標のマイナス側から進入したかを判定するためのプログラムである。操作領域Rへの検出対象物の進入方向を判定する方向判定処理の方法は特に限定されないが、たとえば、実施例1で説明した操作領域Rに対する進入/退出判定処理において検出対象物が操作領域Rに進入したと判定されたときのY座標の正負で判定することができる。この方向判定処理で判定された操作領域Rへの検出対象物の進入方向を、操作者の向きとし、動作検出処理およびサイン検出処理におけるベクトルの左右の向きが、操作者から見た場合の左右に合わせて設定される。
<サイン検出処理>
サイン検出プログラム50は、動作検出モードの実行中に、座標データ45が示す検出対象物の位置の変化から検出される単数または複数の操作平面上の動作から演算によりサインを検出するためのプログラムである。操作平面上の動作からサインを検出する方法は特に限定されないが、たとえば、検出サイクル毎に検出される操作平面上の単数または複数の動作の組み合わせが、予め登録されたサイン(登録サイン)に対応する場合に、入力されたサインとして検出する方法がある。
たとえば、登録サインを構成する動作(登録ジェスチャ)の組み合わせのデータを予め参照しておき、動作検出モードの実行中に検出された動作毎のヒストグラム(サイン判定用のヒストグラム)を用いて入力されたサインとして検出するかどうかを判定する。
図16は実施例3のサイン判定用のヒストグラムの一例を示す説明図である。図16に示すように、実施例3のサイン判定用のヒストグラムでは、登録ジェスチャとして、操作平面において上下左右の各々に向かう直線的なジェスチャV1~V4と、V1~V4の向きを45°傾けた直線的なジェスチャV5~V8と、操作平面上の右回転のジェスチャV9と、操作平面上の左回転のジェスチャV10とが設定されており、また、登録ジェスチャV1~V10のそれぞれに対応する基準ベクトルが設定されている。基準ベクトルにおける左右の向きは、方向判定処理で判定された進入方向から見た場合の左右に合わせて設定されている。
実施例3のサイン判定用のヒストグラムでは、登録ジェスチャの各々の検出数がカウントされる(図16における「検出数」の欄)。実施例1で説明したように、登録ジェスチャが検出された場合、その登録ジェスチャの検出数が1カウントアップされる。
図17は実施例3のサイン参照テーブルの一例を示す説明図である。図18は実施例3のサイン参照テーブルの他の例を示す説明図である。図17および図18に示すサイン参照テーブルは、登録サインを構成する登録ジェスチャの組み合わせを示すテーブルである。
図17に示すサイン参照テーブルは、サインの描画に必要な各登録ジェスチャの検出数で表現したものである。図17に示すように、たとえば、数字の「0」は、4サイクル分の左回転のジェスチャV10で構成される。また、数字の「2」は、2サイクル分の左から右への直線的なジェスチャV1と、1サイクル分の右上から左下への直線的なジェスチャV7と、3サイクル分の右回転のジェスチャV9とで構成される。さらに、図形「□」は、2サイクル分のジェスチャV1~V4で構成される。
図18に示すサイン参照テーブルは、サインを描画する場合の線長における各登録ジェスチャの割合で表現したものである。図18に示すように、たとえば、数字の「0」は、左回転のジェスチャのみ(100%)で構成される。また、数字の「2」は、33%のジェスチャV1と、17%のジェスチャV7と、50%のジェスチャV9とで構成される。さらに、図形「□」は、それぞれ25%のジェスチャV1~V4で構成される。
そして、動作検出モードが終了した場合、サイン判定用のヒストグラムと、サイン参照テーブルとを比較して、差異が所定の閾値以下であるか、あるいは一致度が所定の閾値以上のサインが存在する場合に、一連の動作を入力されたサインとして検出する。サイン判定用のヒストグラムと、サイン参照テーブルとを比較する際には、サインの描画に必要な各登録ジェスチャの検出数で比較してもよいし、サインを描画する場合の線長における各登録ジェスチャの割合で比較してもよい。また、一致度が所定の閾値以上のサインが複数存在する場合には、一致度が最も高いサインを入力されたサインとする。登録サインが検出されると、その登録サインに対応する操作データ47が生成される。
<フローチャート>
図19はサイン判定処理のフローチャート図である。以下、図19を参照してサイン判定処理を説明する。サイン判定処理は、検出可能領域DRに検出対象物が進入したときに開始される。なお、ステップS11~S15までの処理は、ジェスチャ判定用のヒストグラムに代えてサイン判定用のヒストグラムを使用すること以外は、実施例1のステップS1~S5と同じ処理であるため、詳細な説明を省略する。
サイン判定処理が開始され、ステップS15で検出対象物が操作領域Rから退出したと判定されると(ステップS15:YES)、動作検出モードを終了し、サイン参照テーブルを読み出し(ステップS16)、サイン判定用のヒストグラムと、サイン参照テーブルとを比較して、登録サインが検出されていたかどうかを判定する(ステップS17)。
ステップS17で登録サインが検出されていないと判定されれば(ステップS17:NO)、後述するステップS19に進む。一方、ステップS17で登録サインが検出されていたと判定されれば(ステップS17:YES)、検出された登録サインに対応する操作データを生成し(ステップS18)、サイン判定用のヒストグラムのデータを初期化し(ステップS19)、動作判定処理を終了するかどうか、すなわち、検出可能領域DRから検出対象物が退出したかどうかを判定する(ステップS20)。
ステップS20で検出可能領域DRから検出対象物が退出したと判定されなければ(ステップS20:NO)、すなわち、検出対象物が検出可能領域DR内に留まっていると判定された場合には、ステップS11に戻る。一方、ステップS20で検出可能領域DRから検出対象物が退出したと判定されれば(ステップS20:YES)、サイン判定処理を終了する。
その他の構成および動作については実施例1と同一であるため、その詳細な説明を省略する。また、同一要素に同一符号を付している。この実施例3においても、実施例1と同一の作用効果を奏することができる。
また、実施例3では、個別の登録ジェスチャよりも複雑なサインを検出することができるので、操作データの自由度が高まり、操作対象物を操作する際の利便性が向上する。
さらに、実施例3では、操作領域に検出対象物が進入する進入方向を検出し、進入方向に応じた向きでサインを検出するので、操作者から見た左右方向と、ベクトル検出の左右方向とを一致させ、サインを適切かつ正確に検出することができる。