高度な認識のサンプル
高度な認識サンプルは、手書き認識に使用される Microsoft Tablet PC Automation アプリケーション プログラミング インターフェイス (API) の高度な機能を示しています。
このパックには、次の機能があります。
- インストールされている認識エンジンの列挙
- 特定の言語で認識エンジン コンテキストを作成する
- 認識エンジン オブジェクトの使用
- 認識ファクトと単語リストの設定
- ガイドを使用して認識品質を向上させる
- 動的背景認識
- ジェスチャ認識
使用されるインターフェイスは、 IInkRecognizer、 IInkRecoContext、 IInkRecognitionResult、 IInkRecognitionGuide、 IInkWordList、 IInkGesture、 IInkCollector、 IInkDisp、 IInkRenderer、 IInkDrawingAttributes、 IInkStrokes、 および IInkStroke です。
インクヘッダーとプロジェクトヘッダー
最初に、タブレット PC オートメーション インターフェイスのヘッダーを含めます。 これらは、Tablet PC Platform SDK と共にインストールされます。 TpcError.h ファイルには、Tablet PC API エラー コード定義が含まれています。
#include <msinkaut.h>
#include <msinkaut_i.c>
#include <TpcError.h>
EventSinks.h ファイルは 、IInkEventsImpl インターフェイスと IInkRecognitionEventsImpl インターフェイスを定義し、 RecognitionWithAlternates、 Stroke、 および Gesture イベントを設定します。
#include "EventSinks.h"
ChildWnds.h ファイルには、クラス CInkInputWnd と CRecoOutputWnd の定義が含まれています。これは ATL の CWindowImpl から派生し、サンプルの子ウィンドウの作成に使用されます。
#include "ChildWnds.h"
AdvReco.h ファイルは、このサンプルのアプリケーション ウィンドウ クラスである CAdvRecoApp クラスを宣言します。
#include "AdvReco.h"
アプリケーション ウィンドウの初期化
ウィンドウの Run
メソッドは CAdvRecoApp オブジェクトを設定し、ウィンドウのメニューとアイコンを読み込み、既定の認識エンジンの InkRecognizerContext オブジェクトを作成して、ウィンドウのメッセージ ループを開始します。
ウィンドウの OnCreate メソッドは 、WM_CREATE イベントを処理し、子ウィンドウを作成します。 InkCollector オブジェクトは、インク コレクターのイベント ソースに接続し、入力ウィンドウでインク入力を有効にします。 次に、 InkRecognizerGuide オブジェクトを作成し、インク コレクターの Renderer プロパティを使用して、認識ガイド ボックスの四角形をインク空間に変換します。 最後に、 OnCreate メソッドによって InkWordList オブジェクトが作成されます。
インク コレクター イベントの処理
ウィンドウの OnStroke メソッドは、インク コレクターの Stroke イベントを処理します。 新しい IInkStrokeDisp オブジェクトが、インク コレクターの Ink プロパティのInkStrokes に追加されます。
ウィンドウの OnGesture メソッドは、インク コレクターの Gesture イベントを処理します。 OnGesture メソッドは、最初に最高の信頼度ジェスチャを使用してジェスチャを識別し、ウィンドウがこの特定のジェスチャをサポートしているかどうかを確認します。 ジェスチャがサポートされている場合、ジェスチャは strokes コレクションから削除されるため、ジェスチャの境界ボックスは無効になります。 ジェスチャがサポートされていない場合は、 Gesture イベントが取り消され、インク コレクターによって Stroke イベントが発生します。 最後に、結果ウィンドウが更新されます。
認識エンジン コンテキスト イベントの処理
ウィンドウの OnRecognitionWithAlternates メソッドは、認識エンジン コンテキストの RecognitionWithAlternates イベントを処理します 。 OnRecognitionWithAlternates メソッドは、結果ウィンドウに認識結果を表示します。
メニュー コマンドの処理
ウィンドウの OnRecognizer メソッドは、Recognizer メニューのコマンドを処理します。 Default コマンドが選択されている場合、InkRecognizers の GetDefaultRecognizer メソッドを使用して、既定の認識エンジンを取得します。それ以外の場合は、選択した認識エンジンが取得されます。 次に、認識エンジン コンテキストが作成されて使用され、メニューとステータス バーが更新されます。
ウィンドウの OnFactoidWordlist メソッドは、Factoid メニューの [Wordlist の使用] コマンドを処理します。 認識エンジン コンテキストの Strokes プロパティは NULL に設定され、認識エンジン コンテキストをリセットします。 [Wordlist の使用] オプションがオフの場合、認識エンジン コンテキストの WordList プロパティは NULL に設定されます。それ以外の場合、認識エンジン コンテキストの WordList プロパティは、OnCreate メソッドで作成された InkWordList に設定されます。 最後に、インク コレクターの InkStrokes が認識エンジン コンテキストに再アタッチされ、認識エンジン コンテキストの BackgroundRecognizeWithAlternates メソッドが呼び出され、メニューが更新されます。
ウィンドウの OnFactoid メソッドは、 Factoid メニューの factoid コマンドを処理します。 最初に、認識エンジン コンテキストの Strokes プロパティを NULL に設定し、認識エンジン コンテキストの Factoid プロパティを選択した factoid に設定し、インク コレクターの InkStrokes を認識エンジン コンテキストに再割り当てします。 Factoid オブジェクトが認識エンジン コンテキストでサポートされている場合、認識エンジン コンテキストの BackgroundRecognizeWithAlternates メソッドが呼び出されます。それ以外の場合は、エラー メッセージが表示されます。 最後に、メニューとステータス バーが更新されます。
ウィンドウの OnGuide メソッドは、[ ガイド ] メニューのコマンドを処理します。 認識エンジン コンテキストでガイド オプションがサポートされている場合、 OnGuide メソッドは認識エンジン コンテキストの Strokes プロパティを NULL に設定し、認識エンジン コンテキストの Guide プロパティを選択したガイド設定に設定し、インク コレクターの InkStrokes を認識エンジン コンテキストに再割り当てし、認識エンジン コンテキストの BackgroundRecognizeWithAlternates メソッドを呼び出します。 それ以外の場合は、エラー メッセージが表示されます。 最後に、入力ウィンドウ、メニュー、ステータス バーが更新されます。
ウィンドウの OnMode メソッドは、[ モード ] メニューのコマンドを処理します。 インク コレクターを無効にし、インク コレクターの CollectionMode プロパティを更新し、メニューを更新して、ジェスチャ リストを表示または非表示にします。 最後に、インク コレクターが有効になります。
ウィンドウの OnRecognize メソッドは、[インク] メニューの [認識 ] コマンドを処理します。 認識エンジン コンテキストの EndInkInput メソッドを呼び出して、認識エンジン コンテキストにインクが追加されないようにします。 すべての認識エンジンが部分的な認識をサポートしているわけではないので、これは必要な場合があります。 次に、認識エンジン コンテキストの Recognize メソッドを呼び出し、結果をウィンドウの OnRecognitionWithAlternates メソッドに渡します。 最後に、インク コレクターの InkStrokes が認識エンジン コンテキストに再割り当てされます。
ウィンドウの OnClear メソッドは、[インク] メニューの [クリア] コマンドを処理します。 インク コレクターの Ink プロパティからストロークを削除し、古いストローク コレクションを解放し、インク コレクターの Ink プロパティの新しいストロークを作成し、認識エンジン コンテキストに新しいストローク コレクションをアタッチします。
ウィンドウの OnExit メソッドは、Ink メニューの Exit コマンドを処理し、WM_CLOSE イベントを発生させます。
ヘルパー メソッド
ウィンドウの LoadMenu メソッドは、ウィンドウの Run メソッドから呼び出され、サポートされている認識エンジンの一覧と、サポートされている factoid の一覧がメニューに追加されます。 まず、 InkRecognizers を取得します。 次に、使用可能な認識エンジンを反復処理し、 Languages プロパティに言語の一覧がある認識エンジンのみを選択します。これは、 認識エンジン メニューに追加されます。 最後に、[ Factoid ] メニューに、グローバル定数として定義されている factoid の一覧を設定します。
ウィンドウの UseRecognizer メソッドは、ユーザーが新しい認識エンジンを選択すると、ウィンドウの OnRecognizer メソッドから呼び出されます。 認識エンジン コンテキストを作成し、認識エンジン イベント シンクから古いコンテキストをデタッチし、古いコンテキストをクリアして解放し、新しいコンテキストを認識エンジン イベント シンクにアタッチします。
次に、 UseRecognizer メソッドは認識エンジンの Capabilities プロパティを チェックし、 InkRecognizerCapabilities 値を返します。 認識エンジンで罫線入力がサポートされている場合は、[ガイド] メニューの [行] コマンドが有効になります。 認識エンジンがボックス化された入力をサポートしている場合は、 Boxes コマンドが有効になります。 認識エンジンが空き入力をサポートしていない場合、 None コマンドは無効になります。 現在のガイドの選択がサポートされていない場合は、認識エンジン コンテキストの Guide プロパティとメニューの両方が更新されます。
次に、 UseRecognizer メソッドは、認識エンジン コンテキストの WordList プロパティと Factoid プロパティの設定を試みます。 いずれかの設定が認識エンジンでサポートされていない場合は、既定値が使用され、メニューが更新されます。
最後に、UseRecognizer メソッドは、インク コレクターの InkDisp オブジェクトの Strokes プロパティを認識エンジン コンテキストにアタッチし、出力ウィンドウのフォントを認識エンジンの言語でサポートされているフォントに変更し、出力ウィンドウをリセットし、認識エンジン コンテキストの BackgroundRecognizeWithAlternates メソッドを呼び出して認識結果を更新します。
ウィンドウの GetGestureName メソッドは、ウィンドウの OnGesture メソッドから呼び出されます。 ジェスチャを検索し、ジェスチャの名前にインデックスを返します。このインデックスは、AdvReco.rc ファイルの文字列テーブルに格納されます。