Dot.Blog

C#, XAML, Xamarin, UWP/Android/iOS

Cognitive Services et Xamarin.Forms : Reconnaissance optique (OCR)

Après vous avoir présenté les Cognitive Services, après vous avoir montré comment les utiliser pour analyse une image (scène, personnes, émotions…) voici un autre exemple moins intelligent mais tout aussi puissant : l’OCR !

Les Cognitive Services

Je ne referai pas le résumé de cette présentation et je renverrai le lecteur intéressé – mais qui ne le serait pas ? ! – vers les deux articles suivants :

Je vous attends, le temps que vous lisiez…

Ca y est ? Vous êtes rapide !

L’OCR

L’OCR est une autre fonction de l’IA spécialisée dans la vision. Il ne s’agit donc pas d’un nouveau service par rapport à l’article portant sur l’analyse d’une photo. En tout cas dans la partie description de la photo, l’analyse des émotions étant un service à part que je n’utiliserai pas ici.

Tout le code présenté reste donc le même seule la partie fonctionnelle appelant le service est différente.

L’OCR on ne présente plus cela fait des lustres que l’informatique sait reconnaître avec plus ou moins de bonheur le texte présent dans une image. Les IA de Microsoft n’ont bien entendu que peu à voir avec les premiers programmes d’OCR d’il y a 20 ou 30 ans… Et c’est justement cette nouvelle puissance qu’il va être intéressant d’utiliser par exemple pour analyser des documents et prendre des décisions ou tout simplement réaliser un archivage automatique par mot clé d’images de documents (factures par exemple) sans aucune intervention de l’utilisateur. Cette puissance mise à disposition permet d’analyser une photo qui vient d’être prise, l’IA sachant reconnaître le texte (nombreuses langues supportées) même s’il est écrit de travers.

L’intérêt ?

Certes il existe déjà des logiciels très pointus pour faire de l’OCR. Oui, vous l’avez dit : des logiciels. C’est à dire des produits spécifiques à une plateforme en général, devant être installés, et pire devant être achetés très cher pour les meilleurs.

Je ne vous parle pas de la programmation, ayant écrit des applications très grosses de gestion documentaire utilisant l’OCR et l’ICR (écriture manuscrite) je sais de quoi je parle ! Ce sont des usines à gaz avec des API mal pratiques, des trucs COM infernaux, la gestion de licence qui se complique sérieusement en réseau et en multithreading, etc.

Alors l’intérêt des Cognitive Services devient immédiat pour toute personne réfléchissant un peu : pas d’installation, fonctionne en service donc sur toutes les plateformes, pas de soft à acheter ni installer côté user, et une programmation moderne en quelques lignes…

Un Exemple

On reprend le même code et la même logique que pour l’analyse des photos (voir le lien en haut de cet article). Seule la méthode déclenchée par le clic du bouton sera différente. De même je vais utiliser une autre fonction de CrossMedia (le plugin Xamlarin.Forms) pour demander d’accéder au répertoire des photos plutôt que de prendre une photo.

J’utilise comme document un exemple de facture US trouvé sur internet (je suppose qu’il n’y a pas de droits spéciaux pour un tel document factice sans intérêt) qui ressemble à cela :

Invoice-00984-Clean-page-001

(toujours pareil sur Dot.Blog, un clic sur l’image pour la version 100%)

L’analyse des Cognitive Services retourne des régions, des lignes, des mots. je n’entrerai pas dans les détails de cette API très claire. Par exemple grâce aux régions il est possible de choisir de ne regarder que certaines zones du document, ce qui peut être utile pour détecter le nom du client ou du fournisseur, le corps d’une facture, son total, etc.

Ici je vais uniquement extraire toutes les zones numériques exprimées en dollars et les convertir en double pour d’éventuels traitements ultérieurs (calcul de somme, extraire le total qui est le montant le plus élevé…).

Capture de la fenêtre de l’App (ici sous UWP machine locale) :

image

 

Si vous regardez la liste des montants vous retrouverez les valeurs de la facture. Vous remarquerez que les deux premiers montants (1 et 885) sont en réalité le même montant ($1,885) qui a été écrit avec une virgule pour les milliers ce qui trouble mon analyse simpliste, en “vrai” il faudrait un petit peu plus de code pour détecter de telles situations.

Le code

image

 

Toute la partie concernant les services est donc la même que dans l’article précédents sur l’analyse d’une photo. Seule différence la fonction appelée ici celle concernant l’OCR.

On récupère un résultat qui est fait de “Regions” contenant des “Lines” qui elles-mêmes contiennent des “Word” structure indiquant le texte détecté ainsi que les coordonnées de sa zone graphique et quelques autres infos. Je n’utilise que le texte ici. Ce dernier est testé pour ne choisir que les montants (précédés d’un signe dollar). Ce texte est alors traduit en double puis reformaté et ajouté à la liste qui est affichée dans la partie inférieure de l’App.

Conclusion

Quelques lignes de code et de l’OCR bien fait, puissant. Encore tout un nouveau champ d’investigation pour les Apps de demain !

Pas d’installation,d’achat de logiciel compliqué, pas de programmation COM à la noix limitée à Win32 de plus, que du bonheur…

Simplicité, efficacité, puissance, facilité de programmation, les Cognitive Services sont une vraie réussite. Pouvoir les utiliser avec les Xamarin.Forms est un excellent point car cela ouvre la porte à des Apps intelligentes proposant des services totalement nouveaux sans demander des millions de dollar de recherche et développement.

J’espère que cette petite série sur les Cognitive Services vous donnera envie d’aller plus loin, aussi bien avec eux qu’avec les Xamarin.Forms !

Stay Tuned !

blog comments powered by Disqus