IInkRecognitionAlternate
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
認識エンジンの辞書と照合されたインクのセグメントについて、一致する可能性のある単語の候補を表します。
解説(Remarks)
認識セグメントとは、認識エンジンが既知の InkDisp オブジェクトに対する認識結果を生成するために内部的に使用する、基本的なインクの断片または単位です。セグメントは通常、間隔によって決定され、可能な限り小さなインクの断片に分割されます。
インクによっては、セグメント間の区切りが曖昧になる場合があります。これらのセグメントは認識エンジンの辞書と照合され、一致する可能性のある候補 (代替候補) が判定されます。セグメントを照合すると、認識エンジンは可能性のある代替候補の一覧を作成し、それぞれに信頼度レベルを割り当てて、最有力の候補を選択します。
たとえば、「how are you」というフレーズを考えてみます。このフレーズは (セグメント間の間隔にもよりますが) 通常、単語ごとに 3 つのセグメントに分割されます。
各セグメントが認識されると、RecognitionResult が作成されます。そして各結果は、選択可能な代替候補の一覧を返します。たとえば、セグメント「how」には「how」、「now」、「new」などの代替候補があり、「how」が最有力の代替候補となります。既定では、各セグメントについて最有力の代替候補が返されます。最有力以外の代替候補を返すように選択することもできます。
また、認識結果の信頼度レベルや、代替候補が現れる行番号など、代替候補のプロパティに基づいて代替候補を返すこともできます。認識プロパティの一覧については、RecognitionProperty オブジェクトを参照してください。
代替候補に対する代替候補を返すこともできます。
すべての認識エンジンが上記のプロパティをすべて設定するわけではありません。認識エンジンが設定していないプロパティにアプリケーションがアクセスしようとすると、引数の例外がスローされます。
このインターフェイスを実装するクラスを定義した場合、その新しいクラスは Tablet PC のアプリケーション プログラミング インターフェイス (API) と正しく連携しません。
メソッド 15
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
代替候補の最有力の文字列を取得します。
| RecoString | LPWSTR* | out | この代替候補の認識文字列を受け取るポインタである。 |
IInkRecognitionAlternate オブジェクトまたはジェスチャの認識に対して、認識エンジンが持つ信頼度のレベル (strong、intermediate、poor) を取得します。(IInkRecognitionAlternate.get_Confidence)
| Confidence | InkRecognitionConfidence* | out | この代替候補の認識信頼度(強・中・弱)を受け取る InkRecognitionConfidence へのポインタである。 |
解説(Remarks)
返される可能性のある信頼度の値の一覧については、InkRecognitionConfidence 列挙型を参照してください。
IInkRecognitionAlternate Interface オブジェクトの場合:
代替候補がフレーズまたは文を表す場合、この値はそのフレーズまたは文に含まれる認識セグメントのうち、最も低い信頼度レベルを表します。一方、代替候補が単語を表す場合、この値はその単語の信頼度レベルを表します。
1 行のテキストを表す IInkRecognitionAlternate オブジェクトのベースラインを取得します。
| Baseline | VARIANT* | out | 認識された文字のベースラインを表す点配列を受け取る VARIANT へのポインタである。 |
解説(Remarks)
ベースラインとは、ディセンダーを除く各文字の下端が揃えられる仮想的な水平線です。これは x ハイトの下端にも対応します。
認識代替候補が 1 行のテキスト内で複数の認識セグメントにまたがる場合、このプロパティは、代替候補内の最初のセグメントのベースラインの始点から、最後のセグメントのベースラインの終点までを結ぶ線を返します。
propertyType パラメーターに Segmentation 認識プロパティのグローバル一意識別子 (GUID) を指定して AlternatesWithConstantPropertyValues メソッドを使用すると、元の代替候補のセグメント分割に対応する、1 セグメントの認識代替候補のコレクションを取得できます。
1 行のテキストを表す IInkRecognitionAlternate オブジェクトのミッドラインを取得します。
| Midline | VARIANT* | out | 認識された文字のミッドライン(中線)を表す点配列を受け取る VARIANT へのポインタである。 |
解説(Remarks)
ミッドラインとは、アセンダーを除く各文字の本体部分の上端が揃えられる仮想的な水平線に対応します。ミッドラインは x ハイトの上端にも対応します。
認識代替候補が 1 行のテキスト内で複数の認識セグメントにまたがる場合、このプロパティは、その代替候補のベースラインと平行な線を返します。ベースラインからミッドラインまでの距離は、最初のセグメント内における対応する距離によって決定されます。
propertyType パラメーターに Segmentation 認識プロパティのグローバル一意識別子 (GUID) を指定して AlternatesWithConstantPropertyValues メソッドを使用すると、元の代替候補のセグメント分割に対応する、1 セグメントの認識代替候補のコレクションを取得できます。
1 行のテキストを表す IInkRecognitionAlternate オブジェクトのアセンダー ラインを取得します。
| Ascender | VARIANT* | out | 認識された文字のアセンダー線を表す点配列を受け取る VARIANT へのポインタである。 |
解説(Remarks)
欧米の言語では、アセンダーは小文字の本体部分 (ミッドラインまたは x ハイト) より上に伸びる部分に相当します。たとえば「b」の縦線のうち、その文字の丸い部分の最上部より上に伸びる部分です。アセンダー ラインとは、これらのアセンダーの上端を横切る仮想的な水平線です。
1 行のテキストを表す IInkRecognitionAlternate オブジェクトのディセンダー ラインを取得します。
| Descender | VARIANT* | out | 認識された文字のディセンダー線を表す点配列を受け取る VARIANT へのポインタである。 |
解説(Remarks)
欧米の言語では、ディセンダーは小文字のうちベースラインより下に伸びる部分に相当します。たとえば「p」の縦線のうち、その文字の丸い部分の最下部より下に伸びる部分です。ディセンダー ラインとは、これらのディセンダーの下端を横切る仮想的な水平線です。
認識代替候補が 1 行のテキスト内で複数の認識セグメントにまたがる場合、このプロパティは、その代替候補のベースラインと平行な線を返します。ベースラインからディセンダー ラインまでの距離は、最初のセグメント内における対応する距離によって決定されます。
propertyType パラメーターに Segmentation 認識プロパティのグローバル一意識別子 (GUID) を指定して AlternatesWithConstantPropertyValues メソッドを使用すると、元の代替候補のセグメント分割に対応する、1 セグメントの認識代替候補のコレクションを取得できます。
代替候補を構成するインクの行番号を取得します。
| LineNumber | INT* | out | この代替候補が属する行番号を受け取るポインタである。 |
解説(Remarks)
オブジェクトに含まれる、またはオブジェクトの作成に使用されたストロークのコレクションを取得します。(IInkRecognitionAlternate.get_Strokes)
| Strokes | IInkStrokes** | out | この代替候補に対応するストローク コレクションを受け取るポインタである。 |
解説(Remarks)
このストロークのコレクションは、InkDisp オブジェクトに含まれるストロークのコピーである場合と、そのオブジェクトまたはコレクションの作成に使用されたストロークである場合があります。
コレクション内の各代替候補がそれぞれ別々の行に存在する、IInkRecognitionAlternates コレクションを取得します。
| LineAlternates | IInkRecognitionAlternates** | out | 行単位での代替候補のコレクションを受け取るポインタである。 |
解説(Remarks)
インクの段落に対する認識代替候補がある場合、LineAlternates プロパティを使用すると、各代替候補が段落の 1 行を表す認識代替候補のコレクションを取得できます。
このプロパティは、propertyType パラメーターに RecognitionProperty 定数の LineNumber の値を指定して AlternatesWithConstantPropertyValues メソッドを呼び出す代わりに使用できます。代替候補のプロパティの詳細については、RecognitionProperty 定数を参照してください。
コレクション内の各代替候補が、同じプロパティ値を持つセグメントで構成される代替候補のコレクションを取得します。
| ConfidenceAlternates | IInkRecognitionAlternates** | out | 信頼度の境界ごとにグループ化された代替候補のコレクションを受け取るポインタである。 |
解説(Remarks)
このプロパティは、AlternatesWithConstantPropertyValues メソッドの代わりに使用できます。代替候補のプロパティの詳細については、RecognitionProperty 定数を参照してください。
既知の入力 InkStrokes コレクションを含み、かつ IInkRecognizer オブジェクトが代替候補を提供できる、最小の InkStrokes コレクションを取得します。
| Strokes | IInkStrokes* | inoptional | このコレクションを含む認識結果の代替候補について、最小のストローク コレクションを検索するために使用するストローク オブジェクトのコレクション。 |
| GetStrokesFromStrokeRanges | IInkStrokes** | out | このメソッドから制御が戻るときに、既知の入力ストローク コレクションを含み、かつ認識エンジンが代替候補を提供できる最小のストローク コレクションへのポインターが格納されます。 |
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
| パラメーターに無効なポインターが含まれていました。 | |
|
メソッド内で例外が発生しました。 |
|
strokes パラメーターが別の Ink オブジェクトに関連付けられています。 |
| 原因不明のエラーが発生しました。 |
解説(Remarks)
返されるコレクションは入力コレクションと一致する場合もありますが、入力されたすべてのストロークを含む最小の認識結果の一部にしか入力コレクションが一致しない場合には、それより大きくなることがあります。
このメソッドは、シングル クリックによる単語の選択に最も役立ちます。たとえば、クリックした単語を構成するストロークを返すには、ストロークをクリックし、IInkStrokeDisp オブジェクトの HitTest メソッドを呼び出してクリックされたストロークを取得し、その後 GetStrokesFromStrokeRanges を呼び出します。
ストローク範囲は、InkDisp オブジェクトが変更されるまで有効です。
代替候補内の指定した文字範囲を含む、最小の認識セグメントの集合に対応するコレクションを取得します。
| selectionStart | INT* | inout | この代替候補内における文字範囲の開始位置。selectionStart の位置にある文字は、認識されたテキストの範囲に含まれます。このパラメーターは、入力された選択範囲を含む 1 つ以上のセグメントからなる最小の認識単位の先頭に調整されます。selectionStart パラメーターは、認識代替候補のテキスト内の文字に対する 0 から始まるインデックスです。 |
| selectionLength | INT* | inout | 代替候補内における文字範囲の長さ。このパラメーターは 0 より大きい値である必要があります。このパラメーターは、入力された選択範囲を含む 1 つ以上のセグメントからなる最小の集合の長さに調整されます。 |
| GetStrokesFromTextRange | IInkStrokes** | out | このメソッドから制御が戻るときに、既知の認識テキスト範囲に対応するストロークのコレクションへのポインターが格納されます。 |
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
| パラメーターに無効なポインターが含まれていました。 | |
|
メソッド内で例外が発生しました。 |
| 原因不明のエラーが発生しました。 | |
| ストローク ハンドラーのヘルパー オブジェクトを割り当てられません。 |
解説(Remarks)
GetStrokesFromTextRange についてさらに説明するために、認識済みのストロークのコレクションがあり、それらのストロークに対する最有力の代替候補が「how are you」である場合を考えます。このメソッドに渡すパラメーターは、この文字列結果内の一部 (場合によっては全体) の範囲です。この代替候補は 5 つのセグメント (単語ごとに 1 つ、スペースごとに 1 つ) で構成されます。返されるストロークは、入力範囲全体を含む最小のセグメントの集合に対応します。selectionStart パラメーターが 0、selectionLength パラメーターが 5 で、結果文字列の「how a」に相当する範囲を作成した場合、返されるストロークは「how are」というセグメントを構成する認識済みストロークのすべてになります。これが、入力範囲を含む最小のセグメントの集合だからです。
単語ベースの認識エンジンでも文字ベースの認識エンジンでも、スペースは 1 文字として数えられます。入力された選択範囲がスペース文字に相当する場合、このメソッドは空の InkStrokes コレクションを返します。
既知の InkStrokes コレクションを含む代替候補を認識エンジンが返せる、認識済みテキストの最小の範囲を取得します。
| Strokes | IInkStrokes* | inoptional | それを含む代替候補を検索する対象となるストロークのコレクション。 |
| selectionStart | INT* | inout | このメソッドを呼び出した代替候補オブジェクト内において、渡されたストロークを含む最小の代替候補に一致する、認識済みテキスト範囲の開始位置。 |
| selectionLength | INT* | inout | このメソッドから制御が戻るときに、渡されたストロークを含む最小の代替候補の認識済みテキスト範囲内における、テキストの長さが格納されます。 |
戻り値
成功した場合は S_OK を返します。それ以外の場合は HRESULT のエラー コードを返します。
解説(Remarks)
指定したストロークの範囲に対応するテキストを取得するには、このメソッドを使用します。たとえば、9 本のストローク (文字ごとに 1 本、単語ごとに 3 本) で描かれた「how are you」というストロークのコレクションを考えます。6 番目と 7 番目のストローク (文字「e」と「y」に相当) からなるコレクションを渡すと、返されるテキスト範囲は「are you」を含む代替候補に一致し、選択の開始位置と長さもこの部分文字列に一致します。
このメソッドを呼び出した IInkRecognitionAlternate オブジェクトを分割した結果である、IInkRecognitionAlternates コレクションを取得します。
| PropertyType | LPWSTR | in | プロパティを識別する文字列値を指定します。使用できるプロパティの一覧については、RecognitionProperty を参照してください。 BSTR データ型の詳細については、Using the COM Library を参照してください。 |
| AlternatesWithConstantPropertyValues | IInkRecognitionAlternates** | out | このメソッドから制御が戻るときに、このメソッドを呼び出した代替候補を分割して構成された IInkRecognitionAlternates コレクションが格納されます。コレクション内の各 IInkRecognitionAlternate オブジェクトには、propertyType パラメーターに指定したプロパティの値が同一である、隣接した認識セグメントが含まれます。 |
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
| パラメーターに無効なポインターが含まれていました。 | |
| 認識範囲が無効です。 | |
|
処理中に例外が発生しました。 |
| 操作を完了するためのメモリを割り当てられません。 |
解説(Remarks)
コレクション内の各代替候補には、メソッドに渡したプロパティの値が同一である、隣接した認識セグメントが含まれます。
たとえば、次のような基準で元の代替候補を分割した代替候補を返すことができます。
- 認識結果における信頼度レベル (strong、intermediate、poor) の境界。
- 行の境界。
- 認識セグメントの境界。
LineAlternates プロパティは AlternatesWithConstantPropertyValues メソッドの代わりに使用でき、この場合、返される認識代替候補コレクション内の代替候補を分割する RecognitionProperty は LineNumber です。
代替候補の指定したプロパティの値を取得します。
| PropertyType | LPWSTR | in | 返す代替候補のプロパティを、RecognitionProperty オブジェクトの GUID のいずれかで指定します。 BSTR データ型の詳細については、Using the COM Library を参照してください。 | ||||||||||||||||||
| PropertyValue | VARIANT* | out | 制御が戻るときに、プロパティの種類の値がバイト配列として格納されます。この値の解釈は、プロパティの種類ごとに異なります。
VARIANT 構造体の詳細については、Using the COM Library を参照してください。 |
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
| 戻り値 | 説明 |
|---|---|
|
処理中に例外が発生しました。 |
| パラメーターに無効なポインターが含まれていました。 | |
| GUID の形式が無効です。 | |
| 原因不明のエラーが発生しました。 | |
| フラグが無効です。 | |
| 操作を完了するためのメモリを割り当てられません。 |
解説(Remarks)
Confidence プロパティや LineNumber プロパティのような対応するヘルパー プロパティが用意されていない RecognitionProperty オブジェクトのプロパティ値を取得するには、このメソッドを使用します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IInkRecognitionAlternate "{B7E660AD-77E4-429B-ADDA-873780D1FC4A}" #usecom global IInkRecognitionAlternate IID_IInkRecognitionAlternate "{}" #comfunc global IInkRecognitionAlternate_get_String 7 var #comfunc global IInkRecognitionAlternate_get_Confidence 8 var #comfunc global IInkRecognitionAlternate_get_Baseline 9 var #comfunc global IInkRecognitionAlternate_get_Midline 10 var #comfunc global IInkRecognitionAlternate_get_Ascender 11 var #comfunc global IInkRecognitionAlternate_get_Descender 12 var #comfunc global IInkRecognitionAlternate_get_LineNumber 13 var #comfunc global IInkRecognitionAlternate_get_Strokes 14 sptr #comfunc global IInkRecognitionAlternate_get_LineAlternates 15 sptr #comfunc global IInkRecognitionAlternate_get_ConfidenceAlternates 16 sptr #comfunc global IInkRecognitionAlternate_GetStrokesFromStrokeRanges 17 sptr,sptr #comfunc global IInkRecognitionAlternate_GetStrokesFromTextRange 18 var,var,sptr #comfunc global IInkRecognitionAlternate_GetTextRangeFromStrokes 19 sptr,var,var #comfunc global IInkRecognitionAlternate_AlternatesWithConstantPropertyValues 20 wstr,sptr #comfunc global IInkRecognitionAlternate_GetPropertyValue 21 wstr,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IInkRecognitionAlternate "{B7E660AD-77E4-429B-ADDA-873780D1FC4A}" #usecom global IInkRecognitionAlternate IID_IInkRecognitionAlternate "{}" #comfunc global IInkRecognitionAlternate_get_String 7 sptr #comfunc global IInkRecognitionAlternate_get_Confidence 8 sptr #comfunc global IInkRecognitionAlternate_get_Baseline 9 sptr #comfunc global IInkRecognitionAlternate_get_Midline 10 sptr #comfunc global IInkRecognitionAlternate_get_Ascender 11 sptr #comfunc global IInkRecognitionAlternate_get_Descender 12 sptr #comfunc global IInkRecognitionAlternate_get_LineNumber 13 sptr #comfunc global IInkRecognitionAlternate_get_Strokes 14 sptr #comfunc global IInkRecognitionAlternate_get_LineAlternates 15 sptr #comfunc global IInkRecognitionAlternate_get_ConfidenceAlternates 16 sptr #comfunc global IInkRecognitionAlternate_GetStrokesFromStrokeRanges 17 sptr,sptr #comfunc global IInkRecognitionAlternate_GetStrokesFromTextRange 18 sptr,sptr,sptr #comfunc global IInkRecognitionAlternate_GetTextRangeFromStrokes 19 sptr,sptr,sptr #comfunc global IInkRecognitionAlternate_AlternatesWithConstantPropertyValues 20 wstr,sptr #comfunc global IInkRecognitionAlternate_GetPropertyValue 21 wstr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。