Page 1 sur 1
[..] Demande d'aide pour Script OCR
Posté : ven. 03 mai 2013 11:41
par IceMaKeR
Bonjour à tous,
Voilà je désire faire de la reconnaissance de caractères sur un simulateur de vol qui n'exporte pas certaines données, pour ensuite les envoyer sur écran LCD branché sur une carte Arduino.
Pour la partie Arduino pas de soucis j'arrive à envoyer du texte sans soucis.
Par-contre j'ai essayé avec tesseract et un autre script trouvé sur le site US et j'ai pas réhussi à les faire marcher.
Voici ce que le simulateur envoie à l'écran :

- CMSP.png (7.8 Kio) Vu 2459 fois
A savoir que je maitrise la position et la taille de ce qui est envoyé à l'écran, donc pour avoir les coordonnées du texte je peux les récupérer sans soucis.
voici le fichier de FONT utilisé par le simulateur
Et ce que je souhaite avoir dans mon LCD (le texte présent est un texte rentré à la main.)
Ce qui me manque donc c'est juste la méthode pour utiliser l'OCR convenablement.
A savoir c'est que par moments le texte de l'instrument peut clignoter il faudrait aussi que j'en tienne comte et surtout avoir une reconnaissance assez rapide pour qu'elle envoie les infos au LCD sans trop bouffer de FPS dans le simu qui est lui-même assez groumand.
Bref j'ai juste besoin d'une piste pour la partie OCR et je pense pouvoir m'en sortir pour le reste... enfin j’espère.
Merci d'avance pour votre aide.
Re: [..] Demande d'aide pour Script OCR
Posté : ven. 03 mai 2013 16:46
par mikell
Tesseract fonctionne mais renvoie des erreurs à cause de la police utilisée
► Afficher le texte
Code : Tout sélectionner
#include <GDIPlus.au3>
#include <Tesseract.au3>
#include <WindowsConstants.au3>
$img = "CMSP.png"
; crée la gui dans le coin haut gauche de l'écran
$hGUI = GuiCreate("imgtest", 215, 60, 0, 0, $WS_POPUP)
GuiSetState()
WinSetOnTop ("imgtest", "", 1)
; met l'image dans la gui
_GDIPlus_StartUp()
$hImage = _GDIPlus_ImageLoadFromFile($img)
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hImage, 0, 0, 213, 57)
Sleep(500)
; analyse l'image, pour les paramètres voir dans Tesseract.au3
; _TesseractWinCapture($win_title, $win_text = "", $get_last_capture = 0, $delimiter = "", $cleanup = 1, $scale = 6, $left_indent = 0, $top_indent = 0, $right_indent = 0, $bottom_indent = 0, $show_capture = 0)
$text = _TesseractWinCapture("imgtest", "", 0, "", 1, 2, 0, 0, 5, 5, 0)
Sleep(500)
; ferme la gui et affiche le texte
GuiDelete($hGUI)
MsgBox(0,"",$text)
; fait le ménage
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_ShutDown()
Donc 2 solutions : tenter un traitement d'image avec GDI+ pour augmenter le contraste et adoucir les contours ce qui limitera peut-être les erreurs, ou carrément faire une recherche d'image avec _ImageSearch pour chaque caractère
Mais AMHA dans les 2 cas tu risques d'avoir un temps de réponse beaucoup trop long ^^
L'idéal évidemment serait de pouvoir utiliser une police compréhensible par Tesseract
Re: [..] Demande d'aide pour Script OCR
Posté : ven. 03 mai 2013 18:01
par jchd
J'ai bien un "bidule" comme ça dans mes tiroirs mais il demanderait un bon coup de balai et un peu d'huile de doigts pour s'adapter au cas présent. Il fonctionne par recherche (exacte) des colonnes successives de pixels pour chaque caractère, et demande une interaction manuelle pour "apprendre" (= enregistrer dans une base SQLite) tout nouveau caractère et ce pour chaque type de police, chaque style et chaque taille.
Pour une utilisation comme celle-ci, ça irait très bien si les 2 fontes utilisées sont invariables. De tête, je crois qu'il prenait dans les 200µs par caractère 13x8.
Re: [..] Demande d'aide pour Script OCR
Posté : sam. 04 mai 2013 14:55
par bob
Bonjour,
En essayant le script mis par Mikell, j'obtiens cette erreur :
C:\Program Files (x86)\AutoIt3\Include\Tesseract.au3 (404) : ==> The requested action with this object has failed.:
if $last_capture.item(Number($hwnd)) = "" Then
if $last_capture.item(Number($hwnd)) ^ ERROR
A votre avis, à quoi est due cette erreur ?
D'avance, merci.
Re: [..] Demande d'aide pour Script OCR
Posté : sam. 04 mai 2013 15:31
par IceMaKeR
jchd a écrit :J'ai bien un "bidule" comme ça dans mes tiroirs mais il demanderait un bon coup de balai et un peu d'huile de doigts pour s'adapter au cas présent. Il fonctionne par recherche (exacte) des colonnes successives de pixels pour chaque caractère, et demande une interaction manuelle pour "apprendre" (= enregistrer dans une base SQLite) tout nouveau caractère et ce pour chaque type de police, chaque style et chaque taille.
Pour une utilisation comme celle-ci, ça irait très bien si les 2 fontes utilisées sont invariables. De tête, je crois qu'il prenait dans les 200µs par caractère 13x8.
Je suis très intéressé par ton "bidule", l'apprentissage ne pose pas de soucis étant donné qu'il sera fait une fois pour toutes.
J'arrive à avancer avec un script trouvé sur le forum US mais j'ai encore des soucis car il impacte apparemment les simu en créant des micro saccades je pense lors de la capture d'écran pour l'analyse.
Re: [..] Demande d'aide pour Script OCR
Posté : sam. 04 mai 2013 17:28
par jchd
OK. Comme il y a des demandes récurrentes pour un tel besoin, je vais essayer de ficeler un module utilisable. Actuellement, les fonctions que j'employais sont noyées dans un fatras applicatif très spécifique qui ne facilitent pas leur réemploi dans un cas plus général. Sois un peu patient, stp.
En attendant, tâche de faire des fonctions pour captures de bitmap précises (au pixel près en hauteur, ça aide énormément) pour isoler tes deux lignes de texte (qui, tu l'as remarqué, n'emploient pas la même taille de corps : 16 en haut et 13 en bas). Stocke-les en PNG, par exemple, ça simplifiera les tests. Tu pourras toujours modifier le code pour traiter des bitmaps mémoire par la suite si tu le souhaites.
EDIT : fais tes captures en RGB
Re: [..] Demande d'aide pour Script OCR
Posté : sam. 04 mai 2013 18:22
par IceMaKeR
Bien Pris.
Pour la localisation des captures c'est déjà fait, je vais affiner la chose.
Merci en tout cas pour ton aide
Re: [..] Demande d'aide pour Script OCR
Posté : jeu. 23 mai 2013 18:36
par IceMaKeR
Des nouvelles sur l'avancement?
Re: [..] Demande d'aide pour Script OCR
Posté : jeu. 23 mai 2013 19:47
par overflow
tu as tester de recup tes infos par edition de memoire ?
(lire tes valeurs directement dans le processus )
Re: [..] Demande d'aide pour Script OCR
Posté : ven. 24 mai 2013 10:09
par IceMaKeR
Malheureusement cette info je ne l'ai pas au niveau du simu, en tt cas je sais pas ou la trouver!
Il y a un moyen de lire les infos mémoire d'une app?
En faite le Simu est en partie codé en lua, donc je connais les variables pour l'instrument que je veux reproduire mais je ne sais pas comment regarder dans la mémoire si elles s'y trouvent.
Re: [..] Demande d'aide pour Script OCR
Posté : ven. 24 mai 2013 10:11
par GhostLine
Rien à voir avec ta question, mais si tu as un endroit où tu stockes des photos de ton cockpit entier, je suis intéressé

Re: [..] Demande d'aide pour Script OCR
Posté : ven. 24 mai 2013 12:30
par IceMaKeR
Voici une photo de l'année dernière au bourget...
