インク認識

すべてのアプリケーションで認識を使用する必要があるわけではありませんが、ほとんどのアプリケーションはテキストをプライマリ データ型として設計されているため、インクをテキストに変換する機能は非常に重要です。 タブレット PC プラットフォーム API の認識機能を使用して、認識する言語など、使用可能な認識エンジンに関する情報を照会できます。 その後、Ink オブジェクトから認識エンジンに Strokes コレクションを送信し、RecognitionResult オブジェクトを返すことができます。

RecognizerContext オブジェクト

RecognizerContext オブジェクトは、特定の認識エンジンのインスタンス化です。 RecognizerContext オブジェクトを使用すると、ストロークの特定のコレクションを同期的または非同期的に認識できます。 非同期的に認識する場合、 RecognizerContext オブジェクトは、アプリケーションへのイベント コールバックで RecognitionResult オブジェクトを返します。

認識エンジンと認識エンジン オブジェクト

1 台のタブレット PC に 1 つ以上の認識エンジンを使用できる場合があります。 認識エンジンのコレクションに対してクエリを実行して、使用する認識エンジンを決定できます。 認識エンジンは、認識できる言語や製造元など、その機能に関する特定の情報を提供します。

少なくとも 1 つの認識エンジンがインストールされているかどうかを確認するには、次の C++ と C# のコード例に示すように InkRecognizerContext オブジェクトをインスタンス化します。 認識エンジンが存在しない場合、 CoCreateInstance のこの呼び出しは失敗します。

CComPtr<IInkRecognizerContext> g_pIInkRecoContext;
hr = CoCreateInstance(CLSID_InkRecognizerContext, 
      NULL, CLSCTX_INPROC_SERVER,
      IID_IInkRecognizerContext, 
(void **) &g_pIInkRecoContext);
if (FAILED(hr)) 
{
      ::MessageBox(NULL, TEXT("No recognizers installed.\nExiting."), 
      gc_szAppName, MB_ICONERROR);
      return -1;
}
try
{
  Recognizers recos = new Recognizers();//Check for recognizer.
  Recognizer defReco = recos.GetDefaultRecognizer();
  recoContext = defReco.CreateRecognizerContext();
}
catch
{
  MessageBox.Show("No recognizers installed.");
}

RecognitionResult オブジェクトと RecognitionAlternate オブジェクト

認識の結果は RecognitionResult オブジェクトで返されます。 結果には 、TopString プロパティに最適な結果文字列と、 RecognitionAlternates コレクション内の代替結果のコレクションが含まれます。 RecognitionResult オブジェクトは、生成元の元の Strokes コレクションで保持できます。

RecognizerGuide 構造体

認識エンジン ガイドは、行と列で構成でき、認識エンジンに認識を実行するためのより良いコンテキストを提供します。 たとえば、ユーザーの画面に、手書きの位置を示す罫線のような水平線を描画できます (この種類のガイドは行のみで構成され、列は表示されません)。 ユーザーが任意のスペースではなく行に書き込む場合、認識の精度が向上します。

次の図は、入力用の 2 行の RecognizerGuide 構造体を示しています。

2 行認識エンジン ガイドを示す図

次の図は、4 つの列と 3 つの行を持つ RecognizerGuide 構造体を示しています。

3 バイ 4 認識エンジン ガイドを示す図

RecognizerGuide 構造体の使用方法の詳細については、RecognizerGuide リファレンス トピックを参照してください。