(57)【要約】    【構成】  文字入力装置１２はＣＰＵ３０を含み、ＣＰＵ３０はスイッチ１６がオンされているとき、当該文字入力装置１２を用いた文字の筆記中であると判断し、スイッチ１６がオフされているとき、単なる移動中であると判断する。また、ＣＰＵ３０は、筆記中と移動中とのそれぞれの方向を識別可能に符号化し、符号化された筆記コードデータ５２４を、予め複数の文字について登録しておいた辞書コードデータ５２０の各々と比較する。比較した結果、最も類似する辞書コードデータ５２０が示す文字を、ユーザが書いた文字として特定（認識）する。    【効果】  筆記中と移動中とを識別可能なコードデータを比較するので、正確に文字を認識することができる。【選択図】  図２
2007200186.tif 000002
【特許請求の範囲】
【請求項１】
手指の移動方向を検出する検出手段、
スイッチ手段のオン／オフに応じて筆記中か否かを判断する判断手段、
前記判断手段によって筆記中であることが判断されたときに前記検出手段によって検出された第１移動方向と、前記判断手段によって筆記中でないことが判断されたときに前記検出手段によって検出された第２移動方向とを、時系列に従って取得する取得手段、および
前記取得手段の取得結果に基づいて手書き文字を特定する特定手段を備える、文字認識装置。
【請求項２】
複数の文字の各々について、筆記中の手指の第１移動方向と筆記中でないときの手指の第２移動方向とが時系列に従って記述された辞書データを記憶する辞書データ記憶手段をさらに備え、
前記特定手段は、前記取得手段の取得結果と、前記辞書データ記憶手段によって記憶された辞書データとを比較する比較手段を含む、請求項１記載の文字認識装置。
【請求項３】
前記比較手段は、前記取得手段の取得結果と、前記辞書データ記憶手段によって記憶された辞書データとを、ひとつの前記第１移動方向またはひとつの前記第２移動方向単位で時系列に従って比較する、請求項２記載の文字認識装置。
【請求項４】
前記比較手段は、前記第２移動方向に基づいて前記取得結果と前記辞書データとの同期を取り、前記第１移動方向同士または前記第２移動方向同士を比較するように、前記取得結果または前記辞書データに含まれる前記第２移動方向をその直前の前記第１移動方向に変更する比較対象変更手段を含む、請求項３記載の文字認識装置。
【請求項５】
前記第１移動方向は、前記手指の移動が所定距離以上である移動有り方向と、前記手指の移動が当該所定距離未満である移動無し方向とを含み、
前記比較手段は、前記取得結果に含まれる前記第１移動方向が移動無し方向であるとき、当該第１移動方向の前後の前記第１移動方向に基づいて、当該移動無し方向が折れ点であるかどうかを判断する折れ点判断手段、および前記折れ点判断手段によって前記移動無し方向が折れ点であると判断されたとき、当該移動無し方向を折れ点を示す第２移動方向として設定し、前記折れ点判断手段によって前記移動無し方向が折れ点でないと判断されたとき、前記移動無し方向を無視する取得結果補正手段を含む、請求項３または４記載の文字認識装置。
【請求項６】
コンピュータを、
手指の移動方向を検出する検出手段、
スイッチ手段のオン／オフに応じて筆記中か否かを判断する判断手段、
前記判断手段によって筆記中であることが判断されたときに前記検出手段によって検出された第１移動方向と、前記判断手段によって筆記中でないことが判断されたときに前記検出手段によって検出された第２移動方向とを、時系列に従って取得する取得手段、および
前記取得手段の取得結果に基づいて手書き文字を特定する特定手段として機能させる、文字認識プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は文字認識装置および文字認識プログラムに関し、特にたとえば、手書き文字を認識し、認識した文字をコンピュータなどに入力する入力装置に適用される、文字認識装置および文字認識プログラムに関する。
【背景技術】
【０００２】
従来のこの種の文字認識装置の一例が特許文献１に開示される。この特許文献１によれば、個人認証装置は、手書きデータ入力装置と署名照合装置とを備える。利用者は、手書きデータ入力装置に備えられる撮像手段を手で保持し、空中で動かすことによって、空中に所定の手書きデータを書く。手書きデータ入力装置に備えられる軌跡算出手段は、撮像手段の空中における位置変化すなわち移動軌跡を手書きデータ（署名データ）として求める。署名照合装置は、その手書きデータと、予め記憶手段に記憶してある参照データ（あらかじめ本人が登録しておいた本人の署名データ）とを比較照合して、同一人による署名データであるかどうかを判断する。
【０００３】
また、この種の文字認識装置の他の例が特許文献２に開示される。この特許文献２によれば、手書き情報入力装置が動作状態にされ、空中や紙面上の仮想筆記面の上でその先端により文字、図形を描く動作が行われる。この結果、手書き情報入力装置の先端部に配置されている加速度センサと角速度センサとからは、手書き情報入力装置の先端の描画点が仮想筆記面上で描く軌跡、筆運びに伴う加速度および角速度についての検出値が出力される。この検出値に基づいて、描かれた文字または図形の筆跡の解析、再現が順次行われ、手書き情報入力装置の先端部の動きが停止すると、その位置を文字または図形の区切りと判定するようにしてある。
【特許文献１】特開２００２−２５９０４５
【特許文献２】特開２００３−１１４７５４
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、特許文献１の個人認証装置では、スイッチのＯＮ／ＯＦＦ状態に基づき、署名動作の開始時点・終了時点を知るようにしてあるため、いわゆる一筆書きによる手書きデータが正しいか否かを判断（認識）できるだけである。つまり、２以上の画数の文字や記号などを認識することができない。
【０００５】
この点、特許文献２に開示された技術では、２以上の画数の文字であっても認識可能である。しかし、手書き情報入力装置の先端部の動きが停止すると、その位置を文字または図形の区切りと判定するようにしてあるので、たとえば、「へ」や「く」のように折れ曲がっている点や「え」や「ん」のように左下部で折り返している点であっても、文字または図形の区切りであると判断してしまう。また、たとえば、横棒（一）のように、一筆で描かれるべき部分のように、折れ曲がりや折り返しが存在しない場合であっても、筆記速度が遅い場合には、文字または図形の区切りであると、誤って判断されてしまう恐れもある。つまり、単に先端部の動きが停止したことにより、その位置を文字または図形の区切りと判定すると、正確に文字や図形を特定（認識）できない場合がある。
【０００６】
それゆえに、この発明の主たる目的は、新規な、文字認識装置および文字認識プログラムを提供することである。
【０００７】
この発明の他の目的は、複数の画数を有する文字であっても、正確に認識することができる、文字認識装置および文字認識プログラムを提供することである。
【課題を解決するための手段】
【０００８】
請求項１の発明は、手指の移動方向を検出する検出手段、スイッチ手段のオン／オフに応じて筆記中か否かを判断する判断手段、判断手段によって筆記中であることが判断されたときに検出手段によって検出された第１移動方向と、判断手段によって筆記中でないことが判断されたときに検出手段によって検出された第２移動方向とを、時系列に従って取得する取得手段、および取得手段の取得結果に基づいて手書き文字を特定する特定手段を備える、文字認識装置である。
【０００９】
請求項１の発明では、文字認識装置（１２：実施例で相当する参照符号。以下、同じ。）は、検出手段（３０，Ｓ２９，Ｓ３５）、判断手段（３０，Ｓ２３，Ｓ２７）、取得手段（３０，Ｓ３３，Ｓ４１）および特定手段（３０，Ｓ７）を備える。検出手段は、手指の移動方向を検出する。判断手段は、スイッチ手段（１６）のオン／オフに応じて筆記中か否かを判断する。たとえば、判断手段は、スイッチ手段がオンであれば、筆記中であると判断し、スイッチ手段がオフであれば、筆記中でなく、１つ手前の一筆と次の一筆との間の移動中であると判断する。取得手段は、筆記中に検出手段によって検出された第１移動方向と、筆記中でないときに検出手段によって検出された第２移動方向とを、時系列に従って取得する。特定手段は、取得手段の取得結果に基づいて手書き文字を特定する。
【００１０】
請求項１の発明によれば、筆記中と筆記中でないときの移動方向に基づいて手書き文字を認識するので、文字の画数に拘わらず文字を認識することができる。また、スイッチ手段のオン／オフで筆記中か否かを判断するので、文字の認識を正確に行うことができる。
【００１１】
請求項２の発明は請求項１に従属し、複数の文字の各々について、筆記中の手指の第１移動方向と筆記中でないときの手指の第２移動方向とが時系列に従って記述された辞書データを記憶する辞書データ記憶手段をさらに備え、特定手段は、取得手段の取得結果と、辞書データ記憶手段によって記憶された辞書データとを比較する比較手段を含む。
【００１２】
請求項２の発明では、文字認識装置は、辞書データ記憶手段（３６）をさらに備える。また、特定手段は、比較手段（３０，Ｓ７７）を含む。この辞書データ記憶手段は、複数の文字の各々について、筆記中の手指の第１移動方向と、筆記中でないときの手指の第２移動方向とが時系列に従って記述された辞書データを記憶する。比較手段は、取得手段による取得結果、すなわちユーザが書いた文字に対応する第１移動方向と第２移動方向との時系列変化と、辞書データとを比較する。したがって、たとえば、特定手段は、比較手段の比較結果が最も類似する辞書データに対応する文字を特定する。
【００１３】
請求項２の発明によれば、第１移動方向と第２移動方向とが時系列に従って記述された辞書データを複数の文字の各々について設けておき、ユーザが書いた文字についての第１移動方向と第２移動方向との時系列変化と比較するので、簡単に文字を特定することができる。
【００１４】
請求項３の発明は請求項２に従属し、比較手段は、取得手段の取得結果と、辞書データ記憶手段によって記憶された辞書データとを、ひとつの第１移動方向またはひとつの第２移動方向単位で時系列に従って比較する。
【００１５】
請求項３の発明では、比較手段は、取得手段の取得結果すなわちユーザが手書きした文字についての第１移動方向と第２移動方向との時系列変化と、辞書データとを、ひとつの第１移動方向またはひとつの第２移動方向単位で時系列に従って比較する。つまり、一筆（１ストローク）単位で比較する。
【００１６】
請求項３の発明によれば、一筆単位で比較するので、文字全体をバランスよく、正確に書く必要はなく、一筆単位で正確に書かれていれば、他の一筆との位置関係がずれていても、ユーザが意図して書いた文字を認識することができる。
【００１７】
請求項４の発明は請求項３に従属し、比較手段は、第２移動方向に基づいて取得結果と辞書データとの同期を取り、第１移動方向同士または第２移動方向同士を比較するように、取得結果または辞書データに含まれる第２移動方向をその直前の第１移動方向に変更する比較対象変更手段を含む。
【００１８】
請求項４の発明では、比較対象変更手段（３０，Ｓ７５，Ｓ９１，Ｓ９５，Ｓ９９，Ｓ１０３）は、取得結果または辞書データに含まれる第２移動方向に基づいて、取得結果と辞書データとの同期を取る。具体的には、第１移動方向同士または第２移動方向同士を比較するように、取得結果または辞書データに含まれる第２移動方向をその直前の第１移動方向に変更する。
【００１９】
請求項４の発明によれば、第１移動方向同士および第２移動方向同士を比較するように、第２移動方向をその直前の第１移動方向に変更するので、一筆単位で比較することができる。
【００２０】
請求項５の発明は請求項３または請求項４に従属し、第１移動方向は、手指の移動が所定距離以上である移動有り方向と、手指の移動が当該所定距離未満である移動無し方向とを含み、記比較手段は、取得結果に含まれる第１移動方向が移動無し方向であるとき、当該第１移動方向の前後の第１移動方向に基づいて、当該移動無し方向が折れ点であるかどうかを判断する折れ点判断手段、および折れ点判断手段によって移動無し方向が折れ点であると判断されたとき、当該移動無し方向を折れ点を示す第２移動方向として設定し、折れ点判断手段によって移動無し方向が折れ点でないと判断されたとき、移動無し方向を無視する取得結果補正手段を含む。
【００２１】
請求項５の発明では、第１移動方向は、手指の移動が所定距離以上である移動有り方向（ａ，ｂ，ｃ，ｄ，ｅ，ｆ，ｇ，ｈ）および手指の移動が所定距離未満である移動無し方向（ｏ）とを含む。比較手段は、折れ点判断手段（３０，Ｓ６１）および取得結果補正手段（３０，Ｓ６３，Ｓ６５）を含む。折れ点判断手段は、取得結果に含まれる第１移動方向が移動無し方向であるとき、当該第１移動方向の前後の第１移動方向に基づいて、当該移動無し方向が折れ点であるかどうかを判断する。取得結果補正手段は、折れ点判断手段によって移動無し方向が折れ点であると判断されたとき、当該移動無し方向を折れ点を示す第２移動方向として設定し、折れ点判断手段によって移動無し方向が折れ点でないと判断されたとき、移動無し方向を無視する。たとえば、「く」や「へ」のように、一筆の中に折れ曲がり点を含む文字や「え」や「ん」のように、一筆の中に折り返し点を含む文字の場合には、折れ曲がり点および折り返し点（これらをまとめて、「折れ点」という。）がある場合には、移動無し方向を、折れ点を示す第２方向に補正する。つまり、折れ点の前後を別の一筆と仮定して、文字認識するのである。ただし、横棒のように、方向が変化しない場合には、単に筆記速度が遅いと判断して、移動無し方向を無視するようにしてある。
【００２２】
請求項５の発明によれば、折れ点であるか否かを判断して、取得結果を補正するので、文字認識の認識精度を高めることができる。
【００２３】
たとえば、折れ点判断手段は、移動無し方向を示す第１移動方向の前後の第１移動方向の角度が所定角度以上であるとき（Ｓ６１で“ＮＯ”）、当該移動無し方向を折れ点であると判断し、逆に、角度が所定角度未満であるとき（Ｓ６１で“ＹＥＳ”）、当該移動無し方向を折れ点でないと判断する。このため、正確に折れ点か否かを判断することができる。
【００２４】
また、取得手段は、第１移動方向が変化する毎に、当該第１移動方向を取得する。つまり、連続して同じ第１移動方向を取得しない。さらに、第２移動方向は、直前の一筆を書き終えた点を始点とし、次の一筆を書き始める点を終点とするベクトルの方向である。つまり、筆記中でない場合には、手指の移動方向の変化は詳細に記録しないようにしてある。したがって、いたずらにメモリ容量を圧迫したり、文字認識の処理をいたずらに複雑化したりすることがない。
【００２５】
請求項６の発明は、コンピュータを、手指の移動方向を検出する検出手段、スイッチ手段のオン／オフに応じて筆記中か否かを判断する判断手段、判断手段によって筆記中であることが判断されたときに検出手段によって検出された第１移動方向と、判断手段によって筆記中でないことが判断されたときに検出手段によって検出された第２移動方向とを、時系列に従って取得する取得手段、および取得手段の取得結果に基づいて手書き文字を特定する特定手段として機能させる、文字認識プログラムである。
【００２６】
請求項６の発明においても、請求項１の発明と同様に、正確に文字を認識することができる。
【発明の効果】
【００２７】
この発明によれば、筆記中の手指の移動方向および筆記中でないときの手指の移動方向に基づいて文字を認識するので、画数に拘わらず、正確に文字を認識することができる。
【００２８】
この発明の上述の目的，その他の目的，特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【発明を実施するための最良の形態】
【００２９】
図１を参照して、この実施例の入力システム１０は文字入力装置１２を含み、文字入力装置１２は文字認識プログラムを記憶し、文字認識装置としても機能する。この文字入力装置１２は、ペン型の筐体（ケース）１４を備えるとともに、このケース１４の一部から操作部が露出するように配置されたスイッチ１６を備える。入力システム１０はまた、コンピュータ２０を備え、文字入力装置１２とコンピュータ２０とがケーブル（ＵＳＢケーブルやＩＥＥＥ１３９４ケーブルなど）１８を用いて接続される。
【００３０】
なお、この実施例では、ケーブル１８を用いて、文字入力装置１２とコンピュータ２０とを接続するようにしてあるが、これに限定される必要はなく、無線通信可能に接続することもできる。かかる場合には、たとえば、電波を利用するＢｌｕｅｔｏｏｔｈや赤外線を利用するＩｒＤＡによる近距離無線によって、通信可能に接続することができる。ただし、文字入力装置１２とコンピュータ２０とは、有線・無線の別を問わず、ＬＡＮによって通信可能に接続することもできる。
【００３１】
また、コンピュータ２０としては、汎用のコンピュータ（デスクトップ、ラップトップ、ＰＤＡなど）、携帯電話機或いは電子辞書などが該当する。ただし、カメラ付の携帯電話機では、文字入力装置１２とコンピュータ２０とが一体的に形成された入力システム１０として構成することができる。
【００３２】
したがって、入力システム１０を構成する文字入力装置１２とコンピュータ２０とのハードウェアおよびソフトウェアの切り分け方は一体型を含めて色々と考えられるが、以下では、一例として、文字入力装置１２は手書き文字を１文字単位で判定して、その候補或いは結果をコンピュータ２０に送信するだけの機能を有し、コンピュータ２０は、かな文字変換機能や予測機能等を有し、その操作を含めて全体を制御する構成として説明することにする。
【００３３】
図２は文字入力装置１２の電気的な構成を示すブロック図である。この図２を参照して、文字入力装置１２はＣＰＵ３０を含み、ＣＰＵ３０は、内部バス３２を介して、ＲＯＭ３４、ＲＡＭ３６および入出力（Ｉ／Ｏ）インターフェイス（以下、単に「インターフェイス」という。）３８に接続される。また、文字入力装置１２は、ＣＣＤカメラ４０および上述したスイッチ１６を含み、このＣＣＤカメラ４０およびスイッチ１６はインターフェイス３８および内部バス３２を介してＣＰＵ３０に接続される。このような回路コンポーネントがケース１４に収納される。ただし、詳細な図示は省略するが、ＣＣＤカメラ４０は、そのレンズ部分がケース１４の先端部１４ａ（文字入力装置１２の先端部）に露出するようにケース１４内に配置される。また、図２では、スイッチ１６がケース１４に収納されるように記載してあるが、上述したように、スイッチ１６は、その操作部がケース１４から露出するように配置される。さらに、図２では省略するが、上述したケーブル１８の一方端がインターフェイス３８に接続され、その他方端がコンピュータ２０に接続される。
【００３４】
たとえば、ユーザがペンを持つように、文字入力装置１２を手指で把持し、文字（この実施例では、ひらがな）を書く。すると、文字入力装置１２は、ユーザが書いた文字を認識し、認識した文字をコンピュータ２０に入力する。以下、文字の認識方法について詳細に説明する。
【００３５】
文字入力装置１２では、ＣＣＤカメラ４０からの画像データがインターフェイス３８およびバス３２を介してＣＰＵ３０に与えられる。この実施例では、ＣＰＵ３０は、ＣＣＤカメラ４０からの画像データを、所定時間（１フレーム：１／３０秒）毎に検出し、フレーム間（１つ手前のフレームと現フレームと）の動きベクトルを計算する。動きベクトルを計算する方法は既に周知であるため、ここでは詳細な説明は省略する。
【００３６】
ＣＰＵ３０は、計算した動きベクトルを用いるなどして、文字入力装置１２の移動に関する情報（移動情報）を生成する。この実施例では、移動情報は、ユーザが書いた文字についてのコードデータ（筆記コードデータ５２４）である。具体的には、ＣＰＵ３０は、スイッチ１６のオン／オフを検出し、文字の筆記中であるか否かを判断する。この実施例では、ＣＰＵ３０は、スイッチ１６を押した状態（オン状態）では、文字の筆記中であると判断し、スイッチ１６を押していない状態（オフ状態）では、直前の一筆を書き終えてから次の一筆の書き始めまでの単なる移動中であると判断するようにしてある。
【００３７】
ここで、ＣＰＵ３０は、スイッチ１６がオンである場合には、ＣＣＤカメラ４０からの画像データに基づいて計算した動きベクトルを筆記中の方向（説明の便宜上、「第１方向」という。）として検出する。また、スイッチ１６がオフである場合には、スイッチ１６がオンからオフに変化したときの座標データ（説明の都合上、「第１座標データ」という。）を記録しておき、次にオフからオンに変化したときの座標データ（説明の都合上、「第２座標データ」という。）を検出して、第１座標データが示す座標位置を始点とし、第２座標データが示す座標位置を終点とするベクトルを計算する。そして、ＣＰＵ３０は、このベクトルが示す方向を筆記中でない移動（単なる移動中の）方向（説明の便宜上、「第２方向」という。）として検出する。
【００３８】
ここで、図示は省略するが、ＣＰＵ３０は、ユーザが文字入力装置１２を用いて文字を書き始めたとき、すなわち最初にスイッチ１６をオンしたとき、そのときの文字入力装置１２の位置座標を原点に決定し、その原点からの距離および方向に基づいて、その後の位置座標を求めるようにしてある。ただし、原点からの距離および方向は、１フレーム毎に算出される動きベクトルに従って更新される。
【００３９】
ＣＰＵ３０は、検出した第１方向または第２方向を記号ないし符号で表わし、それらを時系列に従って記述した移動情報すなわち筆記コードデータ５２４を生成する。この実施例では、主として、第１方向と第２方向とを区別するために、図３（Ａ）に示すような筆記中方向コードデータ５２２ａと、図３（Ｂ）に示すような移動中方向コードデータ５２２ｂとを用意し、これらを参照して、第１方向および第２方向のそれぞれを符号化（コード化）する。
【００４０】
図３（Ａ）に示すように、筆記中方向コードデータ５２２ａは、２次元方向を上下左右と斜め方向とを含む８つの方向（動き有りの方向）と、主として動きの少ない（原点に近い）１つ方向（動き無し方向）とに定義された方向（ベクトル）をアルファベットの小文字に符号化するためのデータである。具体的には、動き有りの方向としては、上方向に「ｈ」が割り当てられ、この上方向から時計回りに４５度回転した右斜め上方に「ａ」が割り当てられる。また、右方向に「ｂ」が割り当てられ、この右方向から時計回りに４５度回転した右斜め下方に「ｃ」が割り当てられる。さらに、下方向に「ｄ」が割り当てられ、この下方向から時計回りに４５度回転した左斜め下方向に「ｅ」が割り当てられる。そして、左方向に「ｆ」が割り当てられ、この左方向から時計回りに時計回りに４５度回転した左斜め上方に「ｇ」が割り当てられる。
【００４１】
また、動きが少なく、動きなしの方向として「ｏ」が割り当てられる。ここで、「動きが少ない」とは、動きベクトルのスカラが所定値（所定距離）未満であることを意味し、所定値は、この文字入力装置１２の開発者や設計者によって設定される値である。ただし、動きベクトルは隣接するフレームの画像データに基づいて算出され、１フレームのような短い期間に人間が手指を動かす距離は非常に短いと考えられるため、所定値は比較的小さい値に設定される。また、この実施例では、動きが少ないのみならず、画像データから検出した動きベクトルの信頼性が低いと判定される場合にも、「ｏ」に符号化するようにしてある。
【００４２】
なお、一般的に単一色の壁や床においても多少の信号レベル差があるため、これらに文字入力装置１２（ＣＣＤカメラ４０のレンズ）を向けて文字を書いた場合でも、正確に動きベクトルを検出することができる。しかし、極端に暗すぎる、または明るすぎる、或いは規則的な繰り返しパターンの画像データの場合には動きベクトルを誤検出する可能性がある。ただし、検出した動きベクトルの信頼性は、その検出のための演算の過程において概ね判定することができる。
【００４３】
また、図３（Ｂ）に示すように、移動方向コードデータ５２２ｂは、２次元方向を上下左右と斜め方向とを含む８方向と、動きの少ない（原点に近い）１方向とに定義された方向（ベクトル）をアルファベットの大文字で表記したデータである。各方向に定義されたアルファベットは、筆記中方向コードデータ５２２ａと同じであるため、詳細な説明は省略する。
【００４４】
ＣＰＵ３０は、スイッチ１６がオンの場合には、第１方向を検出し、筆記中方向コード５２２ａを参照して、第１方向と最も近い方向に割り当てられた符号（説明の都合上、「第１符号」という。）を記憶する。また、ＣＰＵ３０は、スイッチ１６がオフの場合には、第２方向を検出し、移動方向コード５２２ｂを参照して、第２方向と最も近い方向に割り当てられた符号（説明の都合上、「第２符号」という。）を記憶する。第１符号および第２符号は、時系列に従って並べられ、符号列のデータすなわち筆記コードデータ５２４が生成される。
【００４５】
ここで、ユーザが書いた文字に応じた筆記コードデータ５２４の生成方法について説明する。ただし、辞書コードデータ５２０の生成方法は、正しい書き順および筆（この実施例では、文字入力装置１２）運びで、文字を書いた場合に生成される筆記コードデータ５２４の生成方法と同じであるため、重複した説明は省略する。ただし、辞書コードデータ５２０は、実際に文字を書かずに、正しい書き順および筆運びに従って、筆記中方向コードデータ５２２ａおよび移動方向コードデータ５２２ｂで定義される第１方向および第２方向の符号を並べることにより、生成するようにしてもよい。
【００４６】
たとえば、ユーザが、図４（Ａ）に示すように、正しい書き順および筆運びで、ひらがなの“あ”を書く場合には、まず、スイッチ１６をオンした状態で、（１）で示すように、横棒が書かれる。上述したように、スイッチ１６がオンの状態では、動きベクトルに従って第１方向が決定さる。この第１方向は、図４（Ｂ）からも分かるように、横棒の書き始めから書き終わりまで右方向或いはほぼ右方向であり、筆記中方向コードデータ５２２ａを参照することによって、「ｂ」に符号化される。したがって、ユーザが横棒を書き終えると、筆記コードデータ５２４として、符号「ｂ」のデータがＲＡＭ３６に記憶される。ただし、第１方向についての符号（アルファベット）は、その符号が変化しない限り、つまり第１方向（動きベクトル）が変化しない限り、追加的（連続的）にＲＡＭ３６に記憶されることはない。以下、同じ。
【００４７】
なお、図４（Ａ）はひらがなの“あ”の正しい書き順を示し、図４（Ｂ）はひらがなの“あ”が正しい順および筆運びで書かれる場合に検出される筆記方向（第１方向）および移動方向（第２方向）をベクトル（矢印）で示す図解図である。
【００４８】
ユーザが横棒を書き終えると、つまりスイッチ１６がオンからオフに変化すると、このときの位置座標に対応する第１座標データがＲＡＭ３６に一時記憶される。次に、ユーザが（２）で示す縦棒を書き始めると、すなわちスイッチ１６がオフからオンに変化すると、このときの位置座標に対応する第２座標データがＲＡＭ３６に一時記憶される。そして、先に記憶された第１座標データが示す位置座標と、今回記憶した第２座標データが示す位置座標とから第２方向が求められる。このように、１つ手前の一筆を書き終えた点と次の一筆を書き始める点とを結ぶ方向を第２方向として求めるのは、筆記中でない手指の動きを詳細に検出してコード化しても、演算量が増えるだけであり、しかも、文字認識に与える影響が少ないためである。この第２方向は、図４（Ｂ）からも分かるように、左斜め上方であり、移動方向コードデータ５２２ｂを参照することによって、「Ｇ」に符号化される。したがって、ユーザが、横棒を書き終えて、縦棒を書き始めるときには、筆記コードデータ５２４として、符号列「ｂＧ」のデータがＲＡＭ３６に記憶される。
【００４９】
なお、第２方向が求められ、これが符号化されると、ＲＡＭ３６に一時記憶された第１座標データおよび第２座標データは消去される。
【００５０】
また、ユーザが（２）で示す縦棒を筆記している場合には、第１方向は動きベクトルに基づいて決定される。この第１方向は、図４（Ｂ）からも分かるように、縦棒の書き始めから書き終わりまで下向き或いはほぼ下向きである。したがって、第１方向は、筆記中方向コードデータ５２２ａを参照することによって、「ｄ」に符号化される。このため、縦棒を書き終えた時点では、筆記コードデータ５２４として、符号列「ｂＧｄ」のデータがＲＡＭ３６に記憶される。
【００５１】
ユーザが縦棒を書き終えると、つまりスイッチ１６がオンからオフに変化すると、このときの位置座標に対応する第１座標データがＲＡＭ３６に一時記憶される。次にユーザが（３）で示す部分を書き始めると、つまりスイッチ１６がオフからオンに変化すると、このときの位置座標に対応する第２座標データがＲＡＭ３６に一時記憶される。そして、ＲＡＭ３６に記憶された第１座標データと第２座標データとから第２方向が算出される。ここで、第２方向は、図４（Ｂ）からも分かるように、右斜め上方であり、移動方向コードデータ５２２ｂを参照して、「Ａ」に符号化される。したがって、ユーザが（３）で示す部分を書き始めた時点では、筆記コードデータ５２４として、符号列「ｂＧｄＡ」のデータがＲＡＭ３６に記憶される。
【００５２】
ユーザが（３）で示す部分を筆記している間は、スイッチ１６はオンであり、このとき、第１方向は、図４（Ｂ）からも分かるように、左斜め下方、左方、左斜め上方、上方、右斜め上方、右方、右斜め下方、下方、左斜め下の順で変化する。したがって、筆記中方向コードデータ５２２ａを参照することにより、第１方向は、「ｅ」、「ｆ」、「ｇ」、「ｈ」、「ａ」、「ｂ」、「ｃ」、「ｄ」、「ｅ」の順で符号化され、ＲＡＭ３６に追加的に記憶される。つまり、筆記コードデータ５２４が示す文字列に追加される。したがって、ユーザが（３）で示す部分の筆記を終えると、筆記コードデータ５２４として、符号列「ｂＧｄＡｅｆｇｈａｂｃｄｅ」のデータがＲＡＭ３６に記憶される。
【００５３】
また、図４（Ｃ）に示すように、ひらがなの“い”を書く場合には、ユーザは（１）で示す縦棒を書き、次の一筆の書き始め位置に移動し、（２）で示す縦棒を書く。したがって、図４（Ｄ）に示すように、第１方向および第２方向が時系列に従って検出され、筆記コードデータ５２４として、符号列「ｄＡｄ」のデータがＲＡＭ３６に記憶される。
【００５４】
なお、この実施例では、ひらがなの“い”では、（１）で示す縦棒を書いたときに、その下部の「はねる」部分については符号化しないようにしてある。これは、文字入力装置１２を用いて文字を書く場合には、ユーザがスイッチ１６をオン／オフするが、「はねる」部分を書くとき、スイッチ１６をオフしてしまう傾向にあるからである。ただし、「はねる」部分についても符号化するようにしてもよい。
【００５５】
上述のようにして、筆記コードデータ５２４は生成され、この筆記コードデータ５２４は、辞書コードデータ５２０（図６参照）に含まれる複数の文字についてのコードデータ（辞書コードデータ５２０ａ，５２０ｂ，５２０ｃ，…）の各々と比較され、比較された結果、最も近似（類似）する辞書コードデータ５２０が示す文字に特定される。つまり、ユーザが書いた文字が認識される。
【００５６】
ここで、辞書コードデータ５２０は、複数の辞書コードデータ５２０ａ，５２０ｂ，５２０ｃ，…を含む。以下、この明細書においては、単に「辞書コードデータ５２０」という場合には、辞書コードデータ５２０ａ，５２０ｂ，５２０ｃ，…の各々を指す場合と、辞書コードデータ５２０ａ，５２０ｂ，５２０ｃ，…をまとめて指す場合とがある。各辞書コードデータ５２０ａ，５２０ｂ，５２０ｃ，…は、文字入力装置１２を用いて各文字を正しい書き順および筆運びで書いた場合に、時系列に従って検出される第１方向と第２方向とが、筆記中方向コードデータ５２２ａおよび移動方向コードデータ５２２ｂが参照されることによって符号化され、生成される。
【００５７】
ただし、この実施例では、辞書コードデータ５２０は後述するように、１文字に対して１つの辞書コードデータ５２０を記憶するようにしてあるが、１文字に対して複数の辞書コードデータ５２０を記憶するようにしてもよい。これは、たとえば、“き”や“そ”などでは、ユーザによって書き方（画数）が異なったり、ユーザ毎に文字入力装置１２の使用の仕方（スイッチ１６の操作の仕方）が異なったりするからであり、さらに、文字の認識率を高めるためでもある。したがって、たとえば、辞書コードデータ５２０は、使用前に、ユーザがすべて登録するようにすれば、当該ユーザが使用する限りにおいては、ほぼ正確に文字を認識できると考えられる。しかし、複数のユーザで共用したり、あらゆるユーザに対応させたりするためには、上述したように、各文字に対して複数の辞書コードデータ５２０を用意する必要があると考えられる。
【００５８】
ここで、この実施例における、筆記コードデータ５２４と辞書コードデータ５２０ａ，５２０ｂ，５２０ｃ，…との類似度の評価方法について説明する。一例として、ユーザが文字を書いたことにより、筆記コードデータ５２４として符号列「ｃｂＧｄＡｅｆｇｈａｂｃｄ」のデータが得られた場合について説明する。また、“あ”の辞書コードデータ５２０ａは、符号列「ｂＧｄＡｅｆｇｈａｂｃｄｅ」のデータであり、“い”の辞書コードデータ５２０ｂは、符号列「ｄＡｄ」のデータである。
【００５９】
類似度を評価する評価値は、筆記コードデータ５２４と辞書コードデータ５２０（５２０ａ，５２０ｂ，５２０ｃ，…）とを、時系列に従って符号単位（１の第１方向または１の第２方向単位）で比較し、その比較結果（累積差）を比較回数で割ることにより算出される。この評価値が最小となる辞書コードデータ５２０に対応する文字がユーザの書いた文字として特定（認識）される。ただし、この実施例では、ひとつの第１方向すなわち一筆（１ストローク）単位で同期を取るようにするため、周知のＤＰマッチング法をベースに時間軸を調整している。具体的には、辞書コードデータ５２０および筆記コードデータ５２４に含まれるアルファベットの大文字単位で、辞書コードデータ５２０と筆記コードデータ５２４との同期を取るようにしてある。
【００６０】
なお、文字の筆記中でないときの手指の移動方向（第２方向）はアルファベットの大文字で表わされるため、辞書コードデータ５２０および筆記コードデータ５２４は、それぞれ、アルファベットの大文字単位で、一筆毎に区切られている。
【００６１】
上述したように、符号単位で比較するが、その対比した符号が異なる場合には、その隔たり（差）が算出される。この実施例では、符号に対応して決定されたアスキーコードを用いて差の絶対値を算出するようにしてある。ここで、アルファベットの大文字「Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ，Ｇ，Ｈ，Ｏ」のアスキーコードは、それぞれ、「４１，４２，４３，４４，４５，４６，４７，４８，４Ｆ」である。一方、アルファベット小文字「ａ，ｂ，ｃ，ｄ，ｅ，ｆ，ｇ，ｈ」のアスキーコードは、それぞれ、「６１，６２，６３，６４，６５，６６，６７，６８」である。
【００６２】
したがって、たとえば、符号「ａ」と符号「ｂ」との差（差の絶対値である。以下、同じ。）は「１」であり、符号「ａ」と符号「ｃ」との差は「２」であり、符号「ａ」と符号「ｄ」との差は「３」である。また、符号「Ａ」と符号「Ｂ」との差は「１」であり、符号「Ａ」と符号「Ｃ」との差は「２」であり、符号「Ａ」と符号「Ｄ」との差は「３」である。このように、アスキーコードを用いて差が算出される。
【００６３】
ただし、図３（Ａ）および図３（Ｂ）からも分かるように、各方向に割り当てたアルファベットは線形的に並べられるのではなく、円形状に並べられるため、方向の差を０度〜１８０度の間で表わすとすると、アルファベットの大文字同士または小文字同士では、差は「０」〜「４」で表わすことができる。このため、大文字同士または小文字同士を比較する場合には、アスキーコードを用い差分を計算した後に、必要に応じて差の値を補正するようにしてある。たとえば、符号「ａ」と符号「ｈ」との差は「７」であるが、図３（Ａ）からも分かるように、実際には、方向は４５度ずれているだけであり、符号「ａ」と符号「ｂ」との差「１」と同じである。したがって、差が「５」以上の場合には、数１に従って差を補正するようにしてある。ただし、大文字と小文字とを比較する場合には、アスキーコードに拘わらず、一律に差を「５」に決定するようにしてある。
【００６４】
［数１］
補正後の差＝８−差
ただし、数１において、差は５以上７以下の数値である。
【００６５】
また、筆記コードデータ５２４では、動きが少ない場合、つまり動きベクトルのスカラが所定値未満の場合には、第１方向は「ｏ」に符号化される。かかる場合には、その前後における文字認識装置１２（筆）の動きに応じて、つまり符号「ｏ」の前後の符号に応じて、実際に動きが止まっているかどうかを判断して、符号「ｏ」を補正するようにしてある。これは、上述したように、類似度を算出する場合に、一筆（１ストローク）単位で辞書コードデータ５２０と筆記コードデータ５２４とを比較するようにしてあるためである。
【００６６】
具体的には、符号「ｏ」の前後の符号が同じか筆記中方向コードデータ５２２ａにおいて隣接する方向である場合には、当該符号「ｏ」は無視するようにしてある。このような場合には、単に手書きの速度が遅かったり、手書き操作に振れが発生したりしたと判断するのが適切だからである。したがって、たとえば、筆記コードデータ５２４に、符号列「ａｏａ」，「ａｏｂ」，「ａｏｈ」などが含まれる場合には、それぞれ、「ａａ」，「ａｂ」，「ａｈ」に補正される。
【００６７】
なお、符号列「ａｏａ」が「ａａ」に補正されるように説明してあるが、これは符号「ｏ」の前後で符号が１つ（方向が４５度）ずれている場合と、符号が一致する場合との両方を同様に扱うためである（図１０−図１３に示す特定処理を参照）。この点、コード化処理において、動きベクトルが変化しない場合に、符号を追加的にＲＡＭ３６に記憶しないようにしているのとは異なる。
【００６８】
しかし、たとえば、筆記コードデータ５２４に、符号列「ａｏｄ」や符号列「ａｏｅ」などように、符号「ｏ」の前後の符号が異なり、しかも隣接していない場合には、それぞれ、符号列「ａＯｄ」，「ａＯｅ」に補正される。これは、折れ曲がっている点や折り返している点（以下、これらをまとめて「折れ点」という。）は、実際には１ストロークで書かれるが、類似度を算出する都合上、折れ点の前後で別のストロークと判断するようにしてある。具体的には、ひらがなの“へ”や“く”のように一部が折れ曲がっていたり、ひらがなの“え”や“ん”の左下部のように一部が折り返していたりする場合には、折れ点の前後で別のストロークと仮定するようにしてある。
【００６９】
具体的な比較方法および評価値の算出方法を簡単に説明することにする。まず、筆記コードデータ５２４についての符号列「ｃｂＧｄＡｅｆｇｈａｂｃｄ」と、“あ”の辞書コードデータ５２０ａについての符号列「ｂＧｄＡｅｆｇｈａｂｃｄｅ」とを比較する場合について説明する。比較は、時系列に従って（先頭から順に）符号単位すなわちストローク単位で行われ、また、アルファベットの大文字で同期を取るようにするため、図５（Ａ）に示すように、「ｃ−ｂ」、「ｂ−ｂ」、「Ｇ−Ｇ」、「ｄ−ｄ」、「Ａ−Ａ」、「ｅ−ｅ」、「ｆ−ｆ」、「ｇ−ｇ」、「ｈ−ｈ」、「ａ−ａ」、「ｂ−ｂ」、「ｃ−ｃ」、「ｄ−ｄ」、「ｄ−ｅ」の各々が比較され、各々の差が求められる。
【００７０】
ただし、かぎ括弧内では、左側のアルファベット文字が筆記コードデータ５２４に含まれる符号であり、右側のアルファベット文字が辞書コードデータ５２０ａに含まれる符号である。以下、同じ。また、図５（Ａ）（図５（Ｂ）も同じ。）では、点線および実線で、対比する符号を示してあるが、実線は比較するのみならず比較するコードデータ同士の同期を取っていることを示してある。これは、ストローク単位で比較するためである。また、図５（Ａ）（図５（Ｂ）も同じ。）に示すように、辞書コードデータ５２０または筆記コードデータ５２４についての符号のうち、一方についての最後の符号が比較対象になった場合には、他方についての最後の符号が比較対象になるまで、当該一方についての最後の符号が比較対象にされる。
【００７１】
ここで、比較結果（累積差）は、「ｃ−ｂ」の差「１」と、「ｄ−ｅ」の差「１」とを合計した値「２」である。したがって、評価値は、累積差「２」を比較回数「１４」で割って、約０．１４となる。このように、累積差を比較回数で割るようにするのは、符号列の長さによる累積差の違いを均一化するためである。また、この実施例では、評価値は小数点以下第２位までで表わし、割り切れない場合には、小数点以下第３位を四捨五入するようにしてある。
【００７２】
また、この筆記コードデータ５２４についての符号列「ｃｂＧｄＡｅｆｇｈａｂｃｄ」と、“い”の辞書コードデータ５２０ｂについての符号列「ｄＡｄ」とを比較する場合には、図５（Ｂ）に示すように、「ｃ−ｄ」、「ｂ−ｄ」、「Ｇ−Ａ」、「ｄ−ｄ」、「Ａ−ｄ」、「ｅ−ｄ」、「ｆ−ｄ」、「ｇ−ｄ」、「ｈ−ｄ」、「ａ−ｄ」、「ｂ−ｄ」、「ｃ−ｄ」、「ｄ−ｄ」の各々が比較され、各々の差が求められる。この場合には、累積差は、「ｃ−ｄ」の差「１」、「ｂ−ｄ」の差「２」、「Ｇ−Ａ」の差「２」、「Ａ−ｄ」の差「５」、「ｅ−ｄ」の差「１」、「ｆ−ｄ」の差「２」、「ｇ−ｄ」の差「３」、「ｈ−ｄ」の差「４」、「ａ−ｄ」の差「３」、「ｂ−ｄ」の差「２」、「ｃ−ｄ」の差「１」を合計した値「２６」である。したがって、評価値は、累積差「２６」を比較回数「１３」で割って、２．００となる。
【００７３】
図６は、図１に示すＲＡＭ３６のメモリマップを示す図解図である。ただし、ＲＡＭ３６に記憶されるプログラムや一部のデータは、ＲＯＭ３４からロードされる。図６に示すように、ＲＡＭ３６は、プログラム記憶領域５０およびデータ記憶領域５２を含む。プログラム記憶領域５０は、文字認識プログラムおよび文字入力プログラム５０８を記憶する。文字認識プログラムは、メイン処理プログラム５００、動きベクトル検出プログラム５０２、コード化プログラム５０４および文字特定プログラム５０６によって構成される。
【００７４】
メイン処理プログラム５００は、この実施例の文字認識のメインルーチンを処理するためのプログラムである。動きベクトル検出プログラム５０２は、ＣＣＤカメラ４０からの画像を所定時間（たとえば、１フレーム）毎に検出し、１フレーム前の画像と現フレームの画像とを比較して動きベクトルを検出（算出）するためのプログラムである。
【００７５】
コード化プログラム５０４は、ユーザが文字入力装置１２を用いて、空中で文字を書くときに、筆記中であるときのユーザの手指の移動方向（第１方向）と、筆記中ではなく、直前の一筆を書き終えた点（第１座標データが示す位置座標）から次の一筆を書き始める点（第２座標データが示す位置座標）までのユーザの手指の移動方向（第２方向）とを符号化し、符号を時系列に並べてコード化するためのプログラムである。ただし、上述したように、第２方向は、第１位置座標を始点とし、第２位置座標を終点とするベクトルの方向である。
【００７６】
文字特定プログラム５０６は、ユーザが書いた文字を特定するためのプログラムである。簡単に説明すると、ユーザが書いた文字についてのコードデータ（筆記コードデータ５２４）と、辞書として予め登録してある各文字についてのコードデータ（辞書コードデータ５２０ａ，５２０ｂ，５２０ｃ，…）とを比較し、筆記コードデータ５２４と類似度が最も高い（評価値が最も小さい）辞書コードデータ５２０に対応する１の文字を特定（決定）する。これにより、ユーザが書いた文字が認識される。そして、文字入力プログラム５０８は、文字特定プログラム５０６に従って特定（認識）された文字をコンピュータ２０に入力（送信）するためのプログラムである。
【００７７】
また、データ記憶領域５２には、辞書コードデータ５２０、方向データ５２２、筆記コードデータ５２４および評価用テーブルデータ５２６のようなデータが記憶されるとともに、筆記中フラグ５２８のようなフラグが記憶される。
【００７８】
辞書コードデータ５２０は、複数の辞書コードデータ５２０ａ，５２０ｂ，５２０ｃを含む。辞書コードデータ５２０ａは、ひらがなの“あ”を正しい書き順および筆運びで書いたときのコードデータであり、符号列「ｂＧｄＡｅｆｇｈａｂｃｄｅ」のデータで表わされる。また、辞書コードデータ５２０ｂは、ひらがなの“い”を正しい書き順および筆運びで書いたときのコードデータであり、符号列「ｄＡｄ」のデータで表わされる。さらに、辞書コードデータ５２０ｃは、ひらがなの“う”を正しい書き準および筆運びで書いたときのコードデータであり、符号列「ｃＥａｂｃｄｅ」のデータで表わされる。図示は省略するが、他のひらがなについての辞書コードデータ５２０も記憶される。ただし、ひらがなに加えて、数字（０〜９）またはアルファベット（ａ〜ｚ，Ａ〜Ｚ）或いはその両方についての辞書コードデータ５２０を記憶するようにしてもよい。
【００７９】
方向データ５２２は、図３（Ａ）に示した筆記中方向コードデータ５２２ａおよび図３（Ｂ）に示した移動方向コードデータ５２２ｂを含む。上述したように、スイッチ１６がオンの場合に検出される第１方向は、筆記中方向コードデータ５２２ａを参照して符号化され、スイッチ１６がオフの場合に検出される第２方向は、移動方向コードデータ５２２ｂを参照して符号化される。
【００８０】
筆記コードデータ５２４は、ユーザが文字を書くとき文字入力装置１２自体の移動およびスイッチ１６のオン／オフに応じて、その移動方向が時系列に従って符号化されたコードデータある。なお、詳細な説明は省略するが、コンピュータ２０において、１文字の入力終了（次の文字を入力する）と判定したり、文字がキャンセル（訂正）されたりした場合に、コンピュータ２０からのコマンドにしたがって、筆記コードデータ５２４はリセット（消去）される。
【００８１】
評価用テーブルデータ５２６は、辞書コードデータ５２０に登録された文字毎に評価値を記述できるように構成されたテーブルについてのデータであり、ユーザが書いた文字を特定（認識）する場合に用いられる。具体的には、図７に示すように、ひらがなが１文字ずつ記述され、各ひらがなに対応する辞書コードデータ５２０と筆記コードデータ５２４との評価値が計算されると、計算された評価値が該当するひらがなに対応して記述される。ただし、評価用テーブルデータ５２６は、文字が特定される毎に、リセットされる。つまり、すべての評価値が消去される。
【００８２】
図６に戻って、筆記中フラグ５２８は、筆記中か否かを判断するためのフラグであり、たとえば、１ビットのレジスタで構成される。この実施例では、スイッチ１６がオンであれば、筆記中であり、一方、スイッチ１６がオフであれば、単なる移動中である。したがって、スイッチ１６がオフからオンに変化したとき、筆記中フラグ５２８はオンされ、レジスタにデータ値「１」が設定される。一方、スイッチ１６がオンからオフに変化したとき、筆記中フラグ５２８はオフされ、レジスタにデータ値「０」が設定される。
【００８３】
なお、図示は省略するが、データ記憶領域５２には、他のデータたとえば第１座標データや第２座標データのようなデータが一時記憶されたり、他のフラグデータが記憶されたりする。
【００８４】
具体的には、図２に示したＣＰＵ３０が図８に示すようなメインルーチン（全体処理）を実行する。図８に示すように、ＣＰＵ３０は全体処理を開始すると、ステップＳ１で、動きベクトルを生成する。つまり、ＣＣＤカメラ４０から入力される画像データを１フレーム毎に検出し、直前のフレームの画像と現フレームの画像との動き（移動方向および移動量）を検出する。
【００８５】
次のステップＳ３では、後述するコード化処理（図９参照）を実行し、ステップＳ５では、後述する文字特定処理（図１０−図１３参照）を実行する。そして、特定された（認識された）文字を、ステップＳ７で、コンピュータ２０に入力（送信）して、全体処理を終了する。
【００８６】
なお、全体処理すなわちステップＳ１−Ｓ７のスキャンタイムが１フレームであり、この全体処理が繰り返し実行されることにより、動きベクトルは１フレーム毎に算出（検出）される。
【００８７】
図９は、図８のステップＳ３に示したコード化処理を示すフロー図である。図９に示すように、ＣＰＵ３０は、コード化処理を開始すると、ステップＳ２１で、スイッチ１６がオンであるかどうかを判断する。ステップＳ２１で“ＮＯ”であれば、つまりスイッチ１６がオフであれば、ステップＳ２３で、スイッチがオンからオフに変化したかどうかを判断する。つまり、筆記中フラグ５２８がオンからオフに変化したかどうかを判断する。ステップＳ２３で“ＮＯ”であれば、つまりスイッチ１６がオンからオフに変化しておらず、オフ状態が継続している場合には、そのまま図８に示したメインルーチンにリターンする。
【００８８】
一方、ステップＳ２３で“ＹＥＳ”であれば、つまりスイッチ１６がオンからオフに変化した場合には、ステップＳ２５で、第２方向の符号化前処理を実行して、メインルーチンにリターンする。具体的には、ステップＳ２５では、第１座標データが検出され、ＲＡＭ３６に一時記憶される。
【００８９】
また、ステップＳ２１で“ＹＥＳ”であれば、つまりスイッチ１６がオンである場合には、ステップＳ２７で、スイッチ１６がオフからオンに変化したかどうかを判断する。つまり、筆記中フラグ５２８がオフからオンに変化したかどうかを判断する。ステップＳ２７で“ＹＥＳ”であれば、つまりスイッチ１６がオフからオンに変化した場合には、ステップＳ２９で、第２座標データを検出して、第２方向を算出し、ステップＳ３１で、移動方向コードデータ５２２ｂを参照して、算出した第２方向を符号化する。そして、ステップＳ３３で、第２方向の符号を、ＲＡＭ３６に記憶される筆記コードデータ５２４に追加する。
【００９０】
また、ステップＳ２７で“ＮＯ”であれば、つまりスイッチ１６がオフからオンに変化せず、オン状態の継続であれば、ステップＳ３５で、第１方向を算出する。つまり、ステップＳ３５では、メインルーチンのステップＳ１で算出された動きベクトルの方向が第１方向として検出される。続くステップＳ３７では、筆記中コードデータ５２２ａを参照して、第１方向を符号化し、ステップＳ３９では、前回の符号と今回の符号とが同じであるかどうかを判断する。
【００９１】
ステップＳ３９で“ＹＥＳ”であれば、つまり前回の符号と今回の符号とが同じである場合には、そのままメインルーチンにリターンする。一方、ステップＳ３９で“ＮＯ”であれば、つまり前回の符号と今回の符号とが異なる場合には、ステップＳ４１で、第１方向の符号を、ＲＡＭ３６に記憶される筆記コードデータ５２４に追加して、メインルーチンにリターンする。
【００９２】
図１０−図１３は、図８のステップＳ５に示した文字特定処理を示す。図１０に示すように、ＣＰＵ３０は、文字特定処理を開始すると、ステップＳ５１で、１番目の文字の辞書コードデータ５２０をＲＡＭ３８から読み出す。たとえば、この実施例では、ひらがなの辞書コードデータ５２０がいわゆる「あいうえお順」で読み出される。
【００９３】
次のステップＳ５３では、初期化（１）処理を実行する。具体的には、比較回数についての変数ｋに１を代入し（ｋ＝１）、辞書コードデータ５２０の符号の番目についての変数ｍに１を代入し（ｍ＝１）、筆記コードデータ５２４の符号の番目についての変数ｎに１を代入し（ｎ＝１）、そして、累積差の変数Ａｃｃｕｍに０を代入する（Ａｃｃｕｍ＝０）。続くステップＳ５５では、初期化（２）処理を実行する。具体的には、符号の比較による差分の変数Ａｂｓに０を代入する（Ａｂｓ＝０）。
【００９４】
そして、ステップＳ５７では、符号［ｍ］と符号［ｎ］との両方が終了したかどうかを判断する。ここで、［ｍ］は辞書コードデータ５２０が示す符号列のｍ番目の符号を意味し、［ｎ］は筆記コードデータ５２４が示す符号列のｎ番目の符号を意味する。以下、同じである。つまり、辞書コードデータ５２０と筆記コードデータ５２４との両方の符号についてすべて比較したかどうかを判断する。ステップＳ５７で“ＹＥＳ”であれば、つまり符号［ｍ］と符号［ｎ］との両方が終了し、辞書コードデータ５２０と筆記コードデータ５２４との両方の符号についてすべて比較したと判断すると、図１３に示すステップＳ１０５に進む。
【００９５】
しかし、ステップＳ５７で“ＮＯ”であれば、つまり符号［ｍ］または符号［ｎ］のいずれか一方でも終了していなければ、辞書コードデータ５２０と筆記コードデータ５２４との両方の符号についてすべて比較していないと判断し、ステップＳ５９で、符号［ｎ］が「ｏ」であるかどうかを判断する。ステップＳ５９で“ＮＯ”であれば、つまり符号［ｎ］が「ｏ」でなければ、そのままステップＳ６７に進む。一方、ステップＳ５９で“ＹＥＳ”であれば、つまり符号［ｎ］が「ｏ」であれば、ステップＳ６１で、符号［ｎ−１］と符号［ｎ＋１］との差が１以下であるかどうかを判断する。ただし、上述したように、差はアスキーコードを用いて算出される。具体的には、符号「ｏ」を挟む前後の符号に対応する方向のずれが４５度以下であるかどうかを判断する。
【００９６】
ステップＳ６１で“ＹＥＳ”であれば、つまり符号［ｎ−１］と符号［ｎ＋１］との差が１以下であれば、符号「ｏ」は折れ点を示すものではないと判断し、この符号「ｏ」を無視すべく、ステップＳ６３で、変数ｎをインクリメントして（ｎ＝ｎ＋１）、ステップＳ６７に進む。一方、ステップＳ６１で“ＮＯ”であれば、つまり符号［ｎ−１］と符号［ｎ＋１］との差が２以上であれば、符号「ｏ」は折れ点を示すものであると判断し、ステップＳ６５で、符号［ｎ］を「Ｏ」に設定して、ステップＳ６７に進む。
【００９７】
ステップＳ６７では、符号［ｎ］が「ａ，ｂ，ｃ，ｄ，ｅ，ｆ，ｇ，ｈ」のいずれかであるかどうかを判断する。ステップＳ６７で“ＮＯ”であれば、つまり符号［ｎ］が「ａ，ｂ，ｃ，ｄ，ｅ，ｆ，ｇ，ｈ」のいずれでもない場合には、図１２に示すステップＳ８５に進む。一方、ステップＳ６７で“ＹＥＳ”であれば、つまり符号［ｎ］が「ａ，ｂ，ｃ，ｄ，ｅ，ｆ，ｇ，ｈ」のいずれかである場合には、図１１に示すステップＳ６９で、符号［ｍ］が「Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ，Ｇ，Ｈ」のいずれかであるかどうかを判断する。
【００９８】
ステップＳ６９で“ＹＥＳ”であれば、つまり符号［ｍ］が「Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ，Ｇ，Ｈ」のいずれかであれば、そのままステップＳ７５に進む。一方、ステップＳ６９で“ＮＯ”であれば、つまり符号［ｍ］が「Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ，Ｇ，Ｈ」のいずれでもなければ、ステップＳ７１で、符号［ｍ］が「Ｏ」であるかどうかを判断する。ステップＳ７１で“ＹＥＳ”であれば、つまり符号「ｍ」が「Ｏ」であれば、ステップＳ７５に進む。一方、ステップＳ７１で“ＮＯ”であれば、つまり符号［ｍ］が「Ｏ」でなければ、ステップＳ７３で、符号［ｍ］が終了したかどうかを判断する。ステップＳ７３で“ＹＥＳ”であれば、つまり符号［ｍ］が終了していれば、ステップＳ７５に進む。しかし、ステップＳ７３で“ＮＯ”であれば、つまり符号［ｍ］が終了していなければ、ステップＳ７７に進む。
【００９９】
ステップＳ７５では、符号［ｍ］に符号［ｍ−１］を設定する。つまり、１ストローク毎に、または符号［ｍ］の終了により、筆記コードデータ５２４との同期を取っているのである。このように、１つ前の符号を設定するようにしてあるのは、符号化処理においては、筆記中でない場合には、動きベクトルによらず、一筆が終了した点と次の一筆を開始する点とを結ぶベクトルによって移動方向を決定し、決定した１つの移動方向をコード化するため、大文字のアルファベットが２以上連続して記述されることがないからである。以下、同じである。
【０１００】
続くステップＳ７７では、符号［ｎ］と符号［ｍ］とを比較し、その差を計算する。つまり、符号［ｎ］のアスキーコードの数値と、符号［ｍ］のアスキーコードの数値との差の絶対値が計算される。次のステップＳ７９では、ステップＳ７７において計算した差を補正して、変数Ａｂｓに代入する。ここでは、アスキーコードの数値を用いて計算した差を、数１に従って「０」〜「４」に補正する。つまり、方向の違いが０度〜１８０度の間で表わされる。したがって、ステップＳ７７で計算した差が「０」〜「４」である場合には、ステップＳ７９の処理は実行されず、そのままステップＳ８１に進む。ただし、上述したように、アルファベットの大文字とアルファベットの小文字とを比較する場合には、その差は一律「５」にされる。
【０１０１】
続いて、ステップＳ８１で、変数Ａｂｓを変数Ａｃｃｕｍに加算し、ステップＳ８３で、変数ｋ，変数ｍおよび変数ｎのそれぞれをインクリメントして（ｋ＝ｋ＋１，ｍ＝ｍ＋１，ｎ＝ｎ＋１）、図１０のステップＳ５５に戻る。つまり、次の符号［ｎ］についての比較処理および差分算出処理を実行するのである。
【０１０２】
また、上述したように、ステップＳ６７で、符号［ｎ］が「ａ，ｂ，ｃ，ｄ，ｅ，ｆ，ｇ，ｈ」のいずれでもない場合には、図１２に示すステップＳ８５で、符号［ｎ］が「Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ，Ｇ，Ｈ」のいずれかであるかどうかを判断する。ステップＳ８５で“ＹＥＳ”であれば、つまり符号［ｎ］が「Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ，Ｇ，Ｈ」のいずれかであれば、そのままステップＳ８９に進む。一方、ステップＳ８５で“ＮＯ”であれば、つまり符号［ｎ］が「Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ，Ｇ，Ｈ」のいずれでもなければ、ステップＳ８７で、符号［ｎ］が「Ｏ」であるかどうかを判断する。ステップＳ８７で“ＮＯ”であれば、つまり符号［ｎ］が「Ｏ」でなければ、そのままステップＳ９７に進む。一方、ステップＳ８７で“ＹＥＳ”であれば、つまり符号［ｎ］が「Ｏ」であれば、ステップＳ８９に進む。
【０１０３】
ステップＳ８９では、符号［ｍ］が「ａ，ｂ，ｃ，ｄ，ｅ，ｆ，ｇ，ｈ」のいずれかであるかどうかを判断する。ステップＳ８９で“ＹＥＳ”であれば、つまり符号［ｍ］が「ａ，ｂ，ｃ，ｄ，ｅ，ｆ，ｇ，ｈ」のいずれかである場合には、ステップＳ９１で、符号［ｎ］に符号［ｎ−１］を設定して、図１１に示したステップＳ７７に戻る。一方、ステップＳ８９で“ＮＯ”であれば、つまり符号［ｍ］が「ａ，ｂ，ｃ，ｄ，ｅ，ｆ，ｇ，ｈ」のいずれでもない場合には、ステップＳ９３で、符号［ｍ］が終了したかどうかを判断する。ステップＳ９３で“ＮＯ”であれば、つまり符号［ｍ］が終了していなければ、そのままステップＳ７７に戻る。しかし、ステップＳ９３で“ＹＥＳ”であれば、つまり符号［ｍ］が終了していれば、ステップＳ９５で、符号［ｍ］に符号［ｍ−１］を設定して、ステップＳ７７に戻る。
【０１０４】
また、ステップＳ９７では、符号［ｎ］が終了したかどうかを判断する。ステップＳ９７で“ＮＯ”であれば、つまり符号［ｎ］が終了していなければ、そのままステップＳ７７に戻る。一方、ステップＳ９７で“ＹＥＳ”であれば、つまり符号［ｎ］が終了していれば、ステップＳ９９で、符号［ｎ］に符号［ｎ−１］を設定し、ステップＳ１０１で、符号［ｍ］が終了したかどうかを判断する。ステップＳ１０１で“ＮＯ”であれば、つまり符号［ｍ］が終了していなければ、そのままステップＳ７７に戻る。一方、ステップＳ１０１で“ＹＥＳ”であれば、つまり符号［ｍ］が終了していれば、ステップＳ１０３で、符号［ｍ］に符号［ｍ−１］を設定して、ステップＳ７７に戻る。
【０１０５】
図１０に示したステップＳ５７で、符号［ｍ］および符号［ｎ］の両方が終了したと判断すると、“ＹＥＳ”となり、図１３に示すステップＳ１０５で、評価値を算出する。具体的には、累積差Ａｃｃｕｍを比較回数ｋで割る。次のステップＳ１０７では、算出した評価値を評価用テーブル５２６に記憶する。つまり、評価用テーブル５２６のうち、今回比較した文字に対応する欄に、算出した評価値の数値を記述する。
【０１０６】
そして、ステップＳ１０９では、すべての文字と比較したかどうかを判断する。つまり評価用テーブル５２６のすべての欄に評価値が記述されたかどうかを判断する。ステップＳ１０９で“ＮＯ”であれば、つまりすべての文字と比較していなければ、ステップＳ１１３で、次の文字の辞書コードデータ５２０を読み出し、図１０に示したステップＳ５３に戻る。一方、ステップＳ１０９で“ＹＥＳ”であれば、つまりすべての文字と比較していれば、ステップＳ１１１で、文字を特定し、つまりユーザが書いた文字を認識し、図８に示したメインルーチンにリターンする。上述したように、この実施例では、評価値が最小である文字が、ユーザの書いた文字として特定される。
【０１０７】
この実施例によれば、筆記中であるときの方向と、筆記中でないときの方向とを含む筆記コードデータを生成し、同様にして予め生成された辞書コードデータとをストローク単位で比較するので、正確に文字を認識することができる。また、コードデータ同士を比較するだけなので、文字の特定が比較的簡単である。さらに、ストローク単位で比較するので、文字全体をバランスよく、正確に書く必要はなく、一筆単位で正確に書かれていれば、他の一筆との位置関係がずれていても、ユーザが意図して書いた文字を認識することができる。
【０１０８】
なお、この実施例では、評価値が最小である文字を、ユーザの書いた文字として特定するようにしてあるが、評価値が最小である文字が複数存在する場合や最小値とほとんど変わらない値を示す評価値の文字が存在する場合には、複数の文字をコンピュータ２０に接続された表示器（ＣＲＴモニタやＬＣＤ）に表示して、ユーザに選択させるようにすればよい。かかる場合には、複数の文字の各々を先頭として、予測（推測）される単語や語句を候補として表示するようにしてもよい。このとき、漢字で単語を表示したり、漢字を含む語句を表示したりすることもできる。このようにすれば、ユーザが書く文字数を減らして、入力速度を高めることができる。
【０１０９】
または、音声やテキスト表示或いは振動により、文字が認識できない旨を通知し、ユーザに再度文字を書かせて、特定し直すようにしてもよい。かかる場合には、評価値が同じ或いはほぼ同じであった文字の辞書コードデータのみと再度比較するようにすれば、文字の特定を短時間で行うことができる。ただし、音声やテキスト表示或いは振動により、文字が認識できない旨の通知は、文字入力装置１２またはコンピュータ２０を用いて行うことができる。かかる場合には、たとえば、文字入力装置１２やコンピュータ２０に、スピーカ、表示器、バイブレータ（コンピュータ２０の場合には、これに接続されるコンピュータマウスやペンタブレットのペンなどに内蔵）のうち、いずれか１つ以上を設けるようにすればよい。
【０１１０】
また、この実施例では、文字特定処理において、符号「ｏ」が折れ点であるか否かを判断するようにしたが、文字特定処理前に、筆記コードデータを補正して、予め符号「ｏ」の存在しない筆記コードデータを生成しておくようにしてもよい。
【０１１１】
さらに、この実施例では、ひらがなを認識する場合について示したが、数字（０〜９）またはアルファベット（ａ〜ｚ，Ａ〜Ｚ）或いはその両方の辞書コードデータを記憶しておけば、数字やアルファベットについても、実施例で示した手法により認識することができる。ただし、ひらがな、数字、アルファベットに限定される必要はなく、辞書コードデータを作成しておけば、記号を認識することもできる。
【図面の簡単な説明】
【０１１２】
【図１】図１はこの発明の一実施例である入力システムを示す図解図である。
【図２】図２は図１に示す文字認識装置の電気的な構成を示すブロック図である。
【図３】図３は筆記中方向コードデータと移動方向コードデータとを示す図解図である。
【図４】図４は文字の書き順に従って筆記コードデータや辞書コードデータが生成される様子を説明するための図解図である。
【図５】図５は筆記コードデータと辞書コードデータとの比較方法を説明するための図解図である。
【図６】図６は図２に示すＲＡＭのメモリマップの一例を示す図解図である。
【図７】図７はＲＡＭに記憶される評価用テーブルデータの一例を示す図解図である。
【図８】図８は図２に示すＣＰＵの全体処理（メインルーチン）を示すフロー図である。
【図９】図９は図２に示すＣＰＵのコード化処理を示すフロー図である。
【図１０】図１０は図２に示すＣＰＵの文字特定処理の一部を示すフロー図である。
【図１１】図１１は図２に示すＣＰＵの文字特定処理の他の一部であり、図１０に後続するフロー図である。
【図１２】図１２は図２に示すＣＰＵの文字特定処理のその他の一部であり、図１０に後続するフロー図である。
【図１３】図１３は図２に示すＣＰＵの文字特定処理のさらに他の一部であり、図１０に後続するフロー図である。
【符号の説明】
【０１１３】
１０  …入力システム
１２  …文字入力装置
１６  …スイッチ
２０  …コンピュータ
３０  …ＣＰＵ
３４  …ＲＯＭ
３６  …ＲＡＭ
３８  …インターフェイス
４０  …ＣＣＤカメラ
【図１】
2007200186.tif 000003
【図２】
2007200186.tif 000004
【図３】
2007200186.tif 000005
【図４】
2007200186.tif 000006
【図５】
2007200186.tif 000007
【図６】
2007200186.tif 000008
【図７】
2007200186.tif 000009
【図８】
2007200186.tif 000010
【図９】
2007200186.tif 000011
【図１０】
2007200186.tif 000012
【図１１】
2007200186.tif 000013
【図１２】
2007200186.tif 000014
【図１３】
2007200186.tif 000015