キャンバスに描いた文字を認識する

スポンサーリンク

InkCanvasでは、文字を認識することが可能です。

文字認識を利用するには下準備が必要です。

最初に C:\Program Files\Reference Assemblies\Microsoft\Tablet PC\v1.7 にあるIAWinFX.dll, IACore.dll を参照設定に追加します。

次に、C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin にある IALoader.dll を参照設定に追加します。

最後に、System.Windows.Ink を Import(C#ではUsing)します。

文字を認識するには InkAnalyzer クラスのインスタンスを使用します。

はじめに、ジェスチャ認識したストロークを AddStrokes メソッドで追加し、ストロークを文字として認識するようにSetStrokesTypeメソッドに StrokeType.Writing を指定します。

最後に、Analyze メソッドを使用して認識した文字の解析を実行します。

解析を実行すると、描画されたストロークに近い文字の候補が作成されるので、GetRecognizedString メソッドで第1候補の文字を取得します。

そのほかの認識候補は GetAlternates メソッドを実行することで取得することが可能です。

下記はキャンバスに描いた文字を認識する例です。

キャンバスに描いた文字を認識する例

XAMLの例

<StackPanel>
    <StackPanel Orientation="Horizontal">
        <Button Name="btnAnalyze" Content="文字認識"/>
    </StackPanel>
    <InkCanvas Name="InkCanvas1" EditingMode="Ink" />
</StackPanel>

VBの例

'下記を追加
Imports System.Windows.Ink


' キャンバスに描かれた文字を認識する
Private Sub btnAnalyze_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnAnalyze.Click
    Dim theInkAnalyzer As New InkAnalyzer()

    'キャンバスに描かれた文字を認識するためにアナライザにストロークをセット
    theInkAnalyzer.AddStrokes(InkCanvas1.Strokes)
    theInkAnalyzer.SetStrokesType(InkCanvas1.Strokes, StrokeType.Writing)

    '文字を解析
    theInkAnalyzer.Analyze()

    '文字を解析した結果の第1候補を表示する
    MessageBox.Show(theInkAnalyzer.GetRecognizedString())

    'その他の候補を表示する
    Dim alternates As AnalysisAlternateCollection = theInkAnalyzer.GetAlternates()
    For Each alternate In alternates
        MessageBox.Show(alternate.RecognizedString)
    Next
End Sub

C#の例

// 下記を追加
using System.Windows.Ink;


/// キャンバスに描かれた文字を認識する
private void btnAnalyze_Click(object sender, RoutedEventArgs e)
{
    InkAnalyzer theInkAnalyzer = new InkAnalyzer();

    // キャンバスに描かれた文字を認識するためにアナライザにストロークをセット
    theInkAnalyzer.AddStrokes(inkCanvas1.Strokes);
    theInkAnalyzer.SetStrokesType(inkCanvas1.Strokes, StrokeType.Writing);

    // 文字を解析
    theInkAnalyzer.Analyze();

    // 文字を解析した結果の第1候補を表示する
    MessageBox.Show(theInkAnalyzer.GetRecognizedString());

    // その他の候補を表示する
    AnalysisAlternateCollection alternates = theInkAnalyzer.GetAlternates();
    foreach (var alternate in alternates)
        MessageBox.Show(alternate.RecognizedString);
}

 

タイトルとURLをコピーしました