Google api vision ne comprend pas bien le gaulois

Analyser les textes politiques ?

Avec la primaire de la droite Française et bientôt celle de la gauche, l’idée d’analyser les différents programmes politiques est tentante: est-ce que l’IA pourrait apporter quelque chose.

Las, un premier obstacle apparaît tout de suite avec le site de Françoise Fillon : ses œuvres sont publiées en ligne avec  le logiciel Calameo, qui, sans version payante, ne permet pas de récupérer les textes, ni sous forme de fichier, ni même par du copier-coller.

« Fail as soon as possible » est une réalité pour avancer : on va pouvoir tester les services OCR des api Google vision !

Recueil de copies d’écrans en png

Le recueil des images se fait par simple capture d’écran, ici avec le logiciel Gadwin. Son paramétrage indique que faire après une capture d’écran (pleine ou sélective) : ici un archivage de fichiers avec une règle de nommage automatique :

gadwin

A partir de là, et en mettant le navigateur en plein écran, il ne reste plus qu’à faire défiler les pages et à appuyer sur impression d’écran pour obtenir une collection d’images des 50 pages du livre :

fillont-11-28-16-at-05-49-11-pm

Création d’un compte chez Google

Il suffit d’une adresse mail et d’un numéro de carte bancaire ( qui ne sera pas débitée ) pour ouvrir un compte chez Google. Il vous fait crédit de 300€ qui se font ponctionner d’environ 7€ sans qu’on sache bien d’où ça sort : le suivi de facturation n’indique rien. (Je suppose que cela correspond à mon choix d’ouvrir une demande pour les API Google Cloud, mais je n’ai pas encore trouvé les tarifs )

facturationgoogle

Vision API

Dans la liste des services, on s’intéresse au service Vision Api, tout en bas de la liste :

fillont-11-28-16-at-06-54-11-pm

Recherche de la doc de l’api : la galère

Soyons franc : c’est une galère pour trouver comment utiliser l’OCR, qui est une sous-partie de la Vision API. Je cherchais le plus simple exemple possible : envoyer une image et récupérer le texte. Il y a bien un exemple de traitement de lots, mais il dépend d’une base de données et nécessite de l’installation : trop lourd. Et impossible de trouver le détail des appels et encore moins  la documentation des données en retour : c’est en analysant le JSON résultat que j’ai pu remonter et reconstituer des éléments pour aller chercher, ensuite, structure par structure, un peu de documentation. ( Peut mieux faire si on compare aux documentations claires des services IBM Bluemix )

Obtenir des credentials : compte de service

Une autre galère de débutant : comprendre comment marchent les autorisations pour appeler le service. Dans mon cas, je veux tester en python depuis mon pc où se trouveront le programme et les images.

J’ai trouvé, mais je ne suis pas sûr d’avoir pris le plus simple en optant pour un compte de service :

comptedeservice

Une fois créé, ce compte permet d’obtenir un fichier json avec une clé privée à conserver à l’abri. Dans mon cas, j’utilise un dossier crypté que j’ouvre si nécessaire et sur lequel je conserve ce fichier.

Un peu de code

Les appels de l’API sont pour des lots d’images. En partant d’un exemple en ligne, je l’ai réduit pour tester une seule image à la fois avec le code le plus simple possible. Ci-dessous le code, mais en image ( je n’ai pas encore trouvé comment configurer wordpress pour avoir du code en texte avec coloration syntaxique ).

Un bon paradoxe : Pour obtenir ce code sans le retaper, vous pouvez utiliser la reconnaissance OCR de l’api Vision.Et pour cela, utilisez donc le code ci-dessous.

 Pointeur des credentials via une variable d’environnement :CodePart1

 Classe pour empaqueter les appels

code part2

Appel direct et un seul fichier image en dur

code part 3

Essais et résultats

On passe une première image, à la lettre A comme Ambition ( tout un programme ) :

fillont-11-28-16-at-06-37-42-pm

quelques secondes d’attente avant d’ obtenir un flux de résultats.

Bien mais pas parfait : pas de « à »

On trouve d’abord une détection de la langue suivie d’une longue ligne avec tout le texte dont les sauts de ligne (\n) à l’intérieur. Ici, le code précédent les a éclatées pour mieux voir :

OCR fillon

On peut remarquer que les textes sont captés quelles que soient leurs tailles respectives : Calameo écrit en petit, blanc sur noir tout à gauche du navigateur a été traqué, le titre multicolore « Ambition » avec une grande taille de police est reconnu, etc.
( Mes premiers essais embarquaient aussi dans l’image le haut du navigateur: les noms des onglets, l’url en cours et même les noms des favoris étaient bien décodés ).

Dans l’exemple ci-dessus, les « à » ne sont jamais reconnus et il y a un mot raté sur la ligne  « je suis candidat à » devenu « je suis did ».

Un coup de zoom

Pour expérimenter, j’ai relancé avec le même texte mais avec une image un peu plus grosse. Cette fois le texte « candidat » est reconnu, mais toujours pas de « à »  (plus un « être » qui n’a plus d’accent. Il en avait un, faux, au premier tour):

pasGaulois

Suite des résultats : les bribes de texte avec leurs positions

A noter qu’il y a au début (ça a été retiré ci-dessous )  des coordonnées qui ne mentionnent pas de Y, mais deux X, sans que je trouve jusque là la documentation associée. Après, on retrouve les différentes bribes avec les coordonnées des polygones qui les contiennent :

bribes

On pourrait assez facilement en déduire la taille des polices respectives, reconstituer les lignes et les sauts de page,  écarter des zones inintéressantes, etc.

Perspectives

Sous réserve que Google complète sa panoplie avec nos bons vieux accentués au complet, on dispose ici d’un outil capable de trouver les textes dans une image où qu’ils soient : reconnaissance de noms de marques, de numéros de séries, de texte libre, etc.

A titre de cas d’usage, combiné avec un apprentissage de reconnaissance des images par rapport à un entrainement, par exemple d’une application web avec formulaire, on doit pouvoir identifier sur photo de quel écran de quelle application il s’agit, voire même reconstituer l’état de la saisie au moment de la photo.  Idéal pour envoyer à une hot line !

 

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*