(57)【特許請求の範囲】
【請求項１】
ペン入力が可能なコンピュータ・システムへの手書き文字入力とジェスチャ入力とを区別する方法において、
スタイラスによってコンピュータ・システムに入力された１組のストロークをストロークが入力されるたびに検出するステップと、
認識に先立って、手書き文字入力を示す第１の組の特性またはジェスチャ入力を示す第２の組の特性のいずれを有するかについて前記１組のストロークの各ストロークを各ストロークが入力されるたびに順次分析するステップと、
認識に先立って、前記各ストロークが分析されるたびに、前記分析されたストロークの前記第１の組の特性または前記第２の組の特性により現行の前記１組のストロークをジェスチャ入力または手書き文字入力に分類するステップと、
最後に分析されたストロークの特性により前記１組のストロークが最終的にジェスチャ入力または手書き文字入力のいずれに分類されるかに基づいて、前記１組のストロークについて特定のジェスチャまたは手書き文字としてのジェスチャ認識または手書き文字認識を行うステップと
を有する方法。
【請求項２】
前記分類するステップが、前記１組のストロークを不明入力として分類するステップを含むことを特徴とする、請求項１に記載の方法。
【請求項３】
前記分類するステップが、所定数のストローク後に、前記１組のストロークを手書き文字入力として分類するステップを含むことを特徴とする、請求項１に記載の方法。
【請求項４】
前記分類するステップが、最後に分析されたストロークが所定のタイプであることに応答して、前記１組のストロークをジェスチャ入力として分類するステップを含むことを特徴とする、請求項１に記載の方法。
【請求項５】
前記所定のタイプのストロークがタップ・ストロークであることを特徴とする、請求項４に記載の方法。
【請求項６】
前記１組のストロークを手書き文字入力として分類したことに応答して、前記１組のストロークを手書き文字認識だけに送るステップをさらに含むことを特徴とする、請求項１に記載の方法。
【請求項７】
前記１組のストロークをジェスチャ入力として分類したことに応答して、前記１組のストロークを認識エンジンに送るステップをさらに含むことを特徴とする、請求項１に記載の方法。
【請求項８】
前記認識エンジンで、認識したジェスチャを１次結果として含み、認識したテキスト文字を２次結果として含む結果データ構造を構築するステップと、
さらに処理するために結果データ構造をターゲット・アプリケーションに送るステップとをさらに含むことを特徴とする、請求項７に記載の方法。
【請求項９】
あるタイプの入力受入れ設定について、前記１組のストロークが入力されたウィンドウについて受け入れられる入力タイプに関するウィンドウ設定をテストするステップをさらに含むことを特徴とする、請求項１に記載の方法。
【請求項１０】
前記分析するステップが、ストローク間の分離距離を分析するステップを含み、
前記分類するステップが、分離距離が所定の距離を超えているという判定に応答して、前記１組のストロークを手書き文字入力として分類するステップを含むことを特徴とする、請求項１に記載の方法。
【請求項１１】
ストローク間の前記分離距離が水平方向にのみ分析されることを特徴とする、請求項１０に記載の方法。
【請求項１２】
前記分析するステップが、各ストロークのサイズを分析するステップを含むことを特徴とする、請求項１に記載の方法。
【請求項１３】
前記分類するステップが、分析したすべてのストロークが所定のサイズより大きい場合に前記１組のストロークをジェスチャ入力として分類するステップを含むことを特徴とする、請求項１２に記載の方法。
【請求項１４】
前記分類するステップが、
前記分析したストロークの総数をカウントするステップと、
前記分析したストロークのうち、所定のサイズを超えるストロークの数をカウントするステップとを含むことを特徴とする、請求項１に記載の方法。
【請求項１５】
プロセッサと、メモリと、ディスプレイと、ペン入力装置とを含み、手書き文字入力とジェスチャ入力とを区別するためのシステムにおいて、
ペン入力を手書き文字入力として認識する手書き文字認識エンジンと、
ペン入力をジェスチャとして認識する手書き文字認識エンジンと、
スタイラスによってコンピュータ・システムに入力された１組のストロークをストロークが入力されるたびに検出する手段と、
認識に先立って、手書き文字入力を示す第１の組の特性またはジェスチャ入力を示す第２の組の特性のいずれを有するかについて前記１組のストロークの各ストロークを各ストロークが入力されるたびに順次分析する手段と、
認識に先立って、前記各ストロークが分析されるたびに、前記分析されたストロークの前記第１の組の特性または前記第２の組の特性により現行の前記１組のストロークをジェスチャ入力または手書き文字入力に分類する手段と、
最後に分析されたストロークの特性により前記１組のストロークが最終的にジェスチャ入力または手書き文字入力のいずれに分類されるかに基づいて、前記１組のストロークについて特定のジェスチャまたは手書き文字として認識するために前記１組のストロークをジェスチャ認識エンジンまたは手書き文字認識エンジンのいずれかまたは双方に送る手段とを有するシステム。
【請求項１６】
前記分類する手段が、所定数のストローク後に、前記１組のストロークを手書き文字入力として分類する手段を含むことを特徴とする、請求項１５に記載のシステム。
【請求項１７】
前記分類する手段が、最後に分析されたストロークが所定のタイプであることに応答して、前記１組のストロークをジェスチャ入力として分類する手段を含むことを特徴とする、請求項１５に記載のシステム。
【請求項１８】
前記１組のストロークをジェスチャ入力として分類したことに応答して、前記１組のストロークをジェスチャ認識エンジンに送る手段をさらに含むことを特徴とする、請求項１５に記載のシステム。
【請求項１９】
前記１組のストロークが入力されたウィンドウについて受け入れられる入力タイプに関するウィンドウ設定をテストする手段をさらに含むことを特徴とする、請求項１５に記載のシステム。
【請求項２０】
前記分析する手段が、ストローク間の分離距離を分析する手段を含み、
前記分類する手段が、前記分離距離が所定の距離を超えているという判定に応答して、前記１組のストロークを手書き文字入力として分類する手段を含むことを特徴とする、請求項１５に記載のシステム。
【請求項２１】
前記分析する手段が、各ストロークのサイズを分析する手段を含むことを特徴とする、請求項１５に記載のシステム。
【請求項２２】
ペン入力が可能なコンピュータ・システムへの手書き文字入力とジェスチャ入力とを区別する方法を実行するプログラムを記録したコンピュータによる読み取り可能な記録媒体であって、前記方法が、
スタイラスによって前記コンピュータ・システムに入力された１組のストロークをストロークが入力されるたびに検出する手段と、
認識に先立って、手書き文字入力を示す第１の組またはジェスチャ入力を示す第２の組の特性のいずれを有するかについて前記１組のストロークの各ストロークを各ストロークが入力されるたびに順次分析するステップと、
認識に先立って、前記各ストロークが分析されるたびに、前記分析されたストロークの前記第１の組の特性または前記第２の組の特性により現行の前記１組のストロークをジェスチャ入力または手書き文字入力に分類するステップと、
最後に分析されたストロークの特性により前記１組のストロークが最終的にジェスチャ入力または手書き文字入力のいずれに分類されるかに基づいて、前記１組のストロークについて特定のジェスチャまたは手書き文字としてのジェスチャ認識または手書き文字認識を行うステップと
を有する記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、広くはデータ処理システムに関する。本発明は、ユーザがスタイラスを使用してテキスト及びジェスチャ・コマンドとして解釈すべき手書き文字及び記号を入力するような、マルチタスク処理ペン・コンピュータ・システムにおいて具体的に応用されるものである。
【０００２】
【従来の技術】
ペン・コンピュータは、入力装置としてスタイラス及びセンサを使用するコンピュータの１種である。ペン・ソフトウェア・サブシステムは、オペレーティング・システムに統合するかまたはオペレーティング・システムの付属物にすることができるが、スタイラス入力をマウス入力コマンド、手書き文字（テキスト）、またはジェスチャと呼ばれる手書き記号として認識するために、ペン入力を処理するものである。通常、ジェスチャは、ウィンドウを開くまたは閉じるなどの機能を呼び出すために使用する。
【０００３】
たとえば、ＯＳ／２というオペレーティング・システムのペン・サブシステムであるPen for OS/2は、ユーザがグラフィカル・ユーザ・インタフェース（ＧＵＩ）ウィンドウに文字を直接書き込めるようにするものであり、その文字はその後、認識のためにジェスチャ／手書き文字認識エンジンに送られる。ジェスチャと手書き文字とを区別するデフォルト方法の１つは、そのウィンドウが編集フィールドまたはテキスト入力ウィンドウなど、テキストを受け入れるものではない場合に、手書き形状をジェスチャとして扱うことにより、システムが使用するものである。
【０００４】
好ましいことに、ペン・オペレーティング・サブシステムは、コンピュータ・システムによって実行されているすべてのアプリケーションへのペン入力を促進することになり、そのうちのほとんどはスタイラス入力を「認識しない」。現在、典型的なアプリケーション・プログラムは、マウス入力とキーボード入力だけを受け入れるように作成されており、ペン入力によって可能になる機能豊富なプログラミング・インタフェースを認識していない。使いやすさを改善し、良好なヒューマン・ファクタを提供するためには、ペン・サブシステムによってこのようなペン非認識アプリケーションが、ユーザ・インタフェースの観点から、ペンを認識しペンの機能性を利用するアプリケーションのように見え、感じられることは、非常に好ましいことである。
【０００５】
Pen for OS/2は、手書き形状をジェスチャ記号としてまたは文字（テキスト）として認識するためのものである。ペンコンピューティングの出現以来、設計者はジェスチャとテキストの両方を正確に認識する認識エンジンの開発に奮闘してきた。数々の改良が実現されてきたが、最新の認識エンジンでも依然としてジェスチャとテキストを区別する際に問題が発生する。これは、一部のジェスチャと英字との形状が似ていることによる。実際には、システムが使用するジェスチャが非常に複雑でユーザフレンドリではないものでない限り、英字及び数字のストロークや形状の範囲のために、有用なジェスチャの多くは既存の英字との類似性をある程度備えることになる。
【０００６】
一例として、いずれのペン・オペレーティング・システムも、その有用性のために円のジェスチャをサポートしている。しかし、ワード・プロセッサのウィンドウ上に円を描く場合、システムは、ユーザが１）円のジェスチャを描くのか、２）ゼロを書くのか、３）大文字のＯを書くのか、または４）小文字のｏを書くのかを判断しなければならない。これと同じ曖昧さは、「フリック・ダウン」ジェスチャと呼ばれる単一のダウン・ストロークにも当てはまる。すなわち、フリック・ダウン・ジェスチャは、英字のｌか、英字のＩか、または数字の１かということになる。これ以外にも例はあるが、ジェスチャとテキストとを区別する際の難しさを実証するにはこの２つで十分である。
【０００７】
上記２つの例の曖昧さは、多くの場合、文字が書かれたコンテキストを調べることによって解決することができる。事実、適切に作成されたペン・アプリケーションは、所与のウィンドウの入力を数字、英字、英数字、またはジェスチャのみに制限することによって、それを解決する場合が多い。認識制約と呼ばれるように、認識エンジンから出力可能な結果を制限すると、認識の正確さが大幅に上昇する。ペン設計者が使用するもう１つの一般的な手法は、英字または数字のどの文字とも似ていないジェスチャ形状のライブラリを構築する方法である。残念ながら、これは、円、ダウン・フリック、脱字記号、左下、Ｘ、疑問符などの重要なジェスチャを除去してしまう。このようなジェスチャはいずれも直観的で覚えやすく容易に描けるものなので、これらを除去してしまうと使いやすさが損なわれる恐れがある。Pen For OS/2のユーザは、ヘルプ・ウィンドウを起動するためにどのウィンドウでも疑問符ジェスチャを書き込むことができる。問題は、メモを編集するときに発生する。すなわち、ヘルプ・ポップアップがなくてもユーザがピリオドを疑問符に変更できるかどうかである。Pen for OS/2では、キーボード入力を受け入れるすべてのウィンドウが、ジェスチャとテキストの両方の認識用として使用可能になっている。ペン・サブシステムはたいていアプリケーション環境を認識しないので、コンテキストによってジェスチャとテキストを区別することは非常に難しい。ペン認識アプリケーションでテキストを受け入れないウィンドウではこのような問題は発生しない。というのは、このようなウィンドウはジェスチャ専用認識に制限されているからである。
【０００８】
また、大文字を書いた後にピリオドまたは「タップ」を付けることにより英字ジェスチャを描くような２６通りの英字ジェスチャをPen For OS/2がサポートしていることも銘記するに値する。このタップは、英字ジェスチャと通常の英字とを区別する特徴である。しかし、場合によっては、このタップが曖昧さを持ち込むこともある。すなわち、それが大文字／小文字とピリオドであるかどうか、ということになる。
【０００９】
依然として残っている、重大な使いやすさの問題の１つは、正確に同じ文字であると思われるものを書いた後でユーザが別の結果を得ることもあるという点である。このようにユーザが認識結果を予測または制御できないことによって、フラストレーションのレベルは高くなり、生産性は低下する。残念ながら、より小さいサブセットの文字と記号に厳重に認識を制限するような先行技術の技法は、所与の状況、すなわち、ペン認識アプリケーションになるように適切に設計された場合のみ有効である。ペン認識ではない、一般に使用される汎用アプリケーションでは、先行技術がジェスチャと手書き文字とを予測的に区別できないことはユーザの妨げになっている。
【００１０】
本発明は、手書き文字入力からジェスチャ入力を区別するための先行技術の改良策である。
【００１１】
【発明が解決しようとする課題】
本発明の一目的は、システムがストローク入力をどのように処理または認識するかをユーザがあらかじめ把握できるようにするための小さい１組の非常に単純な規則をユーザに提示することにある。
【００１２】
【課題を解決するための手段】
本発明は、各ストロークが描かれたときにリアルタイムでそのストロークのカウント、サイズ、位置などのストローク特性に関する事前認識分析を行うことにより、認識精度を改善しようとするものである。各ストローク後、１組のストロークには手書き文字またはジェスチャのための重みが付けられる。このシステムでは、ジェスチャと手書き文字を区別するためにジェスチャしきいサイズを使用する。また、このシステムでは、ジェスチャ内のストロークの許容数を把握していることに依存して、この２通りの入力を区別するためにストローク・カウントも使用する。このカウント情報は、ジェスチャと手書き文字との間の１組のストロークに重みを付けるためにストローク・サイズ情報とともに使用することもできる。ストローク・サイズがジェスチャ対テキスト・サイズしきい値を超えると、その結果にはジェスチャのための重みが付けられる。ストローク間の「空白」とストロークの並置を検査することにより、ジェスチャ対テキストの判定を高い精度で行うことができる。
【００１３】
本発明の特徴における上記及びその他の目的は、添付図面ならびに以下の説明を参照することにより、より適切に理解されるだろう。
【００１４】
【発明の実施の形態】
本発明は、適当なペン入力認識サブシステムを備えた各種のオペレーティング・システム下の様々なコンピュータまたはコンピュータの集合で実行することができる。このコンピュータは、たとえば、パーソナル・コンピュータ、ミニ・コンピュータ、メインフレーム・コンピュータ、またはその他のコンピュータからなる分散ネットワークで動作するコンピュータなどにすることができる。具体的なコンピュータの選択は必要なディスク及びディスク記憶容量によってのみ制限されるが、ＩＢＭのＰＣシリーズのコンピュータは本発明で使用できる可能性が高い。ＩＢＭのＰＣシリーズのコンピュータのさらに詳細については、IBM PC 300/700 Series Hardware Maintenance（資料番号No. S83G-7789-03）及びUser's Handbook IBM PC Series 300 and 700（資料番号No. S83G-9822-00）を参照されたい。ＩＢＭでは、ペン入力用に自由スタイラスを備えたThinkPad 750Pを売り出している。また、ＩＢＭのパーソナル・コンピュータが動作可能なオペレーティング・システムの１つは、ＩＢＭのOS/2 Warp 3.0である。ＩＢＭのオペレーティング・システムOS/2 Warp 3.0の詳細については、OS/2 Warp V3 Technical Library（資料番号No. GBOF-7116-00）を参照されたい。前述のように、ＯＳ／２は、ペン・サブシステムとしてPen for OS/2 Warp、バージョン１．０３、部品番号No. 25H7380を提供しているが、これはＩＢＭから取り寄せることができる。
【００１５】
次に添付図面、特に図１をまず参照すると、本発明を実施することができるパーソナル・コンピュータ・システムのハードウェア・ブロック図の全体が参照番号１０によって示されている。システム１０は、中央演算処理装置（ＣＰＵ）１５とランダム・アクセス・メモリ１３とを含むプロセッサ１１を含む。システム１０は、ハード・ディスク記憶装置１７とフロッピー・ディスク装置１９という形式の追加メモリも含むことが好ましい。フロッピー・ディスク装置１９は、本発明のソフトウェア実施態様を含む、プログラム用のソフトウェアを記録可能なディスケット２１を受け入れられるようになっている。また、システム１０は、ディスプレイ２３、キーボード２５、マウス２７、ペンまたはスタイラス２９を含む、ユーザ・インタフェース・ハードウェア装置も含む。システム１０はプリンタ３１を含むことが好ましい。
【００１６】
タッチ画面の表面に対するスタイラスまたは指の位置の実際の検出は、本発明の範囲に含まれない。本発明を実施するために使用可能なスタイラスの位置を感知するために圧力、赤外線または可視光、音、電磁力または静電力を使用する、当技術分野で既知のタッチ検知装置はいくつかある。さらに、スタイラス及びスタイラス感知装置の動作に関する情報については、本出願人に譲渡され、参照により本明細書に組み込まれる、アラン・タネンバウム（Alan Tannenbaum）他による「Graphical User Interface with Gesture Recognition in a Multi-Application Environment」という名称の米国特許第５２５２９５１号を参照されたい。また、スタイラスの動きの感知に関する情報については、本出願人に譲渡され、参照により本明細書に組み込まれる、ジョン・エム・ゼッツ（John M. Zetts）による「Recognizing the Cessation of Motion of a Pointing Device on a Display By Comparing a Group of Signals to an Anchor Point」という名称の米国特許第５４０４４５８号を参照されたい。
【００１７】
本発明の好ましい実施態様の１つは、前述のように一般的に構成されたコンピュータ・システムのランダム・アクセス・メモリ内に常駐する複数組の命令セットである。コンピュータ・システムが要求するまで、この命令セットは、別のコンピュータ・メモリ、たとえば、ハード・ディスク・ドライブや、最終的にＣＤ−ＲＯＭ内で使用するための光ディスクなどの取外し可能メモリ、または最終的にフロッピー・ディスク・ドライブ内で使用するためのフロッピー・ディスクに格納することができる。当業者であれば、複数組の命令セットの物理的な格納によって、その上に電気的、磁気的、または化学的にそれが格納される媒体がコンピュータで読取り可能な情報を伝達するようにその媒体が物理的に変化することに留意されたい。命令、記号、文字などに関して本発明を記述する方が便利であるが、これらの用語及び同様の用語はいずれも適切な物理要素に関連するはずであることに留意されたい。さらに、本発明は、区別または判定、あるいはオペレータに関連する可能性のあるその他の用語に関して記述される場合が多い。本発明の一部を形成するような本明細書に記載する動作では、オペレータによるアクションはいずれも望ましいものではない。動作とは、電気信号を処理して他の電気信号を生成するようなマシン動作のことである。
【００１８】
次に図２を参照すると、同図には、本発明のペンベース・システムの主要ソフトウェア・システム構成要素の高レベル図が示されている。図２の下部では、ペン２９、マウス２７、キーボード２５からの出力信号がデバイス・ドライバ３３に接続されているが、このデバイス・ドライバはそれぞれの装置に低レベルの入出力サポートを提供するモジュールである。デバイス・ドライバ３３は事象をシステム待ち行列３５に入れる。システム待ち行列３５内の事象は、その後、プレゼンテーション・マネージャ３７によって処理され、プレゼンテーション・マネージャ３７は次にペン事象及びマウス事象を処理のためにペン拡張部３９に経路指定する。
【００１９】
本発明により構成された典型的なコンピュータ・システムでは、ペン認識アプリケーション４１とペン非認識アプリケーション４３の両方が動作する。ペン認識アプリケーションは、ペン入力を認識して処理するための固有の能力を備えている。すなわち、その開発者は、ペン入力をサポートするようにアプリケーションを設計している。ペン非認識アプリケーションは、ペン入力を認識するための固有の能力を備えていないものであり、通常、キーボードまたはマウスあるいはその両方の入力を認識して処理するだけである。したがって、オペレーティング・システムのペン拡張部３９は、ペン事象をペン認識アプリケーション４１に直接経路指定する。しかし、ペン非認識アプリケーション４３はペン入力を理解することができないので、システムは互換モジュール４５を含む。
【００２０】
互換モジュール４５は、ペン非認識アプリケーションのためにペン機能を提供するものである。たとえば、ユーザがペン非認識アプリケーションに手書き文字事象を入力した場合、ペン拡張部３９はこの事象を互換モジュール４５に経路指定し、次に互換モジュール４５がすべてのペン・ストロークをジェスチャ手書き文字認識エンジン４７に経路指定する。ジェスチャ手書き文字認識エンジン４７は、ペン・ストローク事象を処理し、認識結果を互換モジュール４５に返す。
【００２１】
認識事象がジェスチャである場合、互換モジュール４５はそれを認識事象送達サブシステム４９に経路指定し、そのサブシステムは、特定のジェスチャに応答してペン非認識アプリケーションでどのアクションを実行すべきかをユーザが判定できるようにセットアップしたプロファイル５１にアクセスする。任意で一部のツール５３を呼び出して、ペン非認識アプリケーション４３上で何らかのアクションを実行することもできる。たとえば、ポップアップ・キーボードと手書き入力パッドは、ペン非認識アプリケーション上で何らかのアクションを実行するかまたはペン非認識アプリケーションに入力を提供するようなツールの例である。互換モジュール４５に返された認識結果が手書き文字であると認識された場合、その結果のテキスト・ストリングは適切なペン非認識アプリケーション４３に直接経路指定される。
【００２２】
ストローク分析
図３は、ストローク・カウントによる好ましい実施例用のジェスチャ・セットを列挙したものである。記号ジェスチャ３００、３２５、３３５のストローク・カウントは一定であるが、英字ジェスチャ３４２、３５３、３６５、３７０のストローク・カウントは、どのようにしてユーザがその特定の大文字を書いたかに応じて、いくらか変化する。いずれの記号ジェスチャも４ストローク以上で構成されることはなく、英字ジェスチャは最小で２ストローク、最大で５ストロークを必要とすることが分かるだろう。このようなストローク・カウントの特性は、テキストとジェスチャとを区別する際に考慮されている。「なぐり書き」という用語は、ストローク入力のモーダル期間中にユーザが描いたストロークの集合を意味する。このモーダリティは、３秒間入力を止めるかまたはスタイラスをセンサから持ち上げることによって終了する。好ましい実施例ではいずれのジェスチャも５ストロークを超えないので、なぐり書きが５ストロークを上回る場合、認識結果は必ずテキストになる。当業者であれば、異なる１組のなぐり書きごとに別々の事前認識規則を使用することが容易に分かるだろう。
【００２３】
図４は、英数字に対して曖昧なジェスチャ記号を列挙したものである。本発明の一実施例では、ジェスチャとテキスト両方の認識モードを有するウィンドウでこれらのジェスチャを描いた場合、ユーザの通常の手書き文字サイズより大きいジェスチャをユーザが描かない限り、テキスト認識が行われることになる。
【００２４】
図５には境界ボックス・スコアの概念を示す。オブジェクト４００、４０５、４１０、４１５は、大文字のＨとピリオドの書き順を示している。ユーザが各ストロークを描くにつれて、各ストロークに関連する境界ボックスの「分離」が検査される。あるストロークが別のストロークから規定の距離以上離れている場合、そのストロークは「分離」されている。複数のストロークが互いに接触すると、それらの境界ボックスは、オブジェクト４２０、４２５、４３６、４３０の順に示すように組み合わされる。各ストロークが完了すると、ジェスチャまたはテキストとして、ストローク・カウント、ストローク・サイズ、ストローク分離、ストローク・タイプに基づいて現行のなぐり書きを分類するスコアが与えられる。分類が不確定の場合、「不明」というスコアを与えることができる。図５のＨ．は、不明４０１として始まり、テキスト４０２及び４０３に移行する。最終ストロークでは、タップ４０８によって英字ジェスチャの可能性がなくなるので、不明４０４としてスコアが付けられる。
【００２５】
好ましい一実施例では、なぐり書きに不明というスコアを与えると、そのなぐり書きは認識のためにジェスチャ認識エンジンとテキスト認識エンジンの両方に送られる。認識エンジンは、最良テキスト一致用に１つと最良一致ジェスチャ用に１つという２つの結果を生成し、テキスト結果を１次認識結果にする。１次としてのジェスチャ結果を備えたＨタップ・ジェスチャをユーザが作成するためには、Ｈを含むストロークをジェスチャしきい値より大きく描く必要がある。ジェスチャしきい値の設定は別の発明なので、ジェスチャしきい値の項で後述する。
【００２６】
図５の第２の例では、ジェスチャしきい値４８０を超える大きいストロークで「ｌｂｓ」と書かれているので、最初の２つのストローク４５０及び４５６はジェスチャ４５１及び４５２としてスコアが付けられる。しかし、最後のストローク４６２はジェスチャしきい値を超えないので、スコアはテキスト４５３に変更される。最後のストローク４６２はタップではないので、このなぐり書きは英字ジェスチャにはならず、３ストローク・ジェスチャ３３５を検査すると、３つのストロークはいずれも３ストローク・ジェスチャと見なせるように大きくなければならないことが分かる。これは、いずれの場合もユーザは大きく書くことを禁じられていないことを実証するものである。
【００２７】
図６及び図７は、ジェスチャしきい値より大きく描くことにより、ユーザが認識結果を制御する方法をさらに示すものである。ウィンドウ４８１内の疑問符４８２は、ピリオドを置き換えることにより、この疑問文の句読点エラーを訂正するためのものである。これは小さく書かれているので、疑問符文字４８５が生成される。より大きいストローク４８７を使用して後で描き直すと、本発明はそれにジェスチャとしてのスコアを付けるが、これは実行され、その結果、アプリケーションのヘルプ・ウィンドウ４８９内に表示される。
【００２８】
図８及び図９は、線ありフォント・サイズを設定するためのエンドユーザ・インタフェースを示している。フォント・サイズを設定することにより、ユーザは行手書き入力ウィンドウで使用する行間隔を設定する。ユーザが設定する間隔は、ユーザの通常の手書き文字サイズを適切に示すものである。高さと幅は５０％と２５％までそれぞれ拡大される。というのは、罫線なしウィンドウに書き込む場合、ユーザの手書き文字を制限する線が一切ないので、手書き文字が通常より大きくなる場合が多いからである。ジェスチャしきい値を設定する際の線ありフォント・サイズの使い方については、ジェスチャしきい値の項で以下に詳述する。
【００２９】
図１０は、報告すべき認識事象がある場合にペン・サブシステムによって構築され、ターゲット・アプリケーションに送られる、認識結果データ構造を示している。認識処理手順については図１６に詳しく示す。このデータ構造は１次結果６００と代替結果６１０のセクションに分割され、アプリケーションはいずれの認識結果でも自由に機能することができるが、推奨されるアクションは、アプリケーションが１次結果を使用することである。というのは、システムがその結果の方が高いと評価したからである。１次及び代替認識結果タイプ・データ・フィールドは、事前認識プロセスの結果に応じて、ジェスチャと手書き文字かまたは手書き文字とジェスチャでそれぞれ記入される。テキスト・ストリングまたはジェスチャ認識データ・フィールドは、そのセクションの結果タイプに応じて各セクションで記入される。なぐり書きポインタは、そのなぐり書きを構成する１組のストロークに関するハンドルである。
【００３０】
図１１は、矩形の対向する隅に位置する２つの直角座標（ｘ左、ｙ下）と（ｘ右、ｙ上）を調整することにより、矩形を拡大する方法を理解するのに役立つものである。この場合、（ｘ左、ｙ下）は、上方ストローク用の矩形の起点でもある。図１４に関連して以下に詳述するように、ストロークを受け取ると、そのストロークの上下の左端及び右端の範囲の境界を示すために境界ボックスが作成される。図２４〜２７に関連して以下に詳述するように、この境界ボックスは、ストロークの「分離」をテストするために使用する。境界ボックスは、合計０．０４インチになるようにボックスの両側に０．０２インチずつ加えることによって「拡大」される。２つのストロークの境界ボックスが交差する場合、これらは分離ストロークではないので、手書き文字ではなくジェスチャを示すものである。テキストは水平に書かれる傾向があるので、分離ストロークは手書き文字を示すことになる。
【００３１】
本発明を効果的にするために、本出願人はタップ・ストロークのサイズを縮小した。先行技術のタップ・サイズ８１０を図１２に示す。ペン・タップは、マウス・ボタンのクリックに似ており、選択やウィンドウ・ナビゲーション中に頻繁に使用される。大きいタップ・サイズを定義することにより、ユーザは、タップ中に少量の間違った動きをしても許される。タップ・サイズを拡大すると、ユーザは少々雑にタップを行えるようになり、迅速にタップすることも容易になる（迅速タップは小さいストロークを発生する傾向がある）。しかし、タップ・サイズを大きくすると、コンマ、引用符、アポストロフィなどの小さい文字はいずれもタップのように見え始めるという副作用がある。ユーザによっては、「ｏ」や「ｅ」などの小文字にタップ・ストロークとしてのタグが付けられるほど、手書き文字が小さいユーザもいる。タップを正確に区別することは本発明の要件の１つなので、本発明では、認識モードがテキストを含む場合にタップ・サイズを縮小する方法を取り入れている。タップ・サイズの縮小によって、ユーザはもっと注意深くタップしなければならなくなるが、その結果、ｉの点を打ち、ピリオド、コロン、セミコロンを入力する際に注意するので、テキスト認識を向上させる効果がある。
【００３２】
図１２の最小ジェスチャ・サイズ８００またはジェスチャしきい値は、通常、０．１５６インチであり、非常に小さいストロークをシステムがジェスチャとして解釈しないようにするためにシステムが必要とするものである。選択などのためにスタイラスでタップする場合、ユーザは、持ち上げる前にわずかにペンの先をスライドさせることが非常に多い。ペンのスリップは故意ではなかったものの、結果的にストロークがタップより大きくなることが多く、その場合、システムはそれをタップとして解釈せず、むしろジェスチャ及びテキスト認識エンジンに送られる小さいストロークとして解釈する。この問題は、ディジタイザ上に滑りやすい表面を備えたペン・コンピュータでは特に一般的なものである。このようないわゆる「マイクロ・ジェスチャ」は問題が多いので、最小ジェスチャ・サイズが課せられている。
【００３３】
図１３は、ユーザがスタイラスで触れたことをペン・サブシステムが検出したときに呼び出される論理の詳細を示している。ステップ９００では、システムがすでに書込みモードに入っているかどうかを確認するために検査が行われる。書込みモードに入っていない場合、ステップ９０５で着地メッセージがアプリケーションに送られ、着地事象をそれに通知し、どのようにその事象を処理すべきかをアプリケーションが指定できるようにする。このメッセージの処理中、アプリケーションは認識のモードを指定することができる。メッセージの送信後、ステップ９１０では、アプリケーションが認識モードを設定したかどうかを確認するためのテストが行われる。設定していない場合、ステップ９１５では、着地ウィンドウ用の適切な認識モードを決定するためのルーチンが呼び出される。次にプロセスは、図１５に詳細を示す一連のテストに移行し、ウィンドウがテキスト入力専用か、ジェスチャ入力専用か、またはテキスト入力とジェスチャ入力が可能かを判定する。図１３に示すプロセスに戻ると、ステップ９３０では、着地ウィンドウですべての認識が不能になっているかどうかを確認するためのテストが行われる。不能になっている場合、システムは、ステップ９４０で単に着地事象をマウス・ボタン事象として処理し、ステップ９５０で終了する。
【００３４】
そうではない場合、システムは、ステップ９３５でストローク・カウントをクリアし、ステップ９６０で第１のストロークの第１の点として着地座標を保管し、ステップ９７０及び９８０でストローク境界ボックスを初期設定することにより、入力ストロークの準備を行う。次にルーチンはステップ９９０で終了し、その後のスタイラス入力を待つ。
【００３５】
図１４は、スタイラスがディジタル化センサと接触している間にスタイラスの動きが検出されるたびに呼び出されるペン運動ルーチンを示している。新しい各座標を受け取ると、その座標は、現行のストローク境界ボックス外にあるかどうかを確認するために検査される。ステップ１０００〜１０７０に示す動作は、座標のＸ値をボックスの左端及び右端の値と比較し、座標のＹ値をボックスの一番上及び一番下の値と比較するプロセスの詳細を示している。ストロークがその外側にずれ続けると、境界ボックスが調整される。
【００３６】
ステップ１０００では、座標のＸ値がボックスの左境界の外側にあるかどうかを判定するためにテストが行われる。システムが書込みモード１００２になっていない場合、ユーザが書込み１００３を開始したかどうかを判定するために、スタイラスの動きが初期着地点から監視される。その動きが十分な長さ、通常は０．０６０インチのものである場合、ユーザは書込みを開始したと見なされ、システムは書込みモード１００４に入る。その場合、ステップ１０１０で境界が座標のＸ値に設定される。ステップ１０２０では、座標のＸ値がボックスの右境界の外側にあるかどうかを判定するためにテストが行われる。外側にある場合、ステップ１０３０で境界が座標のＸ値に設定される。ステップ１０４０のテストは、座標のＹ値がボックスの下境界の外側にあるかどうかを判定するものである。外側にある場合、ステップ１０５０で境界が座標のＹ値に設定される。座標のＹ値がボックスの上境界の外側にあるかどうかというテストは、ステップ１０６０で行われる。これが真である場合、ステップ１０７０で境界が座標のＹ値に設定される。このプロセスはステップ１０８０で終了する。
【００３７】
図１５には、ウィンドウの認識モードがテキスト専用か（ステップ１１１５）、ジェスチャとテキストか（ステップ１１３０）、ジェスチャ専用か（ステップ１１５５）のいずれにするべきかを判定し、ウィンドウの認識モードを設定する一連のテストが示されている。ウィンドウがテキスト入力またはジェスチャ入力あるいはその両方のいずれを受け入れるかを判定するために使用可能な基準の１つは、ユーザがエンドユーザ・インタフェースを介して所与の認識モードを規定したかどうかである。実際の入力に使用するウィンドウは、すべて認識が不能になっている。これは、流れ図にプロセス・ステップ１１６０として示されているが、代替実施例では判断ブロックにすることもできる。次に、ステップ１１１０、ステップ１１３５、またはステップ１１５０で認識モードが適切に設定される。しかし、タップによって区別される英字ジェスチャを使用可能な好ましい実施例でテキスト認識が可能になっている場合、ステップ１１２５または１１４５で許容タップ・サイズも縮小される。タップのサイズを縮小すると、システムはより容易にタップと小さい小文字とを区別できるようになると、本出願人は判断している。プロセスはステップ１１７０で復帰する。
【００３８】
図１６は、認識結果を処理する論理を示している。ステップ１２００でテストするようにジェスチャ認識とテキスト認識の両方が行われ、ステップ１２０５でテストするように境界ボックス・ストアがジェスチャである場合、ステップ１２１０で１次結果がジェスチャに設定される。代替結果はステップ１２２０でテキストに設定される。これに対して、境界ボックス・スコアが手書き文字である、すなわち、ジェスチャではない場合、ステップ１２１５で１次結果がテキストに設定され、ステップ１２２５で代替結果がジェスチャに設定される。図１０に関連して前述したように、認識結果データ構造がターゲット・アプリケーションに送られる。ステップ１２３０で認識結果がジェスチャ専用である場合、ステップ１２３５で１次結果がジェスチャになり、ステップ１２４０で代替結果がヌルになる。そうではない場合、ステップ１２４５で１次結果がテキストに設定され、ステップ１２５０で代替結果がヌルに設定される。ステップ１２５５では、新たに構築した認識結果ブロックを含むWM_RESULTメッセージがアプリケーションに送られ、その後、ステップ１２６５でアプリケーション応答が処理される。プロセスはステップ１２７０で復帰する。
【００３９】
ターゲット・アプリケーションからの応答を処理するためのプロセスは図１７に示す。ステップ１３１０では、アプリケーションが認識結果を処理したかどうかを確認するためのテストが行われる。処理していない場合、ステップ１３２０で、ペン・サブシステムによる１次結果または代替結果の処理をアプリケーションが必要としているかどうかを判定するためにアプリケーション応答が検査される。デフォルトでは、ステップ１３３０で１次結果が処理されるが、その現行環境にとって代替結果の方が適しているとアプリケーションが判定した場合、アプリケーションはデフォルト挙動を指定変更し、ステップ１３４０で代替結果を処理するように指定することもできる。ステップ１３５０で結果がテキストである場合、キーボードによって生成された場合と同様に文字が現れるように、ステップ１３６０でテキスト・ストリングがターゲット・アプリケーションに送られる。そうではない場合、ステップ１３７０でジェスチャ・コマンドが実行される。ステップ１３１０のテストに応じてプロセスが結果を処理できた場合、システムはステップ１３８０で復帰し、それ以上のアクションは一切行われない。
【００４０】
図１８には、書込みタイムアウトを設定するためのプロセスが示されている。背景としては、ユーザが書込み入力を完了したときにシステムがそれを検出できるように、ユーザが１つのストロークを完了するたびに書込みタイマが始動する。書込みを続行するためにユーザがスタイラスでもう一度着地した場合、書込みタイマは取り消され、システムは現行のストロークの集合に新しいストロークを付加する。タイマが時間切れになると、それは、ユーザが休止し、したがって、書込み入力を完了したことを示す。書込みタイムアウトには３．０秒という値を使用する。というのは、大量のテキストを入力するときにユーザがウィンドウの一方の側から反対側に移動するのに２．５秒かかることがあることがテストによって分かっているからである。１つまたは２つのストローク・ジェスチャが認識され実行されるまで待つには３秒の書込みタイムアウトでは長すぎるので、別のジェスチャ・タイムアウト値が維持されている。このジェスチャ・タイムアウトは０．９秒である。通常、認識モードがジェスチャとテキストである場合、システムはそれより長い待機期間を使用しなければならない。というのは、ユーザがジェスチャ入力中なのかまたは手書き入力中なのかが明白ではないからである。
【００４１】
次に図１８を参照すると、書込みタイムアウト値とジェスチャ・タイムアウト値の両方について、ステップ１４００とステップ１４０２でそれぞれ問合せが行われる。ステップ１４０４でテストしたように、ストローク・カウントが６未満である場合、書込みタイムアウトは認識モードに応じて設定される。ステップ１４０５でモードがジェスチャである場合、ステップ１４１０でジェスチャ・タイムアウト値が使用される。ステップ１４１５でモードがテキストである場合、ステップ１４２０で書込みタイムアウトが使用される。ステップ１４２５は、認識モードがテキストとジェスチャの混合であるかどうかを判定する。混合ではない場合、ステップ１４３０で書込みタイムアウトが使用される。ステップ１４２５で判定したように、モードが混合である場合、境界ボックス・スコアに基づいて判断が行われる。ステップ１４３５で境界ボックス・スコアがジェスチャである場合、ステップ１４４０でジェスチャ・タイムアウトが使用される。ステップ１４４５で境界ボックス・スコアが不明である場合、ステップ１４５０でジェスチャ・タイムアウトに５００ミリ秒を加えた値に等しいタイマ値が使用される。この余分な０．５秒により、ユーザは、テキストを書き込んでいる場合に別の単語を開始するのに十分な時間が与えられる。ユーザがテキストを書き込んでいない場合、この余分な時間は、わずかなジェスチャ認識遅延を追加するだけである。そうではない場合、スコアはテキストになり、ステップ１４５５で書込みタイムアウトが使用される。ステップ１４０４で判定したように、ストローク・カウントが５を上回る場合、デフォルトとして完全な３．０秒値を使用するような書込みタイムアウトにするための調整は一切行われれない。このように境界ボックス・スコアに基づいて書込みタイムアウトを動的に設定する方法により、ユーザ・インタフェースの応答性は高くなり、ユーザは一連のジェスチャ・コマンドを迅速に連続して実行することができる。
【００４２】
ジェスチャまたはテキスト文字の後、ユーザは、タッチ画面からスタイラスを持ち上げる。離昇事象の検出時に行われるプロセスについては図１９に詳細に示す。離昇後、ステップ１５００でストローク・カウントが増分される。ステップ１５０１では、着地時に設定したタップ・サイズを使用して、それがタップであるかどうかを確認するためにストロークが検査される。次にステップ１５０２で現行の境界ボックスが処理され、ストロークの集合を進行中のテキストまたはジェスチャとして分類する。
【００４３】
ステップ１５０４では、これが第１のストロークであるかどうかを判定するためにテストが行われる。ステップ１５０５で判定したように、このストロークがタップである場合、ユーザはステップ１５３０でマウス・エミュレーションを必要とし、システムはステップ１５５５で復帰する。第１のストロークがタップではない場合、ステップ１５１０で最小ジェスチャ・サイズと照らし合わせてストロークの長さが検査される。この最小ジェスチャ・サイズについては、図１２に関連して前述した通りである。好ましい一実施例の最小ジェスチャ・サイズは、通常、０．１５６インチ程度であり、ペン・サブシステムでは、非常に小さいストロークがシステムによってジェスチャとして解釈されないようにすることが必要である。第１のストロークがジェスチャしきい値未満であり、ステップ１５１５で現行の認識モードがジェスチャである場合、ステップ１５３０でマウス・エミュレーション・プロセスが行われる。そうではない場合、ステップ１５２０で認識モードがテキストとジェスチャの両方であれば、ステップ１５２５で認識モードがテキスト専用に変更される。というのは、最小サイズ未満のストロークでジェスチャを開始することができないからである。次に、ステップ１５４０でストロークの集合に現行ストロークが追加されるが、これは、この場合、第１のストロークである。ステップ１５４５では、図１８に関連して前述したように書込みタイムアウトを調整するためのサブルーチンが呼び出される。書込みタイムアウトの調整後、ステップ１５５０でシステムは書込みタイムアウトを設定し監視する。次に、ステップ１５５５でプロセスが終了する。
【００４４】
この時点で、ユーザは単一ストロークを描いている。ユーザがもう一度スタイラスで着地する場合、図１３に戻ると、ステップ９００でシステムはすでに書込みモードになっているので、ステップ９６０で新しい着地点がもう一度保管され、ステップ９７０及び９８０で境界ボックスが再初期設定される。新しい点が受け取られると境界ボックスが更新され、最終的に離昇が行われる。図１９に示すように、離昇処理中は、ステップ１５００でタップの有無が検査され、ステップ１５０２で境界ボックスが処理される。
【００４５】
ストロークの集合を処理するためのプロセスについては、図２１、図２２、図２３に詳細に示し、後で説明する。図１９は、ステップ１５４０で「なぐり書き」の集合に各ストロークが追加されたときの各ストロークごとのプロセスを示している。５つのストロークを受け取った後、その結果は、好ましい実施例で１組のジェスチャが与えられた場合にジェスチャにはなりえず、境界ボックスの処理と書込みタイムアウトの調整が終了する。最終的に、ユーザは書込みを停止するので、書込み事象の終了を処理しなければならない。
【００４６】
書込み事象の終了のためのプロセスについては、図２０に関連して以下に説明する。まず、ステップ１６００でストロークの集合のすべてについて「インキ抜き」を行う。これは、スタイラスの経路が表示されなくなることを意味する。ステップ１６０５では、システムが書込みモードから抜け出し、ストロークの集合を終了する。
【００４７】
次に、ステップ１６１０、１６３０、１６４０で現行の認識モードが、ジェスチャか、テキストか、ジェスチャとテキストかがそれぞれテストされる。現行の認識モードに応じて、ステップ１６２０またはステップ１６５０でジェスチャまたはテキスト認識エンジンが呼び出され、関連の認識を実行する。
【００４８】
ステップ１６４０で判定したように、ジェスチャとテキスト両方の認識モードである場合、ステップ１６５５で描かれたストロークが５ストロークを上回るかどうかを確認するために、まずストローク・カウントが検査される。上回る場合、このストロークはテキストに違いないので、ジェスチャ認識エンジンは迂回され、ステップ１６７０でテキスト専用認識が行われる。ステップ１６５５でカウントが５以下である場合、境界ボックス・スコアがテストされる。ステップ１６６０でスコアがジェスチャでも不明でもない場合、もう一度ジェスチャ認識が迂回され、ステップ１６７０でテキスト専用認識が行われる。このような場合、境界ボックス・スコアは、コンピュータの使用上集中的なジェスチャ認識プロセスを除去することにより、認識プロセスの速度を上げる働きをする。ステップ１６６０で境界ボックス・スコアがジェスチャまたは不明である場合、ステップ１６６５及び１６７０のジェスチャ認識とテキスト認識の両方がそれぞれ行われる。当業者であれば、境界ボックス・スコアがジェスチャである場合、手書き文字認識を回避できることが分かるだろうが、本出願人の経験によれば、速度の上昇は代替としてテキスト入力を廃棄する可能性に値しないものである。ステップ１６８０では認識エンジンからの結果が処理される。プロセスはステップ１６９０で復帰する。
【００４９】
図２１、図２２、図２３は、「なぐり書き」またはストロークの集合のうちの最初の５ストロークのそれぞれを処理する論理の流れを示す図である。好ましい実施例では、６ストローク以上で構成されるジェスチャ形状がないので、ステップ１７００でテストした６ストロークの収集後、境界ボックス処理は一切行われない。プロセスはステップ１７０５で復帰する。次に、１７１０でｘ右からｘ左を引き、１７１５でｙ上からｙ下を引くことにより、それぞれ境界ボックスの幅と高さの計算が行われる。境界ボックスの幅と高さの両方は、１７２０でジェスチャしきい値の幅及び高さと照らし合わせて検査される。幅と高さの両方は、ステップ１７２０でジェスチャしきい値のＸ値及びＹ値と照らし合わせて検査される。このプロセスについては、図２８に関連して以下に詳述する。
【００５０】
現行の境界ボックスがジェスチャしきい値を超える場合、ステップ１７２５及び１７２７でテストしたように、現行ストロークがなぐり書きの第１のストロークであるかどうかに応じて、大ストローク・カウントはステップ１７３５で１に設定されるか、またはステップ１７３０で増分される。１７２０で境界ボックスがジェスチャしきい値より小さく、１７２７で現行ストロークがなぐり書きの第１のストロークである場合、大ストローク・カウントは１７３３で０に設定される。
【００５１】
ストロークをサイズについて検査した後、ステップ１７４０でそれが手書き文字を示す分離ストロークであるかどうかを判定するためにさらに分析が行われる。分離ルーチンの説明については、図２４、図２５、図２６に関連して以下に示す。この分離ルーチンは、なぐり書きの後続ストロークが処理された後に続く。第１のストロークの場合、ステップ１７４５のテストは真になる。というのは、これが第１のストロークであり、図２２に示すプロセス・ステップに移行するからである。
【００５２】
図２１では、ステップ１７２０で境界ボックスのサイズがジェスチャのＸ／Ｙしきい値と比較され、そのサイズがしきい値を超える場合、ステップ１７３０で大ストローク・カウンタが増分される。ステップ１７４０では、第２のストロークが第１のストロークから分離しているかどうかを判定するために、分離ルーチンの検査が呼び出される。分離テスト・プロセスを理解するためには、図２４、図２５、図２６に関する説明を参照されたい。
【００５３】
分離テスト・ルーチン後、プロセスはステップ１７４５に復帰し、そこで現行ストロークが第１のストロークであるかどうかを判定するための検査が行われる。第１のストロークである場合、プロセスは図２２のＡに移行する。好ましい実施例では、ステップ１７５０でストローク２〜５について境界ボックス・スコアが必ずテキストに事前設定される。これは、故意ではない一部のジェスチャ・コマンドの結果から回復するより、ウィンドウに文字を挿入したことから回復する方がずっと容易であるからである。また、ユーザには、ストロークをジェスチャとして認識されたことを確認する、すなわち、ジェスチャしきい値より大きいストロークを描く確実な方法がある。テスト１７５５では、ストローク・カウントが２であるかどうかが判定される。２である場合、プロセスは図２２のＢに移行する。テスト１７６５では、ストローク・カウントが３であるかどうかが判定される。３である場合、プロセスは図２３のＣに移行する。３ではない場合、プロセスは図２３のＤに移行する。
【００５４】
図２２を参照すると、ステップ１８１０では大ストローク・カウントが検査される。第１のストロークが大きい場合、ステップ１８１５で境界ボックスにはジェスチャとしてのスコアが付けられる。そうではない場合、ステップ１８２０で不明としてのスコアが付けられる。小さいサイズまたは平均サイズの単一ストロークのみの場合、ユーザが意図していたのがジェスチャであるかまたは手書き文字であるかは、同程度の可能性になる。次にステップ１８３０でこのサブルーチンは離昇ルーチンに復帰する。
【００５５】
図２１のステップ１７５５によって判定したように第２のストロークの場合、ステップ１８６０でそれがタップであるかどうかを判定するためにそのストロークがテストされる。英字ジェスチャを使用する好ましい実施例では、最後のストロークとしてのタップはジェスチャの特徴の１つである。２６通りの英字ジェスチャに加え、チェックマーク・タップ、上向き脱字記号タップ、疑問符がある。ストロークがタップではない場合、ステップ１８７５で境界ボックス・スコアがテキストに設定される。ステップ１８８５では、両方のストロークがジェスチャしきい値より大きいかどうかを立証するためのテストが行われる。大きい場合、そのなぐり書きは２ストローク・ジェスチャであり、境界ボックス・スコアはジェスチャに設定される。これは、第２のストロークがタップではない場合は２つのストロークがほぼ同じ長さでなければならないという２ストローク・ジェスチャ要件を前提とする。ステップ１８６０で現行ストロークがタップである場合、ステップ１８７０で大ストローク・カウントが非ゼロ値であるかどうかがテストされる。第１のストロークが大きい場合、ステップ１８８０でジェスチャというスコアが付けられる。プロセスはステップ１８９５で呼出しルーチンに復帰する。
【００５６】
第３、第４、第５のストロークに関する境界ボックス処理については図２３に示す。分離矩形カウントが考慮されているので、この処理はより複雑になっている。図３には、３ストローク・ジェスチャが列挙されている。好ましい実施例では、英字ジェスチャではない３ストローク・ジェスチャが６通り存在するが、システムでは、このような６通りのジェスチャを作成する場合に３つのストロークがいずれも大きくなければならない。第３のストロークがタップである場合、分離を検査する必要性が効力を発揮する。というのは、２６通りの英字ジェスチャのうちの１３通りは２つのストロークと１つのタップで描くことができ、英字ジェスチャとテキストとが曖昧であるからである。２ストローク処理と同様に、ステップ１９１０でストロークがタップであるかどうかが検査され、現行ストロークがタップではない場合、ステップ１９０５で境界ボックス・スコアがテキストに設定される。ステップ１９２５では、３つのストロークがいずれも大きいかどうかを判定するために大ストローク・カウントがテストされる。いずれも大きい場合、ステップ１９３５でスコアがジェスチャに設定される。ステップ１９１０で現行ストロークがタップである場合、ステップ１９２０で分離ボックス・カウントの値が２またはそれ以上であるかどうかがテストされる。カウントが２またはそれ以上である場合、ステップ１９１５でスコアがテキストに設定される。そうではない場合、曖昧さのため、ステップ１９３０で境界ボックス・スコアが不明に設定される。ステップ１９４０における大ストローク・カウントの後続テストは、曖昧さを解決するために役立つものである。少なくとも１つの大ストロークがある場合、ステップ１９３５で境界ボックス・スコアがジェスチャに変更される。プロセスは離昇ルーチンに復帰する。
【００５７】
図２３のＤ入口点は、第４と第５のストロークの場合を処理するものである。好ましい実施例では、６通りの４ストローク・ジェスチャが考えられ、いずれもタップ・ストロークで終了する。したがって、この実施例では、ステップ１９６０で判定したように第４のストロークがタップではない場合、ステップ１９５５でテキストという最終スコアが与えられる。ステップ１９７０で第４のストロークがタップであり、２つ以上の分離矩形が存在する場合、このストロークは確実にテキストなので、ステップ１９６５でそのようにスコアが付けられる。そうではない場合、ステップ１９８０で境界ボックス・スコアが不明に設定される。第４のストロークの場合、大ストロークについて通常行われるテストは、ステップ１９７５で曖昧さが存在し、境界ボックス・スコアが不明である場合のみ行われる。少なくとも１つの大ストロークが存在する場合、ステップ１９８５で境界ボックス・スコアがジェスチャに変更される。ただし、ユーザが非常に大きく書いても、第４のストロークがタップでなければ、そのストロークはテキストとしてのスコアが付けられることに留意されたい。第５のストロークについても同じことが当てはまる。好ましい実施例では、５ストローク・ジェスチャは１つだけであり、それはＥ．（Ｅタップ）ジェスチャである。プロセスは、図１９に関連して前述した離昇プロセスに復帰する。
【００５８】
図２４、図２５、図２６は、分離テスト・プロセスの詳細を示している。分離テストは、なぐり書きの最初の４ストロークについて行われることが好ましい。ストローク・カウントが４を上回る場合、ステップ２０００のテストにより、ユーザはステップ２００５で離昇プロセスに復帰する。好ましい実施例で定義されている５ストローク・ジェスチャは１つだけ、すなわち、Ｅ．（Ｅタップ）ジェスチャだけなので、それをテキストと区別するために第５のストロークの境界ボックスを処理する必要はない。以下に詳述する分離テスト・プロセスを要約すると、最初の４ストロークは、水平寸法についてのみ、分離または間隔が検査される。これは、英語や多くの言語が水平に書かれるからである。テキストは水平に広がる特徴を備えているが、ジェスチャにはない。この規則のあまり重要ではない例外としてはアップ及びダウン・フリック・ジェスチャがあり、これらはわずかな水平変位で描くこともできるが、この技法に対して悪い影響は一切及ぼさない。分離または水平間隔のテストを行う場合、分離とは、ディスプレイの垂直軸全体に沿って少なくとも０．０４０インチだけ分離したストロークであると定義される。０．０４０インチの距離はディスプレイ上での２〜４ペルと同等である。現在、売り出されているペン・ディジタイザは、通常、２００〜１５０ドット／インチの解像度を有し、ストローク間の空間距離を非常に正確に決定することができる。間隔が０．０４未満のストロークが接触していると見なされる理由は、ユーザの手書き文字の粗雑さに対処するためである。「ｔ」または「Ｈ」に横線を入れる場合、その横棒は垂直ストロークの前から始まり、Ｈ．（Ｈタップ）ジェスチャが「ｌｔ．」または「Ｉｔ．」になる場合が多い。
【００５９】
最初の４ストロークを描くと、それらは分離矩形によって表された別々のエンティティに分割される。新しいストロークを１つずつ処理するごとに、そのストロークの境界ボックスは、それが接触している他のストロークの境界ボックスと結合される。４つのストロークを描いた場合、分離矩形の最小数は１になるはずであり、４つの境界ボックスがいずれも接触していない場合には最大数が４になるはずである。新しいストロークがそれと接触する他のストロークと結合された後、それらが依然として分離しているかどうかを確認するために分離矩形がテストされる。分離矩形が拡大して他の分離矩形と接触すると、それらは結合され、分離矩形の数が低減される。
【００６０】
この論理を検査すると、プロセスは、ステップ２０１０でストローク間隔値または０．０４０インチと等しい量だけ境界ボックスを水平に拡大することから始まる。この拡大プロセスについては、図１１に関連して前述した通りである。この矩形は、矩形の対向する隅に位置する２つの直角座標（ｘ左、ｙ下）と（ｘ右、ｙ上）を調整することにより、拡大される。好ましい一実施例の（ｘ左、ｙ下）は矩形の起点でもある。
【００６１】
ステップ２０１５で第１のストロークを受け取ると、それはステップ２０３０で分離矩形として保管される。分離矩形のカウントはステップ２０５０で１に設定される。次にステップ２０２０で第２の境界ボックスが処理され、ステップ２０３５でそれらが交差するかどうかを確認するために境界ボックスと第１の分離矩形がテストされる。交差する場合、ステップ２０５５で２つの矩形を合体または結合するために共通システム機能を呼び出すことにより、それらが結合される。第２の境界ボックスが分離している場合、ステップ２０４０で第２の分離矩形が形成され、ステップ２０４５で分離矩形の数が増分される。
【００６２】
ステップ２０２５のテストは、テストすべき第３のストロークがあるかどうかを判定するものである。ある場合、図２５で第３の境界ボックスが処理される。既存の分離矩形が１つだけ存在する場合、ステップ２１０５で２つが交差するかどうかを確認するためにテストが行われる。交差する場合、それらはステップ２１２５で結合される。そうではない場合、ステップ２１１５で第２の分離矩形が形成される。ステップ２１３５では分離矩形の数が増分される。
【００６３】
ステップ２１００で複数の分離矩形が存在し、ステップ２１１０で第３の境界ボックスがいずれか１つと交差していない場合、ステップ２１２０で第３の分離矩形が形成される。ステップ２１３０では分離矩形のカウントが増分される。ステップ２１４０で第３の矩形が既存の矩形の１つと交差する場合、それらが接触していれば、ステップ２１４５で第３の矩形が第１の分離矩形と結合される。また、ステップ２１５０でそれらが接触していれば、ステップ２１５５で第３の矩形が第２の分離矩形と結合される。次に、第３の境界ボックスの処理後、ステップ２１６０でそれらが接触しているかどうかを確認するために、残りの２つの分離矩形がテストされる。ステップ２１６０でそれらの分離矩形が接触していると判定された場合、ステップ２１６５でそれらが結合される。分離矩形のカウントはステップ２１７０で減分される。
【００６４】
第４の境界ボックスを処理する場合には、同様の方法を使用する。図２６では、３つの分離矩形が存在する場合に多数のテストを行わなければならないので、個別ステップの代わりにソフトウェア・ループを使用して、この処理を示している。図２６では、ステップ２２００で第４の境界ボックスが既存の分離矩形のいずれかと交差しない場合、ステップ２２２０で境界ボックスが新しい分離矩形として保管され、ステップ２２３０で分離矩形のカウントが増分される。ステップ２２００で第４の境界ボックスが１つまたは複数の分離矩形と交差する場合、ステップ２２１０からステップ２２４０までのループに入り、ステップ２２４０で現行の境界ボックスはステップ２２３５でそれが接触する各分離矩形と結合される。すべての既存分離矩形と照らし合わせて境界ボックスをテストした後、別のループに入り、各分離矩形が他の分離矩形の１つと接触しているかどうかを確認するために、ステップ２２６０で各分離矩形が検査される。接触している場合、ステップ２２６５で２つの接触矩形が結合される。ステップ２２６５で２つの分離矩形が１つに結合されるたびに、ステップ２２７０で分離矩形のカウントが減分される。ルーチンはステップ２２７５で復帰する。
【００６５】
図２７には、境界ボックスを水平方向に拡大するためのプロセスが示されている。これは、ステップ２３１０で境界ボックスの左側から値の半分を引き、ステップ２３２０で右側に半分を加えることによって実施される。境界ボックスを拡大すると、それらが０．０４０インチというストローク空間値より大きい距離だけ分離されているかどうかをテストすることが容易になる。境界ボックスを同等に拡大するために、２３２０でストローク空間の半分、すなわち、０．０２０インチが境界ボックスのｘ右値に加えられる。境界ボックスの左側を拡大するためには、２３１０で境界ボックスのｘ左値から０．０２０を引けるように負の方向に移動することが必要である。両側を０．０２０インチずつ拡大することにより、２つの隣接境界ボックスが接触しない場合、それらは元々０．０４０インチを上回る距離だけ分離されていたことを意味する。ステップ２３３０で境界ボックスが依然としてディスプレイの境界内にあることを確認するためにｘ左値が検査される。ステップ２３４０でそれが負になる場合、境界ボックスの左境界が０に設定される。次に、ステップ２３５０でｙ下値が０に設定され、ステップ２３６０でｙ上が最大センサ高に設定され、矩形の交差及び合体を行うのがより容易になる。ただし、好ましい実施例では、垂直間隔は検査されず、重要ではないことに留意されたい。これは、ユーザが水平方向にのみ書くことを想定しているからである。
【００６６】
ジェスチャしきい値
ジェスチャ記号とテキストとの曖昧さの解決を支援するため、また認識プロセスに対するユーザの制御権を強化するため、なぐり書きが６ストローク未満のストロークを含む場合でしかもストロークが大きく描かれた場合、本発明により、そのなぐり書きは強制的にジェスチャとして認識される。本発明は、ジェスチャ認識結果を強制するのに十分な大きさのものとしてストロークを分類するのに使用するジェスチャしきいサイズを設定するための手段をユーザに提供するものである。ユーザがこのしきいサイズを設定し、それに対する認識を維持することを覚えると、ジェスチャ／テキスト誤認識の発生数は大幅に減少する。
【００６７】
ユーザが自分の特定の手書き文字サイズについてジェスチャしきい値をカストマイズしないことを選んだ場合、システムは、線ありまたは罫線付き手書き入力パッドの設定がユーザの手書き文字のサイズを正確に反映すると想定して、その設定を取り出すことができる。
【００６８】
たとえば、ユーザが行間隔を１／２インチに設定した場合、ジェスチャしきい値はこのサイズの１５０％または３／４インチとして計算されるはずである。ジェスチャしきい値を正確に設定することは重要なことである。というのは、しきい値がユーザの実際の手書き文字サイズに近すぎる場合、テキスト文字がジェスチャ・コマンドとして認識される可能性があるからである。
【００６９】
このようなジェスチャ・コマンドの結果、使用中の現行アプリケーション上で不要かつ有害なアクションが実行される恐れがある。テキストの編集中または作成中に擬似ジェスチャ・コマンドが発生することは非常にいらだたしいことである。これに対して、ジェスチャしきい値が大きすぎる場合、ユーザは、アプリケーションの特定のタスクに集中しようとする際に不自然かつ破壊的なほどジェスチャ記号を誇張して描かざるを得ない。ジェスチャを必要以上にかなり大きく描かなければならないことによる欠点の１つは、各ジェスチャに関連してホット・スポットが発生することであり、ジェスチャを入力する場合、ジェスチャ・コマンドのターゲットになる予定のオブジェクトの上にホット・スポットを正確に配置することが必要になることが多い。不自然に大きいジェスチャを描くと、ホット・スポットの配置精度が低下し、ジェスチャ・コマンドのターゲットミスが発生する。過剰に長いストロークも、ストロークの処理と認識プロセス中の両方で追加の計算負荷を発生する。ユーザが迅速かつ正確にジェスチャを入力できることが理想的である。
【００７０】
本発明は、手書き文字認識を監視し、その結果から平均手書き文字サイズを計算することにより、ジェスチャしきい値のサイズ決定を自動化しようとするものである。このプロセスを自動化すると、ユーザはそれを調整する義務から解放され、ユーザが自然にしかも一貫して書くことを覚えると、自動化した方法によりより厳重なしきい値が使用可能になる。
【００７１】
図２８は、システム初期設定中にジェスチャしきい値を設定する方法を示している。ステップ２４００でユーザがしきいサイズを手作業で設定する場合、幅と高さはユーザ・プロファイルから問い合わせ、それらが格納されている測定単位であるインチからセンサ・ドットに変換される。ジェスチャしきい値のサイズは、手書き文字のサイズが人によって変動することを考慮するためにユーザが設定可能なものである。ジェスチャしきい値のサイズはインチで指定され、システム・ブート時及びいつでもユーザはジェスチャしきいサイズを変更できる。センサ・ドットではなくインチを使用してしきいサイズを指定すると、センサ・タイプまたはサイズとは無関係に、確実にジェスチャしきい値が同じサイズになる。
【００７２】
ユーザがエンドユーザ・インタフェースを介してジェスチャしきいサイズを設定しなかった場合、ステップ２４０５で線あり手書き入力に使用するフォントの幅と高さに関する問合せを行う。ステップ２４１５及び２４２５では、フォントの幅と高さに小さい係数１．５と１．２５を掛け、それらを拡大する。図８及び図９は、線ありフォント・サイズを設定するために使用可能なエンドユーザ・インタフェースの１つを示している。フォント・サイズを設定することにより、ユーザは行手書き入力ウィンドウで使用する行間隔を設定する。ユーザが設定した間隔は、ユーザの通常の手書き文字サイズを適切に示すものである。高さと幅はそれぞれ５０％と２５％分だけ拡大する。というのは、罫線なしウィンドウに書き込む場合、ユーザの手書き文字を制限する線がまったくないので、手書き文字が通常より大きくなることが多いからである。しきいサイズが得られると、ステップ２４３０でそれがセンサ・ドットの単位で保管される。次に、ユーザがジェスチャしきい値の自動設定を可能にしたかどうかを確認するために、ステップ２４３５のテストが行われる。可能にした場合、システムは、ステップ２４４０でユーザの手書き文字サイズを動的に決定するための環境をセットアップする。ただし、上下のループによる書込み高さの特徴的な変動を反映するためにジェスチャしきい値を垂直方向により大きく設定することは有用であることに留意されたい。
【００７３】
本発明を要約すると、任意の人の手書き文字の平均高さは、認識された各単語の周囲に描かれた境界ボックスの高さを測定することによって計算される。ペン・サブシステムがなぐり書きを認識エンジンに渡す場合、それは単にストロークの集合であり、そのそれぞれに専用の境界ボックスが付いている。認識プロセス中に、ストロークは英字にグループ化され、次に英字は単語にグループ化される。認識エンジンは、認識したテキスト・ストリングと各認識単語用の境界ボックス構造とを含む結果バッファを返す。本発明が結果構造内の各境界ボックスを処理する際に、各単語の英字と大文字／小文字の区別が検査される。小文字ループまたはアポストロフィまたは引用符などの句読点マークによって曲解された単語はフィルタで除去され、残りの単語境界ボックスが平均化されるが、まだ検証されていない。本発明は、ユーザがその認識の正確さに満足しているかどうかを確認するためにテキスト・ストリングがアプリケーションに送達されるまで待つ。ユーザが自分が書いたものを確実に把握した後、テキスト・ストリングに認識エラーがある場合、本発明はどの単語が誤認識されたのかを判定し、その単語に関連する境界ボックスが廃棄される。誤認識された単語は、ユーザが訂正対話または直接編集によって訂正したときに本発明に把握される。変更されたものを把握するために、テキストに対して訂正前後の比較が行われる。本発明では訂正後の単語を得ることができるが、以下の３つの理由によりそれを無視することにしている。第１に、多くの訂正は単語ごとではなく文字ごとに行われるからである。第２に、統計データ収集には無効と見なされている正確さ向上のために、訂正対話は通常、枠付きまたは線あり認識モードを使用して行われるからである。第３に、ユーザは、テキストの編集または訂正時に自分の書込みサイズを変更することが多いからである。最良の統計データは、適切に句読点が付けられた長く完全な文章から得られる。
【００７４】
図２９は、枠付き、線あり、罫線なしの各モードの複数の手書き入力パッド２５００、２５１０、２５２０を含む。枠付きモードと線ありモードは枠付きパッド２５００と線ありパッド２５１０に示されたユーザの手書き文字を制限するので、枠付きモードと線ありモードの文字認識結果はすべて無視される。好ましい実施例の本発明は、パッド２５２０に示す罫線なし入力の認識結果のみに依存する。
【００７５】
図３０は、小文字と大文字を列挙したものである。手書き文字は大幅に変動するが、２６００、２６１０、２６２０に描いた文字の形状は一般的な母集団を表している。小文字は、上ループ２６１０を含むか下ループ２６２０を含むかによってカテゴリ化される。本発明は、ジェスチャをテキスト入力から区別するために任意の人の平均手書き文字を厳密に決定しようとするものである。これは、なぐり書きのストローク・パターンがテキストまたはジェスチャの特性を有するかどうかを判定することによって行われる。この区別プロセスは、各ストロークがペン・サブシステムによって処理されるたびにリアルタイムで行われるので、システムは認識を行おうという試みを一切行わない。主な要件は、必ずしも文字の平均高さではなく、文字内の任意のストロークの平均高さを確認することである。このため、発明者らは、下ループ２６２０から構成される小文字を無視することにした。
【００７６】
図３７に示すように斜めに書いても文字認識の正確さは影響を受けない。基線は非常に傾斜しているが、文字認識の前に認識エンジンによって正規化される。しかし、図３６に示すように、本発明は平均書込みサイズを決定するために単語の周囲に描いた境界ボックスに依存しているので、傾斜手書き文字は廃棄するかまたは個別に処理する必要がある。というのは、それによって境界ボックスの見かけサイズがゆがむからである。図３７に示すように、境界ボックス３３７０は、水平線から３０度傾斜して書くことによって発生したゆがみの典型である。水平線から１１．５度のときに引き起こされるエラーの量は２パーセントなので、本発明では有効な基線用のカットオフとして１１．５度を使用する。
【００７７】
図３８及び図３９は、基線傾斜を測定するための方法を示している。各単語境界ボックス３４３０、３４４０、３４５０、３４６０の近似起点を通って１本の線が描かれ、その中のテキストは明確にするため削除されているが、次にこの基線３４１０の角度が計算される。好ましい一実施例では、１１．５度を上回る傾斜は一切考慮しない。
【００７８】
図４３に示す代替実施例では、依然として、認識エンジンから低レベルの文字境界ボックスを取り出すことにより、平均サイズを計算することができる。文字境界ボックス３６１１、３６１２、３６１３、３６１４は、関連の単語境界ボックス３６０４よりかなり正確な結果をもたらす。本実施例ではこの技法を考慮していないが、多数の境界ボックスを取り出し、適切なフィルタを適用し、統計データを計算する際に過剰な量の処理が消費される恐れがあるからである。
【００７９】
図４０ないし図４２は、訂正した結果が廃棄される一連の事象を示している。ユーザは編集ウィンドウ３５００に手書き文字入力３５０２を入力した。手書き文字は認識されて編集ウィンドウ３５０６に表示され、ユーザは認識したテキスト３５０８を確認できるようになる。単語「ｍｏｏｎ」３５１０は単語「ｎｏｏｎ」のスペルミスなので、ユーザは間違った文字の上に「ｎ」を書き、編集ウィンドウ３５４１は訂正した英字３５４２を取り戻す。ユーザがＯＫボタン１１４５を押すと、テキスト３５６０がアプリケーションに送られる。ただし、テキストをアプリケーションに経路指定する前に、本発明はスペルミスした単語の境界ボックスを無効にし、それを廃棄している。
【００８０】
次に図３１を参照すると、本発明の好ましい実施例の論理の流れを詳細に検討することができる。このプログラム論理は、Pen For OS/2の認識エンジンがストロークの集合について認識プロセスを完了するたびに制御を受け取る。ステップ２７００では、文字認識のタイプの問合せが行われる。本発明は線なし手書き文字を処理する際に最も効果的であり、認識タイプが線なしではない場合、このルーチンはステップ２７３５で終了する。次に、ステップ２７０５でシステムがテキストの訂正中であるかどうかを判定するためにテストが行われる。訂正シーケンス中に入力した手書き文字はユーザの通常の手書き文字を表していない場合が多いので、そのような入力も廃棄される。ステップ２７１０で認識エンジンからの結果がジェスチャとテキストの両方を含む場合、平均化に適していない５ストローク以下のストロークが収集されたことを意味し、ステップ２７３５でルーチンが終了する。平均高を計算できるように、上記のフィルタを通過するテキストはステップ２７１５で処理される。
【００８１】
図３２に示すテキスト処理ルーチンは、内部ループ２８００と外部ループ２８１４とから構成され、そのループが１行の各単語及びテキストの各行をそれぞれ順に処理する。ステップ２８０５では、テキストのその行の第１の境界ボックスと最後の境界ボックスの起点の問合せが行われる。次にステップ２８０８では、共通三角法ライブラリ・ルーチンを呼び出すことによって実行されるが、２つの直角座標が極座標に変換される。その結果得られるベクトルは、ラジアンから水平線からの度数に変換される。ステップ２８１０でこの特定の行の基線が傾斜パラメータの範囲内である場合、ステップ２８１５で内部ループに入り、不適当な単語及び記号をフィルタで除去するために３つのテストが行われる。ステップ２８２０では下ループを備えた小文字を含む単語がテストされ、ステップ２８２５では引用符またはアポストロフィを含む単語がテストされ、ステップ２８３０では感嘆符または疑問符が分離される。これらの条件のいずれかによって特定の境界ボックスが拒否され、ステップ２８１５でループが反復する。１つの単語が３つのテストすべてに合格した場合、ステップ２８３５でｙ上からｙ下を引くことにより、境界ボックスの高さが測定される。各単語が処理されるまで、１行分のテキスト全体にわたって内部ループが反復する。ステップ２８４０では、すべての有効な境界ボックスの高さがまとめて平均化され、ステップ２８０５で次の行のテキストまで外部ループが反復する。最後の行のテキストが処理されると、ループはステップ２８４５に移行し、そこですべての行の高さがまとめて平均化される。２８５０でテストしたように有効な単語または境界ボックスの総数が４を上回る場合、ジェスチャしきい値が更新されたときに後で結果に重みを付けるためにフラグが設定される。手書き入力のコンテキストが明確ではないために単語が３つ未満である場合、ステップ２８５５で結果に重みが付けられない。ルーチンはステップ２８７０で復帰する。
【００８２】
図３１を参照すると、ステップ２７１５で手書き文字高を計算するために認識したテキストを処理した後、ステップ２７３０でその結果がターゲット・アプリケーションに送られる。そのアプリケーション用に編集ウィンドウが使用可能になっている場合、アプリケーションがテキスト・ストリングを検出する前にそのウィンドウが表示され、ステップ２７２５のテストは真になる。認識したテキストがエラーを含んでいる可能性があるので、測定した境界ボックスを検証することはできず、ステップ２７３０でジェスチャしきい値を更新するための呼出しは迂回される。プロセスはステップ２７３５で終了する。
【００８３】
訂正シナリオが一切行われない場合、図３３に示すようにジェスチャしきい値を更新するためのサブルーチンが呼び出される。本発明では１０個の項目を含むサイズ決定テーブル２９７５を使用するが、それぞれの項目は、なぐり書きまたはストロークの集合の計算済み平均高である。ステップ２９００で最新のサンプルに重みを付ける場合、そのプロセスはテーブル内の最も古い２つの項目を置き換える。そうではない場合、それは最も古い項目を置き換えるだけである。このプロセスは、小さい方の手書き文字サンプルに大きい方のサンプルの重みの半分を与える。次にステップ２９１５でテーブル内のすべての項目が平均化され、ステップ２９２０でその結果に１．５を掛けることにより、ジェスチャ高さが計算される。次に、ステップ２９２５でその高さに０．８または８０％を掛けることにより、Ｘまたはジェスチャの幅値が計算される。この新しい値は、次の書込みモーダリティでただちに使用される。次に更新ルーチンはステップ２９３０で呼出し側に復帰し、呼出し側が現行プロセスを終了する。
【００８４】
ターゲット・ウィンドウに結果を送っている間に編集ウィンドウが作成された場合、訂正対話の活動化という図３４のルーチンは、ウィンドウ作成の一部として呼び出されているはずである。その時点でプログラムはステップ３０００でシステム・フラグを設定して訂正対話の開始を通知し、ステップ３００５で入力テキスト・ストリングを保管し、ステップ３０１０で結果の一部として認識エンジン用に受け取った境界ボックスのアレイを保管しているはずである。これは、ユーザが認識したテキストに対してどのような変更を行ったのかを本発明が判定できるようにするために行われる。
【００８５】
ユーザが最終的に編集ウィンドウを終了すると、本発明はもう一度制御権を獲得し、訂正モーダリティを通知するシステム・フラグがステップ３０５０でリセットされる。ステップ３０５５でユーザがテキストに対して一切変更を行っていない場合、ルーチンは終了し、ストリングをアプリケーション１１４０に渡すことができるようになる。そうではない場合、ステップ３０６０で出力ストリングが入力ストリングと比較され、比較ミスごとに関連の境界ボックスが無効になる。ストリングの完全性比較が完了した後、ステップ３０７０で元のテキストのいずれかがそのまま存続しているかどうかを確認するために残りのテキストが比較される。存続していない場合、プロセスはステップ３０９０で終了する。ステップ３０７５でそれが４未満になるかどうかを確認するために合計カウントがテストされ、４未満になる場合、ステップ３０８０で重みフラグがなしに設定される。次にステップ３０８５でジェスチャしきい値ルーチンが呼び出され、ステップ３０９０でプロセスが終了する。
【００８６】
本発明に関連する２つの追加プロセスを図３５に示す。これらのプロセスは、システムが最初にブート・アップしたときと、新しいユーザが自分のジェスチャしきい値のロードを要求するたびに制御権を獲得する。ブート時には、ステップ３１００でユーザのしきい値がプロファイルから取り出される。ステップ３１０５でそれが検出された場合、ステップ３１１５でサイズ決定テーブルのすべての項目にそれが入っている。ジェスチャしきい値が検出されなかった場合、３１１０でシステム・デフォルト・ジェスチャしきい値が使用される。ステップ３１１５でサイズ決定テーブルの項目に入れる。プロセスはステップ３１２０で終了する。
【００８７】
ユーザが自分のジェスチャしきい値のロードを要求すると、システムはまずステップ３１５０で、現行ユーザのプロファイル下で現行のものを保管すべきかどうかを問い合わせる。保管すべき場合、ステップ３１５５でそれが保管され、ステップ３１６０で新しいユーザのジェスチャしきい値がプロファイルから取り出される。ステップ３１６５のテストでジェスチャしきい値が検出されない場合、もう一度、ステップ３１７０でシステム・デフォルトが使用され、ステップ３１７５でそれに応じてサイズ決定テーブルが初期設定される。
【００８８】
特定の実施例について開示してきたが、本発明の精神及び範囲を逸脱せずにこのような特定の実施例に対して変更を加えることができることは、当業者であれば分かるだろう。さらに、このような実施例は、例示のみを目的とするものであり、本発明の範囲を制限したり、特許請求の範囲を狭めるためのものであると解釈してはならない。
【００８９】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００９０】
（１）ペンベース・コンピュータ・システムへの手書き文字とジェスチャ入力とを区別する方法において、
スタイラスによってコンピュータ・システムに入力された１組のストロークを検出するステップと、
手書き文字入力またはジェスチャ入力を示す１組の特性がないかどうか、各ストロークを順次分析するステップと、
各ストロークの分析後、分析したすべてのストロークの１組の特性に基づいて、１組のストロークをジェスチャまたは手書き文字入力としてカテゴリ化するステップとを含むことを特徴とする方法。
（２）前記カテゴリ化ステップが、１組のストロークを不明入力としてカテゴリ化するステップをさらに含むことを特徴とする、上記（１）に記載の方法。
（３）前記カテゴリ化ステップが、所定数のストローク後に、そのストロークを手書き文字入力としてカテゴリ化するステップをさらに含むことを特徴とする、上記（１）に記載の方法。
（４）前記カテゴリ化ステップが、所定のタイプの最後に分析したストロークに応答して、１組のストロークをジェスチャ入力としてカテゴリ化するステップをさらに含むことを特徴とする、上記（１）に記載の方法。
（５）前記所定のタイプのストロークがタップ・ストロークであることを特徴とする、上記（４）に記載の方法。
（６）１組のストロークを手書き文字入力としてカテゴリ化したことに応答して、手書き文字認識のみのために１組のストロークを認識エンジンに送るステップをさらに含むことを特徴とする、上記（１）に記載の方法。
（７）１組のストロークをジェスチャ入力としてカテゴリ化したことに応答して、手書き文字及びジェスチャ認識のために１組のストロークを認識エンジンに送るステップをさらに含むことを特徴とする、上記（１）に記載の方法。
（８）認識したジェスチャを１次結果として含み、認識したテキスト文字を２次結果として含む結果データ構造を構築するステップと、
さらに処理するために結果データ構造をターゲット・アプリケーションに送るステップとをさらに含むことを特徴とする、上記（７）に記載の方法。
（９）前記カテゴリ化ステップが、あるタイプの入力受入れ設定について１組のストロークが入力されたウィンドウについて受け入れられる入力タイプに関するウィンドウ設定をテストするステップをさらに含むことを特徴とする、上記（１）に記載の方法。
（１０）前記カテゴリ化ステップが、
ストローク間の分離距離を分析するステップと、
分離距離が所定の距離を超えているという判定に応答して、１組のストロークを手書き文字入力としてカテゴリ化するステップとをさらに含むことを特徴とする、上記（１）に記載の方法。
（１１）ストローク間の前記分離距離が水平方向にのみ分析されることを特徴とする、上記（１０）に記載の方法。
（１２）前記分析ステップが、各ストロークのサイズを分析するステップをさらに含むことを特徴とする、上記（１）に記載の方法。
（１３）前記カテゴリ化ステップが、分析したすべてのストロークが所定のサイズより大きい場合に１組のストロークをジェスチャ入力としてカテゴリ化するステップをさらに含むことを特徴とする、上記（１２）に記載の方法。
（１４）前記カテゴリ化ステップが、１組のストロークが入力されている間の経過時間に基づいて、１組のストロークを手書き文字またはジェスチャ入力としてカテゴリ化するステップをさらに含むことを特徴とする、上記（１）に記載の方法。
（１５）前記カテゴリ化ステップが、
分析したストロークの総数をカウントするステップと、
分析したストロークのうち、所定のサイズを超えるストロークの数をカウントするステップとをさらに含むことを特徴とする、上記（１）に記載の方法。
（１６）プロセッサと、メモリと、ディスプレイと、ペン入力装置とを含み、手書き文字とジェスチャ入力とを区別するためのシステムにおいて、
スタイラスによってコンピュータ・システムに入力された１組のストロークを検出する手段と、
手書き文字入力またはジェスチャ入力を示す１組の特性がないかどうか、各ストロークの順次分析に応答する手段と、
各ストロークの分析に応答して、分析したすべてのストロークの１組の特性に基づいて、１組のストロークをジェスチャまたは手書き文字入力としてカテゴリ化する手段とを含むことを特徴とするシステム。
（１７）前記カテゴリ化手段が、所定数のストローク後に、そのストロークを手書き文字入力としてカテゴリ化する手段をさらに含むことを特徴とする、上記（１６）に記載のシステム。
（１８）前記カテゴリ化手段が、所定のタイプの最後に分析したストロークに応答して、１組のストロークをジェスチャ入力としてカテゴリ化する手段をさらに含むことを特徴とする、上記（１６）に記載のシステム。
（１９）１組のストロークをジェスチャ入力としてカテゴリ化したことに応答して、手書き文字及びジェスチャ認識のために１組のストロークを認識エンジンに送る手段をさらに含むことを特徴とする、上記（１６）に記載のシステム。
（２０）前記カテゴリ化手段が、１組のストロークが入力されたウィンドウについて受け入れられる入力タイプに関するウィンドウ設定をテストする手段をさらに含むことを特徴とする、上記（１６）に記載のシステム。
（２１）前記カテゴリ化手段が、
ストローク間の分離距離を分析する手段と、
分離距離が所定の距離を超えているという判定に応答して、１組のストロークを手書き文字入力としてカテゴリ化する手段とをさらに含むことを特徴とする、上記（１６）に記載のシステム。
（２２）前記分析手段が、各ストロークのサイズを分析する手段をさらに含むことを特徴とする、上記（１６）に記載のシステム。
（２３）前記カテゴリ化手段が、１組のストロークが入力されている間の経過時間に基づいて、１組のストロークを手書き文字またはジェスチャ入力としてカテゴリ化する手段をさらに含むことを特徴とする、上記（１６）に記載のシステム。
（２４）コンピュータで読取り可能なメモリ上にあって、コンピュータへの手書き文字とジェスチャ入力とを区別するためのコンピュータ・プログラム製品において、
スタイラスによってコンピュータ・システムに入力された１組のストロークを検出する手段と、
手書き文字入力またはジェスチャ入力を示す１組の特性がないかどうか、各ストロークを順次分析する手段と、
各ストロークを分析し、分析したすべてのストロークの１組の特性に基づいて、１組のストロークをジェスチャまたは手書き文字入力としてカテゴリ化する手段とを含むことを特徴とするコンピュータ・プログラム製品。
（２５）前記カテゴリ化手段が、所定数のストローク入力後に、そのストロークを手書き文字としてカテゴリ化する手段をさらに含むことを特徴とする、上記（２４）に記載の製品。
（２６）前記カテゴリ化手段が、所定のタイプの最後に分析したストロークに応答して、１組のストロークをジェスチャ入力としてカテゴリ化する手段をさらに含むことを特徴とする、上記（２４）に記載の製品。
（２７）１組のストロークをジェスチャ入力としてカテゴリ化したことに応答して、手書き文字及びジェスチャ認識のために１組のストロークを認識エンジンに送る手段をさらに含むことを特徴とする、上記（２４）に記載の製品。
（２８）前記カテゴリ化手段が、１組のストロークが入力されたウィンドウについて受け入れられる入力タイプについてウィンドウ設定をテストする手段をさらに含むことを特徴とする、上記（２４）に記載の製品。
（２９）前記カテゴリ化ステップが、
ストローク間の分離距離を分析する手段と、
分離距離が所定の距離を超えているという判定に応答して、１組のストロークを手書き文字入力としてカテゴリ化する手段とをさらに含むことを特徴とする、上記（２４）に記載の製品。
（３０）前記分析手段が、各ストロークのサイズを分析する手段をさらに含むことを特徴とする、上記（２４）に記載の製品。
（３１）前記カテゴリ化手段が、１組のストロークが入力されている間の経過時間に基づいて、１組のストロークを手書き文字またはジェスチャ入力としてカテゴリ化する手段をさらに含むことを特徴とする、上記（２４）に記載の製品。
【図面の簡単な説明】
【図１】本発明によるコンピュータ・システムのハードウェア・ブロック図である。
【図２】本発明の主要ソフトウェア構成要素のアーキテクチャ・ブロック図である。
【図３】本発明の好ましい実施例においてペンベース入力装置が使用可能な記号及び英字ジェスチャの一部を示す図である。
【図４】手書き文字認識において英字と混同される可能性のあるジェスチャの一部を示す図である。
【図５】手書き文字とジェスチャとを区別するための境界ボックス・スコアの概念を示す図である。
【図６】手書き文字とジェスチャとを区別するための境界ボックス・スコアの概念を示す図である。
【図７】手書き文字とジェスチャとを区別するための境界ボックス・スコアの概念を示す図である。
【図８】ユーザが所望の手書き文字入力サイズを決定できるようにするために可能なユーザ・インタフェースの１つを示す図である。
【図９】ユーザが所望の手書き文字入力サイズを決定できるようにするために可能なユーザ・インタフェースの１つを示す図である。
【図１０】ジェスチャ及び手書き文字認識の完了時にアプリケーションに送られる認識結果のデータ構造を示す図である。
【図１１】本発明のジェスチャ及び手書き文字認識に使用する境界ボックスの矩形を示す図である。
【図１２】本発明において英字と英字ジェスチャとを区別するために使用可能なタップと、許容タップ・サイズと、最小ジェスチャ・サイズとを示す図である。
【図１３】スタイラス着地感知手順の流れ図である。
【図１４】ペンが動いている間の境界ボックス手順の流れ図である。
【図１５】認識モード設定手順の流れ図である。
【図１６】手書き文字及びジェスチャ認識の手順を示す図である。
【図１７】アプリケーションにより入力された手書き文字またはジェスチャを処理するためのプロセスを示す図である。
【図１８】手書き文字及びジェスチャのタイムアウト値を調整するための手順を示す図である。
【図１９】スタイラス離昇手順の流れ図である。
【図２０】書込み事象の終了時のプロセスを示す図である。
【図２１】境界ボックス・プロセスの流れ図である。
【図２２】境界ボックス・プロセスの流れ図である。
【図２３】境界ボックス・プロセスの流れ図である。
【図２４】ジェスチャとテキストとを区別するために使用する分離プロセス用の検査を示す図である。
【図２５】ジェスチャとテキストとを区別するために使用する分離プロセス用の検査を示す図である。
【図２６】ジェスチャとテキストとを区別するために使用する分離プロセス用の検査を示す図である。
【図２７】境界ボックスを水平方向に拡大するためのプロセスを示す図である。
【図２８】ジェスチャのしきいサイズを初期設定するための流れ図である。
【図２９】枠付きモード、線ありモード、線なしモードの手書き入力パッドを示す図である。
【図３０】手書き英字を示す図である。
【図３１】本発明の好ましい実施例を示す図である。
【図３２】本発明の好ましい実施例を示す図である。
【図３３】本発明の好ましい実施例を示す図である。
【図３４】本発明の好ましい実施例を示す図である。
【図３５】本発明の好ましい実施例を示す図である。
【図３６】認識した各単語境界ボックスが表示されている手書き文字を含む編集ウィンドウを示す図である。
【図３７】急角度で書かれた手書き文字を含む編集ウィンドウを示す図である。
【図３８】手書き文字を含む編集ウィンドウを示す図である。
【図３９】手書き文字を含む編集ウィンドウを示す図である。
【図４０】間違って認識され、編集ウィンドウの対話によって訂正される手書き文字入力を示す一連のウィンドウを示す図である。
【図４１】間違って認識され、編集ウィンドウの対話によって訂正される手書き文字入力を示す一連のウィンドウを示す図である。
【図４２】間違って認識され、編集ウィンドウの対話によって訂正される手書き文字入力を示す一連のウィンドウを示す図である。
【図４３】本発明の代替実施例の線なしモードの手書き入力パッドを示す図であり、基線が傾斜しているので、単語内の各文字の境界ボックスを使用することによって平均文字高が計算される。
【符号の説明】
１０  パーソナル・コンピュータ・システム
１１  プロセッサ
１３  中央演算処理装置（ＣＰＵ）
１５  ランダム・アクセス・メモリ
１７  ハード・ディスク記憶装置
１９  フロッピー・ディスク装置
２１  ディスケット
２３  ディスプレイ
２５  キーボード
２７  マウス
２９  ペンまたはスタイラス
３１  プリンタ
【図１】
0003664571.tif 000002
【図２】
0003664571.tif 000003
【図３】
0003664571.tif 000004
【図４】
0003664571.tif 000005
【図５】
0003664571.tif 000006
【図６】
0003664571.tif 000007
【図７】
0003664571.tif 000008
【図８】
0003664571.tif 000009
【図９】
0003664571.tif 000010
【図１０】
0003664571.tif 000011
【図１１】
0003664571.tif 000012
【図１２】
0003664571.tif 000013
【図１３】
0003664571.tif 000014
【図１４】
0003664571.tif 000015
【図１５】
0003664571.tif 000016
【図１６】
0003664571.tif 000017
【図１７】
0003664571.tif 000018
【図１８】
0003664571.tif 000019
【図１９】
0003664571.tif 000020
【図２０】
0003664571.tif 000021
【図２１】
0003664571.tif 000022
【図２２】
0003664571.tif 000023
【図２３】
0003664571.tif 000024
【図２４】
0003664571.tif 000025
【図２５】
0003664571.tif 000026
【図２６】
0003664571.tif 000027
【図２７】
0003664571.tif 000028
【図２８】
0003664571.tif 000029
【図２９】
0003664571.tif 000030
【図３０】
0003664571.tif 000031
【図３１】
0003664571.tif 000032
【図３２】
0003664571.tif 000033
【図３３】
0003664571.tif 000034
【図３４】
0003664571.tif 000035
【図３５】
0003664571.tif 000036
【図３６】
0003664571.tif 000037
【図３７】
0003664571.tif 000038
【図３８】
0003664571.tif 000039
【図３９】
0003664571.tif 000040
【図４０】
0003664571.tif 000041
【図４１】
0003664571.tif 000042
【図４２】
0003664571.tif 000043
【図４３】
0003664571.tif 000044