Mini-ocr (reconnaissance de caractère) pour lire les infos affichés par un autre programme

Soyez le premier à donner votre avis sur cette source.

Vue 13 641 fois - Téléchargée 1 962 fois

Description

Mon problème : Récupérer les (très nombreuses) informations textuelles affichées dans la fenêtre d'une autre application dont je ne connais rien et qui ne permet pas le copier / coller (j'ai plusieurs centaines de milliers de lignes à récupérer).

Suite à diverses recherches, entre autres sur delphifr, je me rends compte que si certains ont eu le même problème, personne n'a proposé de solution propre du type interception des messages arrivant dans la fenêtre de l'application en question. Il ne me reste plus qu'à secouer mes neurones et agiter mes petits doigts !

Solution trouvée
Principe général :
- L'utilisateur délimite l'emplacement de la fenêtre à traduire.
- Le programme fait une capture de la zone.
- Un (mini-)programme d'OCR décode l'image et transforme ça en texte (voir plus bas).
- Le programme fait « scroller » la fenêtre et refait une capture, puis OCR, scroll... jusqu'à plus soif.

L'OCR est, quant à lui, basé sur le principe suivant :
- Détection automatique des lignes d'écriture.
- Ajustement éventuel par l'utilisateur, qui peut aussi définir des colonnes (par exemple si on veut décoder des affichages type fichier Excel ou Access).
- Le programme découpe chaque ligne en petits tronçons chaque tronçon étant séparé du suivant par une colonne de pixel sans écriture.
- Chaque petit tronçon est ensuite comparé aux formes déjà reconnues. Si il est connu, le programme fait la traduction, sinon il demande à l'utilisateur de reconnaître la forme qu'il s'empresse de stocker pour la fois suivante.

Pour le détail de certaines options voir doc word.

Conclusion :


Pour la capture de l'image, ce n'est pas ce que j'ai fait de mieux, mais je n'ai pas d'autre idée (ou plutôt suffisamment de connaissance). Les plus gros inconvénients sont :
- On ne sait pas quand la fenêtre a fini de faire les scrolls. Si on va trop vite, on va capturer deux fois la même image ! D'où la nécessité d'un petit « sleep » qui ralentit le programme.
- Il ne faut surtout plus toucher à l'ordinateur pendant qu'il travaille (et comme c'est un peu long si vous avez beaucoup de choses à prendre...)

Pour l'OCR, je n'ai pas cherché à optimiser la vitesse plus que ça. Il y a sûrement des choses à faire.

Il y a des contraintes non négligeables d'utilisation. Voir le fichier doc. Un certain nombre pourrait être levé, sans trop de difficultés en modifiant un peu (beaucoup) les programmes (écartement des lignes en particulier).

Pour le reste voir le source. J'ai mis beaucoup de commentaires (bon, je sais, y'en a jamais assez !).

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_jmic
Messages postés
13
Date d'inscription
mardi 26 août 2003
Statut
Membre
Dernière intervention
25 juillet 2006
-
Bonjour Maes,
Désolé mais ça commence à faire longtemps que j'ai écrit le programme, et je ne me souviens plus bien.
J'ai fait un commentaire pour la même question à Tairodel. Je vais essayer d'être un peu plus précis. Il faut supprimer pas mal de code, et si cela est en général plus simple que d'en rajouter, ce n'est quand même pas toujours si facile. Dans la procédure principal Trait_Princ, il faut retirer les deux premières lignes "définition du rectangle"... nettoyer la fonction Initi_Image_Copie pour ne garder que la création du bitmap.
Dans la boucle, il faut changer la copie d'écran par le chargement de l'image et probablement la passer en 1 bit (voir comment faire dans la fonction Initi_Image_Copie).
Voila ce que je peux en dire rapidement.
Ceci dit et encore une fois, l'intérêt du programme (en dehors d'un hypothétique intérêt de programmation) est pour le traitement d'un très gros volume de données de choses qui sont affichées par l'ordinateur (affichage toujours fait de la même façon). Je ne pense pas que cela donnera de bons résultats avec des scans de pages de livre par exemple.
Bon courage.
cs_maes
Messages postés
1
Date d'inscription
samedi 26 juillet 2003
Statut
Membre
Dernière intervention
10 mai 2006
-
il est super ton programme, mais je souhaite pouvoir ouvrir un bmp ou jpg...
comment je peut faire ??
cs_MAURICIO
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5 -
Bon, bem moi, j' ai 2 propositions à faire:

Si tu veux lire du texte qui est dans un autre prog. et que,
1 ) celui-là est dans un seul control genre Memo.
il faut choper le handle du control pour y lire l' info des données. Demande à un pro comment faire ça.
2 ) celui-là n' est pas dans un control mais dans une canvas par exemple
là ton code est valable. Mais je te donne un conseil: passe toutes les lignes dans un seul bitmap. Seulement après tu fais la reconnaisance du texte.
cs_jmic
Messages postés
13
Date d'inscription
mardi 26 août 2003
Statut
Membre
Dernière intervention
25 juillet 2006
-
Grandvizir : je ne connaissais pas ces outils. J'ai rapidement regardé Winspector, mais je ne vois pas, moi non plus, comment obtenir le texte qui apparaît dans ListMachin. Je ne vois même pas de réaction quand j'appuie sur l'ascenseur pour faire afficher la ligne suivante. Je vais encore un peu creuser, mais vu que j'ai en très grande partie résolu mon problème (finalement c'était 1.500.000 lignes que j'avais à décoder!) ...

Tairodel : Si tu veux que quelqu'un prenne du temps pour répondre à tes questions, il faudrait que tu prennes un minimum de temps pour les poser correctement ! Il manque visiblement des mots :<) D'après ce que je comprends tu as un fichier bmp avec du texte dedans. Deux solutions :
- sans programmation : tu l'affiches dans ton éditeur d'image préféré, échelle 1:1, et tu utilises ce que j'ai fait (mais à mon avis tu auras plus vite fait de retaper le texte !)
- en modifiant le programme, en remplaçant dans le programme principal la capture d'écran (bitblt...) par un chargement de ton fichier par un (de mémoire) LoadfromFile (fichier). Attention à bien redimensionner les choses , en particulier remettre en noir et blanc.
tairodel
Messages postés
1
Date d'inscription
vendredi 7 janvier 2005
Statut
Membre
Dernière intervention
27 février 2005
-
Comment je peux extraire le texte à partir d'un à mémoire d' .bmp classez avec ce logiciel

Veuillez m'aider ! !

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.