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-