Esempio di riconoscimento avanzato

L'esempio di riconoscimento avanzato illustra le funzionalità avanzate dell'API (Application Programming Interface) di Microsoft Tablet PC Automation usata per il riconoscimento della grafia.

Esso comprende le seguenti funzionalità:

  • Enumerazione del riconoscitore installato
  • Creazione di un contesto di riconoscimento con un linguaggio specifico
  • Utilizzo dell'oggetto recognizer
  • Impostazione di elenchi di parole e factoid di riconoscimento
  • Uso delle guide per migliorare la qualità del riconoscimento
  • Riconoscimento dello sfondo dinamico
  • Riconoscimento dei movimenti

Le interfacce usate sono : IInkRecognizer, IInkRecoContext, IInkRecognitionResult, IInkRecognitionGuide, IInkWordList, IInkGesture, IInkCollector, IInkDisp, IInkRenderer, IInkDrawingAttributes, IInkStrokes e IInkStroke.

Intestazioni input penna e progetto

Includere prima di tutto le intestazioni per le interfacce di automazione tablet PC. Questi vengono installati con Tablet PC Platform SDK. Il file TpcError.h contiene le definizioni del codice di errore dell'API Tablet PC.

#include <msinkaut.h>
#include <msinkaut_i.c>
#include <TpcError.h>

Il file EventSinks.h definisce le interfacce IInkEventsImpl e IInkRecognitionEventsImpl e configura gli eventi RecognitionWithAlternates, Stroke e Gesture .

#include "EventSinks.h"

Il file ChildWnds.h contiene le definizioni delle classi CInkInputWnd e CRecoOutputWnd, derivate da CWindowImpl di ATL e usate per la creazione delle finestre figlio dell'esempio.

#include "ChildWnds.h"

Il file AdvReco.h dichiara la classe CAdvRecoApp , ovvero la classe della finestra dell'applicazione per questo esempio.

#include "AdvReco.h"

Inizializzazione della finestra dell'applicazione

Il metodo della Run finestra configura l'oggetto CAdvRecoApp , carica il menu e l'icona per la finestra, crea un oggetto InkRecognizerContext per il sistema di riconoscimento predefinito e avvia il ciclo di messaggi della finestra.

Il metodo OnCreate della finestra gestisce l'evento WM_CREATE e crea le finestre figlio. Un oggetto InkCollector si connette all'origine evento dell'agente di raccolta input penna e abilita l'input penna nella finestra di input. Crea quindi un oggetto InkRecognizerGuide e usa la proprietà Renderer dell'agente di raccolta input penna per convertire i rettangoli della casella della guida di riconoscimento nello spazio input penna. Infine, il metodo OnCreate crea un oggetto InkWordList .

Gestione degli eventi dell'agente di raccolta input penna

Il metodo OnStroke della finestra gestisce l'evento Stroke dell'agente di raccolta input penna. Il nuovo oggetto IInkStrokeDisp viene aggiunto alle InkStrokes della proprietà Ink dell'agente di raccolta input penna.

Il metodo OnGesture della finestra gestisce l'evento Gesture dell'agente di raccolta input penna. Il metodo OnGesture identifica innanzitutto il movimento, usando il movimento di confidenza più alto e verifica se la finestra supporta questo particolare movimento. Se il movimento è supportato, il rettangolo di delimitazione del movimento viene invalidato, perché il movimento viene rimosso dall'insieme strokes. Se il movimento non è supportato, l'evento Gesture viene annullato, causando la generazione di un evento Stroke da parte dell'agente di raccolta input penna. Infine, la finestra dei risultati viene aggiornata.

Gestione degli eventi di contesto di Riconoscimento

Il metodo OnRecognitionWithAlternates della finestra gestisce l'evento RecognitionWithAlternates del contesto di riconoscimento. Il metodo OnRecognitionWithAlternates visualizza i risultati del riconoscimento nella finestra dei risultati.

Gestione dei comandi di menu

Il metodo OnRecognizer della finestra gestisce i comandi nel menu Riconoscimento. Se è stato selezionato il comando Default , viene usato il metodo GetDefaultRecognizers di InkRecognizers per recuperare il riconoscitore predefinito; in caso contrario, viene recuperato il riconoscitore selezionato. Viene quindi creato e usato un contesto di riconoscimento e la barra di stato e vengono aggiornati menu e barra di stato.

Il metodo OnFactoidWordlist della finestra gestisce il comando Use Wordlist nel menu Factoid . La proprietà Strokes del contesto di riconoscimento è impostata su NULL per reimpostare il contesto del riconoscitore. Se l'opzione Utilizza wordlist è disattivata, la proprietà WordList del contesto di riconoscimento è impostata su NULL; in caso contrario, la proprietà WordList del contesto di riconoscimento è impostata sull'oggetto InkWordList creato nel metodo OnCreate . Infine, viene chiamato il metodo BackgroundRecognizeWithAlternates dell'agente di raccolta input penna nel contesto del riconoscimento, viene chiamato il metodo BackgroundRecognizeWithAlternates del contesto di riconoscimento e viene aggiornato il menu.

