Exemple de reconnaissance avancée
L’exemple de reconnaissance avancée illustre les fonctionnalités avancées de l’interface de programmation d’application (API) Microsoft Tablet PC Automation utilisée pour la reconnaissance de l’écriture manuscrite.
Microsoft System Center ASP.NET 2.0 2007 offre les fonctionnalités suivantes :
- Énumération du module de reconnaissance installé
- Création d’un contexte de reconnaissance avec un langage spécifique
- Utilisation de l’objet recognizer
- Définition des listes de faits et de mots de reconnaissance
- Utilisation de guides pour améliorer la qualité de la reconnaissance
- Reconnaissance dynamique en arrière-plan
- Reconnaissance des mouvements
Les interfaces utilisées sont les suivantes : IInkRecognizer, IInkRecoContext, IInkRecognitionResult, IInkRecognitionGuide, IInkWordList, IInkGesture, IInkCollector, IInkDisp, IInkRenderer, IInkDrawingAttributes, IInkStrokes et IInkStroke.
En-têtes d’entrée manuscrite et de projet
Tout d’abord, incluez les en-têtes pour les interfaces Tablet PC Automation. Ils sont installés avec le Kit de développement logiciel (SDK) tablet PC Platform. Le fichier TpcError.h contient les définitions de code d’erreur de l’API Tablet PC.
#include <msinkaut.h>
#include <msinkaut_i.c>
#include <TpcError.h>
Le fichier EventSinks.h définit les interfaces IInkEventsImpl et IInkRecognitionEventsImpl et configure les événements RecognitionWithAlternates, Stroke et Gesture .
#include "EventSinks.h"
Le fichier ChildWnds.h contient les définitions des classes CInkInputWnd et CRecoOutputWnd, qui sont dérivées du CWindowImpl d’ATL et utilisées pour créer les fenêtres enfants de l’exemple.
#include "ChildWnds.h"
Le fichier AdvReco.h déclare la classe CAdvRecoApp , qui est la classe de fenêtre d’application pour cet exemple.
#include "AdvReco.h"
Initialisation de la fenêtre Application
La méthode de Run
la fenêtre configure l’objet CAdvRecoApp , charge le menu et l’icône de la fenêtre, crée un objet InkRecognizerContext pour le module de reconnaissance par défaut et démarre la boucle de message de la fenêtre.
La méthode OnCreate de la fenêtre gère l’événement WM_CREATE et crée les fenêtres enfants. Un objet InkCollector se connecte à la source d’événements du collecteur d’encre et active l’entrée manuscrite dans la fenêtre d’entrée. Ensuite, il crée un objet InkRecognizerGuide et utilise la propriété Renderer du collecteur d’encre pour convertir les rectangles de la zone de repère de reconnaissance en espace d’entrée manuscrite. Enfin, la méthode OnCreate crée un objet InkWordList .
Gestion des événements du collecteur d’encre
La méthode OnStroke de la fenêtre gère l’événement Stroke du collecteur d’encre. Le nouvel objet IInkStrokeDisp est ajouté à la propriété InkStrokes du collecteur d’encre .
La méthode OnGesture de la fenêtre gère l’événement Gesture du collecteur d’encre. La méthode OnGesture identifie le mouvement, en utilisant d’abord le geste de confiance le plus élevé, et vérifie si la fenêtre prend en charge ce mouvement particulier. Si le mouvement est pris en charge, le cadre englobant du mouvement est invalidé, car le mouvement est supprimé de la collection de traits. Si le mouvement n’est pas pris en charge, l’événement De mouvement est annulé, ce qui provoque le collecteur d’encre à déclencher un événement Stroke . Enfin, la fenêtre de résultats est mise à jour.
Gestion des événements de contexte recognizer
La méthode OnRecognitionWithAlternates de la fenêtre gère l’événement RecognitionWithAlternates du contexte de reconnaissance. La méthode OnRecognitionWithAlternates affiche les résultats de la reconnaissance dans la fenêtre des résultats.
Gestion des commandes de menu
La méthode OnRecognizer de la fenêtre gère les commandes du menu Recognizer. Si la commande Default a été sélectionnée, la méthode GetDefaultRecognizer de InkRecognizers est utilisée pour récupérer le module de reconnaissance par défaut ; sinon, le module de reconnaissance sélectionné est récupéré. Ensuite, un contexte de reconnaissance est créé et utilisé, et le menu et status barre sont mis à jour.
La méthode OnFactoidWordlist de la fenêtre gère la commande Utiliser Wordlist dans le menu Factoid . La propriété Strokes du contexte de reconnaissance est définie sur NULL pour réinitialiser le contexte du module de reconnaissance. Si l’option Utiliser Wordlist est désactivée, la propriété WordList du contexte de reconnaissance a la valeur NULL ; sinon, la propriété WordList du contexte de reconnaissance est définie sur inkWordList qui a été créée dans la méthode OnCreate . Enfin, les InkStrokes du collecteur d’encre sont resserrés au contexte de reconnaissance, la méthode BackgroundRecognizeWithAlternates du contexte de reconnaissance est appelée et le menu est mis à jour.
La méthode OnFactoid de la fenêtre gère les commandes factoid dans le menu Factoid . Il définit d’abord la propriété Strokes du contexte de reconnaissance sur NULL, définit la propriété Factoid du contexte de reconnaissance sur le factoid sélectionné et réaffecte les InkStrokes du collecteur d’encre au contexte de reconnaissance. Si l’objet Factoid est pris en charge par le contexte de reconnaissance, la méthode BackgroundRecognizeWithAlternates du contexte de reconnaissance est appelée ; sinon, un message d’erreur s’affiche. Enfin, le menu et la barre status sont mis à jour.
La méthode OnGuide de la fenêtre gère les commandes du menu Guide . Si le contexte de reconnaissance prend en charge les options de guide, la méthode OnGuide définit la propriété Strokes du contexte de reconnaissance sur NULL, définit la propriété Guide du contexte de reconnaissance sur le paramètre de guide sélectionné, réaffecte les InkStrokes du collecteur d’encre au contexte de reconnaissance et appelle la méthode BackgroundRecognizeWithAlternates du contexte de reconnaissance. Sinon, un message d’erreur s’affiche. Enfin, la fenêtre d’entrée, le menu et la barre status sont mis à jour.
La méthode OnMode de la fenêtre gère les commandes du menu Mode . Il désactive le collecteur d’encre, met à jour la propriété CollectionMode du collecteur d’encre, met à jour le menu et affiche ou masque les listes de mouvements. Enfin, le collecteur d’encre est activé.
La méthode OnRecognize de la fenêtre gère la commande Reconnaître dans le menu Encre. Il appelle la méthode EndInkInput du contexte de reconnaissance pour empêcher l’ajout de l’entrée manuscrite au contexte de reconnaissance. Cela est parfois nécessaire, car tous les éléments de reconnaissance ne prennent pas en charge la reconnaissance partielle. Ensuite, il appelle la méthode Recognize du contexte de reconnaissance et transmet les résultats à la méthode OnRecognitionWithAlternates de la fenêtre. Enfin, les InkStrokes du collecteur d’encre sont réaffectés au contexte de reconnaissance.
La méthode OnClear de la fenêtre gère la commande Effacer dans le menu Encre . Il supprime les traits de la propriété Ink du collecteur d’encre, libère l’ancienne collection de traits et en crée une nouvelle pour la propriété Ink du collecteur d’encre et attache la nouvelle collection de traits au contexte de reconnaissance.
La méthode OnExit de la fenêtre gère la commande Exit dans le menu Encre et déclenche l’événement WM_CLOSE.
Méthodes d'assistance
La méthode LoadMenu de la fenêtre est appelée à partir de la méthode Run de la fenêtre et ajoute la liste des modules de reconnaissance pris en charge et la liste des factoids pris en charge au menu. Tout d’abord, il récupère les inkRecognizers. Ensuite, il itère à travers les modules de reconnaissance disponibles et sélectionne uniquement ceux qui ont une liste de langues dans la propriété Languages , qu’il ajoute au menu Recognizer . Enfin, il remplit le menu Factoid avec la liste des factoids définis comme une constante globale.
La méthode UseRecognizer de la fenêtre est appelée à partir de la méthode OnRecognizer de la fenêtre lorsque l’utilisateur sélectionne un nouveau module de reconnaissance. Il crée un contexte de reconnaissance, détache l’ancien contexte du récepteur d’événements du module de reconnaissance, efface et libère l’ancien contexte, et attache le nouveau contexte au récepteur d’événements du module de reconnaissance.
Ensuite, la méthode UseRecognizer vérifie la propriété Capabilities du module de reconnaissance, qui retourne une valeur InkRecognizerCapabilities . Si le module de reconnaissance prend en charge l’entrée en ligne, la commande Lignes du menu Guide est activée. Si le module de reconnaissance prend en charge l’entrée en boîte, la commande Boîtes est activée. Si le module de reconnaissance ne prend pas en charge l’entrée gratuite, la commande None est désactivée. Si la sélection actuelle du guide n’est pas prise en charge, la propriété Guide du contexte du module de reconnaissance et le menu sont mis à jour.
Ensuite, la méthode UseRecognizer tente de définir les propriétés WordList et Factoid du contexte de reconnaissance. Si l’un des paramètres n’est pas pris en charge par le module de reconnaissance, la valeur par défaut est utilisée et le menu est mis à jour.
Enfin, la méthode UseRecognizer attache la propriété Strokes de l’objet InkDisp du collecteur d’encre au contexte de reconnaissance, modifie la police de la fenêtre de sortie en une police prise en charge par le langage du module de reconnaissance, réinitialise la fenêtre de sortie et met à jour les résultats de la reconnaissance en appelant la méthode BackgroundRecognizeWithAlternates du contexte de reconnaissance.
La méthode GetGestureName de la fenêtre est appelée à partir de la méthode OnGesture de la fenêtre. Il recherche le mouvement et retourne un index au nom du mouvement, qui est stocké dans une table de chaîne dans le fichier AdvReco.rc.