Exemple de reconnaissance avancée

L’exemple de reconnaissance avancée illustre des fonctionnalités avancées de l’interface de programmation d’applications (API) d’automatisation de Microsoft Tablet PC 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 module de reconnaissance avec un langage spécifique
  • Utilisation de l’objet Recognizer
  • Définition des Factoid de reconnaissance et des listes de mots
  • Utilisation de guides pour améliorer la qualité de la reconnaissance
  • Reconnaissance dynamique en arrière-plan
  • Reconnaissance de mouvement

Les interfaces utilisées sont les suivantes : IInkRecognizer, IInkRecoContext, IInkRecognitionResult, IInkRecognitionGuide, IInkWordList, IInkGesture, IInkCollector, IInkDisp, IInkRenderer, IInkDrawingAttributes, IInkStrokes et IInkStroke.

en-têtes d’encre et de Project

Tout d’abord, incluez les en-têtes pour les interfaces d’automatisation Tablet PC. Celles-ci sont installées avec le kit de développement logiciel (SDK) de plateforme Tablet PC. Le fichier TpcError. h contient les définitions des codes 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, Strokeet geste .

#include "EventSinks.h"

Le fichier ChildWnds. h contient les définitions des classes CInkInputWnd et CRecoOutputWnd, qui sont dérivées de 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 d’application

La méthode de la fenêtre Run 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 de l’événement du collecteur d’encre et active l’entrée d’encre 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 boîte du repère de reconnaissance en espace d’encre. 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é au InkStrokes de la propriété Ink du collecteur Ink.

La méthode OnGesture de la fenêtre gère l’événement de mouvement du collecteur d’encre. La méthode OnGesture identifie le mouvement, en commençant par le geste de confiance le plus élevé, et vérifie si la fenêtre prend en charge ce geste particulier. Si le mouvement est pris en charge, la zone englobante du geste est invalidée, 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 amène le collecteur d’encre à déclencher un événement Stroke . Enfin, la fenêtre résultats est mise à jour.

Gestion des événements de contexte de reconnaissance

La méthode OnRecognitionWithAlternates de la fenêtre gère l’événement RecognitionWithAlternates du contexte du module de reconnaissance. La méthode OnRecognitionWithAlternates affiche les résultats de la reconnaissance dans la fenêtre résultats.

Gestion des commandes de menu

La méthode OnRecognizer de la fenêtre gère les commandes dans le menu du module de reconnaissance. Si la commande par défaut 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 ; dans le cas contraire, le module de reconnaissance sélectionné est récupéré. Ensuite, un contexte de module de reconnaissance est créé et utilisé, et le menu et la barre d’État sont mis à jour.

La méthode OnFactoidWordlist de la fenêtre gère la commande use de la personne dans le menu Factoid . La propriété Strokes du contexte du module de reconnaissance est définie sur null pour réinitialiser le contexte du module de reconnaissance. Si vous désactivez l’option utiliser la balise de la personne, la propriété texte du contexte du module de reconnaissance est définie sur null. Sinon, la propriété de la balise de contexte du module de reconnaissance est définie sur le InkWordList qui a été créé dans la méthode OnCreate . Enfin, le InkStrokes du collecteur d’encres est rattaché au contexte du module de reconnaissance, la méthode BackgroundRecognizeWithAlternates du contexte du module 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 du module de reconnaissance sur la valeur null, définit la propriété Factoid du contexte du module de reconnaissance sur le Factoid sélectionné et réaffecte le InkStrokes du collecteur d’encre au contexte du module de reconnaissance. Si l’objet Factoid est pris en charge par le contexte du module de reconnaissance, la méthode BackgroundRecognizeWithAlternates du contexte du module de reconnaissance est appelée ; dans le cas contraire, un message d’erreur s’affiche. Enfin, le menu et la barre d’État sont mis à jour.

La méthode OnGuide de la fenêtre gère les commandes dans le menu du repère . Si le contexte du module de reconnaissance prend en charge les options du repère, la méthode OnGuide affecte la valeur null au contexte du contexte du module de reconnaissance, définit la propriété du repère du contexte du module de reconnaissance sur le paramètre du repère sélectionné, réaffecte le InkStrokes du collecteur d’encre au contexte du module de reconnaissance et appelle la méthode BackgroundRecognizeWithAlternates du contexte du module de reconnaissance. Dans le cas contraire, un message d’erreur s’affiche. Enfin, la fenêtre d’entrée, le menu et la barre d’État sont mis à jour.

La méthode OnMode de la fenêtre gère les commandes du menu mode . Il désactive le collecteur d’encres, 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 Recognize dans le menu Ink. Elle appelle la méthode EndInkInput du contexte de reconnaissance pour empêcher l’ajout de l’encre au contexte du module de reconnaissance. Cela est parfois nécessaire, car tous les identifiants ne prennent pas en charge la reconnaissance partielle. Elle appelle ensuite la méthode Recognize du contexte de reconnaissance et transmet les résultats à la méthode OnRecognitionWithAlternates de la fenêtre. Enfin, le InkStrokes du collecteur d’encres est réaffecté au contexte du module de reconnaissance.

La méthode OnClear de la fenêtre gère la commande Clear dans le menu Ink . Elle supprime les traits de la propriété Ink du collecteur d’encre, libère l’ancienne collection Strokes et en crée une pour la propriété Ink du collecteur d’encre, puis attache la nouvelle collection Strokes au contexte de module de reconnaissance.

La méthode OnExit de la fenêtre gère la commande quitter dans le menu Ink 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 module de reconnaissance pris en charge et la liste des Factoids prises en charge au menu. Tout d’abord, elle récupère InkRecognizers. Il itère ensuite au sein des module de reconnaissance disponibles et sélectionne uniquement ceux qui ont une liste de langues dans la propriété languages , qu’il ajoute au menu du module de reconnaissance . Enfin, il remplit le menu Factoid avec la liste de Factoids définie en tant que 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 module de reconnaissance, détache l’ancien contexte du récepteur d’événements de reconnaissance, efface et libère l’ancien contexte et attache le nouveau contexte au récepteur d’événements de la reconnaissance.

Ensuite, la méthode UseRecognizer vérifie la propriété des capacités 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 du repère est activée. Si le module de reconnaissance prend en charge les entrées boxed, la commande cases est activée. Si le module de reconnaissance ne prend pas en charge l’entrée libre, la commande None est désactivée. Si la sélection du repère en cours n’est pas prise en charge, la propriété Guide du contexte de module de reconnaissance et le menu sont mis à jour.

Ensuite, la méthode UseRecognizer tente de définir les propriétés de la recherche et de la Factoid du contexte du module 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 Ink au contexte du module de reconnaissance, modifie la police de la fenêtre de sortie en une valeur prise en charge par la langue 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. Elle recherche le mouvement et retourne un index au nom du geste, qui est stocké dans une table de chaînes du fichier AdvReco. rc.