dans la reconnaissance de caractères manuscrits (ICR)
Transcription
dans la reconnaissance de caractères manuscrits (ICR)
Utiliser les fonctionnalités du Tablet PC dans la reconnaissance de caractères manuscrits à l'encre digitale Martin Mohnhaupt Nice Data Systems, Rue de Lyon 42, CH 1203 Genève Email: [email protected] (Date: 8 mai 2005) Dans le développement de systèmes de traitement de formulaires manuscrits basés sur les technologies « digital paper » d'Anoto® [1] et du stylo numérique (Logitech® [2], Nokia® [3]), les applications doivent faire appel à des moteurs de reconnaissance capables de transformer l'écriture manuscrite en données informatiques efficacement et de façon fiable. Dans cet article, nous montrons que dans un environnement Windows® [4] (2000, XP), les techniques liées au Tablet PC offrent une alternative intéressante par rapport aux packages commerciaux courants. Pour nos besoins, nous avons développé un composant logiciel en Delphi® [5] permettant un accès aisé aux fonctionnalités « Ink » proposées par Microsoft. Mots-clé: Digital writing, ICR, Intelligent Character Recognition, Delphi, Tablet PC, Digital Ink. Version pdf: http://www.nicedata.com/files/art_icr_fr.pdf I. INTRODUCTION III. FONCTIONNALITÉS DU SERVEUR COM INKOBJ.DLL Au cours du développement d'une application de gestion de formulaires digitaux à l'attention des PME/PMI, nous avons été confrontés au problème du choix d'un moteur de reconnaissance de caractères manuscrits. Sur le marché, divers produits très performants existent, mais malheureusement, ils sont relativement coûteux pour nos moyens. Un stylo numérique utilisé sur le papier ad-hoc (brevet Anoto), permet d'enregistrer des informations dynamiques (positions, vitesses, forces d'appui) au cours du processus d'écriture, ainsi que le transfert de ces données vers un système informatique pour traitement (socle USB, interface Bluetooth). La grande similitude entre les données produites par un stylo digital et celles manipulées par système de type PDA1 ou Tablet PC nous a orienté vers les logiciels permettant de traiter les données « Ink » (ou encre digitale) sur de telles plateformes. Une fois enregistré, ce serveur COM publie un certain nombre d'objets ainsi que les méthodes associées, dont les plus utiles pour notre développement sont: • • • InkCollector: objet destiné à recueillir les traits (« InkStrokes ») pouvant provenir de sources diverses (stylo digital, tablette de digitalisation, souris). InkRecognizers: collection d'objets destinés à l'interprétation des traits, liés à un dictionnaire InkRecognizerContext: objet gérant le contexte de l'interprétation dont le but est d'optimiser le processus de reconnaissance. IV. AIDES À LA RECONNAISSANCE DE TRAITS ENCRÉS Il n'est pas suffisant d'installer le serveur COM, d'avoir accès à ses fonctionnalités, pour pouvoir effectuer une reconnaissance de caractères manuscrits. Plusieurs éléments supplémentaires permettent d'optimiser le processus. Les dictionnaires contiennent des mots spécifiques à la langue écrite. Microsoft en fournit pour les langues courantes (français, allemand, anglais-en, anglais-us, etc.) dans ses Recognition Packs [7] La présence d'un ou plusieurs dictionnaires est une condition sine qua non pour lancer une reconnaissance de caractères. Les « Input Scopes » limitent (ou orientent) la recherche dans le dictionnaire. Ce sont des expressions régulières répondant à une syntaxe propre dont un certain nombre sont prédéfinies. Par exemple « (!IS_URL) » indiquera au moteur de reconnaissance que l'on s'attend à trouver un URL dans le texte analysé. Des modes de reconnaissance peuvent être définis, en particulier un mode de coercition qui force le moteur de reconnaissance sur un Scope défini, ou un mode « mot entier » qui considère que la trace encrée est un mot sans espace. Des mots similaires (« Alternates ») peuvent être proposés par le moteur de reconnaissance. Dans ce cas, l'application doit gérer cette source d'informations supplémentaire par exemple à l'aide d'une interface de validation. Enfin, il est à envisager qu'après le processus de reconnaissance, ce soit l'applicatif qui gère la plausibilité du contenu en fonction de son propre dictionnaire. Cette façon de faire permettra de lier le contenu d'un champ manuscrit au II. LE TABLET PC SDK 2 Le Tablet PC SDK de Microsoft [6] permet le développement d'applications « Ink » avec les langages VB, C++ et C#. Il propose des exemples de programmes ainsi qu'une documentation extensive, complétée par celle disponible sur le site de Microsoft. Enfin, l'installateur enregistre un serveur COM3 capable de traiter les objets liés à l'encre digitale, inkobj.dll. Après l'installation du SDK, nous avons pu commencer nos développements dans le but d'intégrer les fonctionnalités offertes par inkobj.dll dans Delphi et de tester les capacités de la reconnaissance de caractères sur des données provenant d'un stylo Logitech IO. De plus, nous nous sommes interrogés sur le jeu de composants minimal à installer sur un poste de production. Pour réaliser ce projet, nous avons utilisé un environnement de développement très classique: Windows 2000/SP6 et Delphi version 6. L'application a aussi été testée dans une environnement Windows XP .NET. 1 Personal Digital Assistant Software development Kit 3 Common Object Model 2 -1- • • contexte métier. Dans le cas de la gestion de formulaires digitaux, cette possibilité est particulièrement intéressante pour atteindre un taux de reconnaissance élevé. La classe TIcrPoints, descendante de la classe Tlist, permet de travailler simplement avec des traits encrés. Un trait est constitué d'une suite temporelle de coordonnées P(X;Y). Il est notamment possible de charger ou sauvegarder une suite de traits. Sur disque, ces données sont stockées dans un fichier sous forme de coordonnées P(X; Y), les traits étant séparées par le point P(-1;-1). Dans l'application, il suffira de créer les instances des classes TIcr et TIcrPoints pour commencer à travailler. On assigne l'ensemble des traits à l'instance de reconnaissance comme suit: V. ACCÈS AU SERVEUR COM AVEC DELPHI Le SDK étant installé, il s'agissait de créer une unité Delphi d'interface avec la librairie de type tablet PC. Cette procédure vise à créer une unité qui définit les objets et méthodes du serveur COM (interface) ainsi que leur implémentation. Dans l'IDE4 de Delphi, il suffit d'activer « Projet > Import Type Library », puis de sélectionner « Microsoft Tablet PC Type Library 1.0 » avant de cliquer sur « Create Unit ». L'unité ainsi créée devra être incluse dans nos projets de développement. On notera que dans la version 6 de Delphi, quelques incohérences facilement corrigeables sont générées. FICr.DataSource := FIcrPoints Notre application de test, IcrWorkBench recueille les mouvements de la souris sur une fenêtre et les stocke dans une instance de TIcrPoints. L'instance de TIcr utilisera ces traits pour alimenter le moteur de reconnaissance. VI. CRÉATION ET DESTRUCTION D'OBJETS Les objets définis dans notre unité d'interface issue de la librairie de type seront créés par la méthode CoCreateInstance (...) de l'API5 Windows .Nous nous sommes abstenus d'utiliser les classes Delphi (Tink...) pour garder une maîtrise sur le code. Ainsi, la création d'une instance de InkCollector se fera comme suit: var hr: HRESULT; FIInkCollector: VIII. ENVIRONNEMENT D'EXÉCUTION Nous avons testé notre logiciel sur une machine Windows 2000/SP6 sans support .NET, ainsi que sur Windows XP Pro/SP2 avec le support .NET. Afin de pouvoir utiliser les techniques de reconnaissance de traits encrés proposés par Microsoft, il suffira de: IInkCollector // Create the InkCollector object hr := CoCreateInstance(CLASS_InkCollector, nil, CLSCTX_INPROC_SERVER, IID_IInkCollector, FIInkCollector); 1. charger les drivers du SDK, sans les composants de développement 2. installer les dictionnaires requis disponibles chez Microsoft if hr <> S_OK then begin raise Exception.Create('Could not create the ink collector base object.'); end; IX. ICR WORKBENCH Cette application nous permet de tester nos composants logiciels. Elle est composée d'une zone de saisie et d'une zone de résultats. Dans le menu, il est possible de spécifier certaines options de fonctionnement. Une fois l'instance de l'objet COM créée, il est naturellement possible d'accéder aux méthodes et propriétés qu'elle présente. Comme il est d'usage pour les instances d'objets COM, leur libération sera effectuée par l'assignation: Sur la zone de saisie, lorsque l'on presse le bouton droit de la souris, on démarre un trait. Le trait se termine lorsque l'on relâche le bouton. Dans le menu, on aura accès aux fonctions de chargement ou de sauvegarde, de choix de la langue et des « Input Scopes », et de démarrage de la reconnaissance. Ce programme est disponible tel quel, i.e. sans garantie aucune, sur notre site internet [8]. Il suffit de télécharger l'archive puis d'en copier le contenu dans un répertoire du système de fichiers. FIInkCollector := nil; Cette assignation a pour effet de décrémenter le nombre de références à l'objet (via la méthode interne _Release). Lorsque le nombre de références passe à zéro, la mémoire allouée dynamiquement est libérée et l'objet détruit. VII. STRUCTURE DES APPLICATIONS X. CONCLUSIONS Pour développer rapidement nos applicatifs, nous avons développé une classe Delphi (TIcr) descendante de TObject, dont le but est d'encapsuler l'unité de liaison avec la librairie de type Tablet PC et dont les fonctionnalités sont les suivantes: • • • • • • • 4 5 accès au mot reconnu et aux alternatives mesure du temps de reconnaissance Utilisant la configuration mentionnée, il nous a été possible de construire une application de traitement d'écriture manuscrite très rapidement. Des tests sur la fiabilité de la reconnaissance ont donné des résultats probants et permettent d'envisager ce montage dans le cadre d'applications de traitement rapide de formulaires. Ce point est renforcé par le fait qu'en général, il est demandé d'écrire lisiblement (caractères majuscules, séparés) lors du remplissage de formulaires. La présence d' »Input Scopes » prédifinis, natifs, offre la possibilité d'implémenter rapidement une validation par type de champs. Moyennant des traitements mineurs, il est possible de récupérer les données d'un stylo digital et d'alimenter le moteur de reconnaissance de caractères. création et destruction transparente des instances d'objets de la librairie COM listage des dictionnaires installés choix du dictionnaire actif définition du mode de reconnaissance définition de l' « Input Scope » chargement des traits encrés (InkStrokes) exécution de la reconnaissance (Recognize) Integrated Development Environment Application Programming Interface -2- Les temps de reconnaissance sont tout à fait intéressants. De plus, si l'on envisage des traitements par lots, ce point n'est pas réellement critique. Au niveau applicatif, il est possible d'imaginer des traitements par threads. Enfin, le coût des applications utilisant ce type de contexte peut être gardé dans les limites du raisonnable. Remerciements Nous tenons à remercier Alain Chardonnens qui a bien voulu relire le manuscrit et y apporter ses remarques constructives, ainsi que Catherine Fleury pour les corrections grammaticales et orthographiques. References & ressources [1] [2] [3] [4] [5] [6] [7] http://www.anoto.com http://www.logitech.ch http://www.nokia.com http://www.microsoft.com http://www.borland.com http://www.microsoft.com/windowsxp/tabletpc/ http://msdn.microsoft.com/mobility/tabletpc/tabletdownlo ads/default.aspx [8] http://www.nicedata.com/files/icrwb.zip Marques Microsoft, Anoto, Logitech, Nokia sont des marques déposées par leurs propriétaires respectifs. -3-