Il metodo OnFactoid della finestra gestisce i comandi factoid nel menu Factoid . Imposta innanzitutto la proprietà Strokes del contesto di riconoscimento su NULL, imposta la proprietà Factoid del contesto di riconoscimento sul factoid selezionato e riassegna gli InkStroke dell'agente di raccolta input penna al contesto di riconoscimento. Se l'oggetto Factoid è supportato dal contesto dello strumento di riconoscimento, viene chiamato il metodo BackgroundRecognizeWithAlternates del contesto di riconoscimento; in caso contrario, viene visualizzato un messaggio di errore. Infine, vengono aggiornati il menu e la barra di stato.

Il metodo OnGuide della finestra gestisce i comandi nel menu Guida . Se il contesto di riconoscimento supporta le opzioni della guida, il metodo OnGuide imposta la proprietà Strokes del contesto di riconoscimento su NULL, imposta la proprietà Guide del contesto di riconoscimento sull'impostazione della guida selezionata, riassegna Gli inkStroke dell'agente di raccolta input penna al contesto di riconoscimento e chiama il metodo BackgroundRecognizeWithAlternates del contesto di riconoscimento. In caso contrario, viene visualizzato un messaggio di errore. Viene infine aggiornata la finestra di input, il menu e la barra di stato.

Il metodo OnMode della finestra gestisce i comandi nel menu Modalità . Disabilita l'agente di raccolta input penna, aggiorna la proprietà CollectionMode dell'agente di raccolta input penna, aggiorna il menu e mostra o nasconde gli elenchi di movimenti. Infine, l'agente di raccolta input penna è abilitato.

Il metodo OnRecognize della finestra gestisce il comando Recognize nel menu Input penna. Chiama il metodo EndInkInput del contesto di riconoscimento per impedire l'aggiunta dell'input penna al contesto del riconoscimento. Ciò è talvolta necessario, perché non tutti i riconoscitori supportano il riconoscimento parziale. Chiama quindi il metodo Recognize del contesto di riconoscimento e passa i risultati al metodo OnRecognitionWithAlternates della finestra. Infine, gli inkStroke dell'agente di raccolta input penna vengono riassegnati al contesto del riconoscitore.

Il metodo OnClear della finestra gestisce il comando Cancella nel menu Input penna . Elimina i tratti dalla proprietà Ink dell'agente di raccolta input penna, rilascia l'insieme strokes precedente e ne crea uno nuovo per la proprietà Ink dell'agente di raccolta input penna e associa la nuova raccolta tratti al contesto del riconoscitore.

Il metodo OnExit della finestra gestisce il comando Exit nel menu Input penna e genera l'evento WM_CLOSE.

Metodi helper

Il metodo LoadMenu della finestra viene chiamato dal metodo Run della finestra e aggiunge l'elenco dei riconoscitori supportati e l'elenco dei factoid supportati al menu. Prima di tutto, recupera gli InkRecognizers. Scorre quindi i riconoscitori disponibili e seleziona solo quelli con un elenco di lingue nella proprietà Languages , che aggiunge al menu Riconoscimento . Infine, popola il menu Factoid con l'elenco di factoid definiti come costante globale.

Il metodo UseRecognizer della finestra viene chiamato dal metodo OnRecognizer della finestra quando l'utente seleziona un nuovo sistema di riconoscimento. Crea un contesto di riconoscimento, scollega il contesto precedente dal sink dell'evento di riconoscimento, cancella e rilascia il contesto precedente e associa il nuovo contesto al sink dell'evento di riconoscimento.

Il metodo UseRecognizer controlla quindi la proprietà Capabilities del riconoscitore , che restituisce un valore InkRecognizerCapabilities . Se il sistema di riconoscimento supporta l'input allineato, il comando Righe del menu Guida è abilitato. Se il sistema di riconoscimento supporta l'input boxed, il comando Boxes è abilitato. Se il riconoscitore non supporta l'input libero, il comando Nessuno è disabilitato. Se la selezione corrente della guida non è supportata, vengono aggiornate sia la proprietà Guide del contesto del sistema di riconoscimento che il menu.

Il metodo UseRecognizer tenta quindi di impostare le proprietà WordList e Factoid del contesto di riconoscimento. Se una delle due impostazioni non è supportata dal sistema di riconoscimento, viene usato il valore predefinito e il menu viene aggiornato.

Infine, il metodo UseRecognizer associa la proprietà Strokes dell'oggetto InkDisp dell'agente di raccolta input penna al contesto di riconoscimento, modifica il tipo di carattere della finestra di output su uno supportato dalla lingua del riconoscitore, reimposta la finestra di output e aggiorna i risultati del riconoscimento chiamando il metodo BackgroundRecognizeWithAlternates del contesto di riconoscimento.

Il metodo GetGestureName della finestra viene chiamato dal metodo OnGesture della finestra. Cerca il movimento e restituisce un indice al nome del movimento, archiviato in una tabella di stringhe nel file AdvReco.rc.