墨迹识别

并非所有应用程序都需要使用识别,但由于大多数应用程序都以文本作为其主要数据类型进行设计,因此将墨迹转换为文本的功能非常有价值。 可以使用 Tablet PC 平台 API 的识别功能来查询有关可用识别引擎的信息,例如它们识别的语言。 然后,可以将 Ink 对象中的 Strokes 集合发送到识别引擎,并让其返回一个 RecognitionResult 对象。

RecognizerContext 对象

RecognizerContext 对象是给定识别器实例化。 RecognizerContext 对象使你能够以同步或异步方式识别给定的笔划集合。 异步识别时, RecognizerContext 对象在事件回调中向应用程序返回 RecognitionResult 对象。

识别器和识别器对象

一台平板电脑可能有一个或多个可用的识别器。 可以查询识别器的集合以确定要使用的识别器。 识别器提供有关其功能的特定信息,例如它可以识别的语言和制造商。

若要确定是否至少安装了一个识别器,请实例化 InkRecognizerContext 对象,如以下 C++ 和 C# 代码示例所示。 如果识别器不存在,则对 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 集合中的备用结果集合。 可以使用生成该对象的原始 Strokes 集合持久保存 RecognitionResult 对象。

RecognizerGuide 结构

识别器参考线可以包含行和列,并为识别器提供更好的上下文来执行识别。 例如,你可以在用户屏幕上绘制水平线,这几乎就像一张有规则的纸一样,显示手写应发生的位置 (这种类型的参考线仅包含行,而没有) 列。 如果用户在行上写字,而不是一些任意空格,则识别准确性会提高。

下图显示了具有两行输入的 RecognizerGuide 结构。

显示双行识别器指南的插图

下图显示了具有四列和三行的 RecognizerGuide 结构。

显示三乘四识别器指南的插图

有关使用 RecognizerGuide 结构的详细信息,请参阅 RecognizerGuide 参考主题。