[R] Traiter le string de retour de tesseract

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
RomainR
Niveau 1
Niveau 1
Messages : 13
Enregistré le : ven. 25 sept. 2009 11:15
Status : Hors ligne

[R] Traiter le string de retour de tesseract

#1

Message par RomainR »

Bonjour à tous,

Voilà je cherche à créer un script de "reconnaissance d'écran" par le biais des labels qu'il contient. Je me sers pour cela de l'OVR open source tesseract (cf. http://www.autoitscript.fr/forum/viewto ... f=6&t=3820 pour plus de détails)

Voici mon script d'acquisition des labels :

Code : Tout sélectionner

#Include <Clipboard.au3>
#include <SimpleTesseract.au3>

Local $LabelsInScreen = _TesseractScreenCapture(0, "", 1, 3, 0, 0, 1024, 768, 0)    ; Acquisition des labels affichés à l'écran
MsgBox(0,"Chaînes lues :", $LabelsInScreen)
J'obtiens donc quelque chose de ce style :
Ligne de texte 1
Ligne de texte 2
bla bla bla
Pour reconnaître mon écran j'ai donc essayé ceci :

Code : Tout sélectionner

If $LabelsInScreen = ("Ligne de texte 1" & @lf & "Ligne de texte 2" & @lf & "bla bla bla") Then MsgBox(0,"", "Creen reconnu !")
Mais ca ne fonctionne pas (le problème étant que je ne sais pas exactement comment est retourné la chaîne de caractère de la fonction tesseract...). Bref j'ai quand même essayé l'alternative suivante :

Code : Tout sélectionner

If StringRegExp($LabelsInScreen, "Ligne de texte 1", 0) = 1 And _
    StringRegExp($LabelsInScreen, "Ligne de texte 2", 0) = 1 And _
    StringRegExp($LabelsInScreen, "bla bla bla", 0) = 1 Then
MsgBox(0,"", "Creen reconnu !")
EndIf
Celui fonctionne mais il me faudrait un temps fou pour créer tous les cas et vérifier que tous les labels sont bien présents. C'est pourquoi je cherche à automatiser la création de mon script mais il me faut pour cela parvenir à traiter la chaîne de caractère retournée par la fonction tesseract... Chose que je ne parviens malheureusement pas à faire...

Au cas où cela puisse aider voici le code de la fonction tesseract :
► Afficher le texte
En espérant avoir été assez clair. Merci par avance.

@+

PS : désolé pour le post précédent je suppose qu'il a été supprimé pour à cause du [..] manquant que j'ai complètement zappé ? :oops:
Modifié en dernier par RomainR le jeu. 08 oct. 2009 13:17, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Traiter le string de retour de tesseract

#2

Message par Tlem »

Si vous avez une liste de label à tester, le mieux serait de placer leur texte dans un tableau :

Code : Tout sélectionner

$Test[5] = ['Label1', 'Label2', 'Label3', 'Label4', 'Label5']
Ensuite une simple boucle sur ce tableau pour lire chaque élément et tester avec StringInStr() si ce texte ce retrouve dans la chaîne retournée par Tesseract. Lors du test de chaque élément, utilisez une valeur 'booléenne' sur une variable de test, genre je met à 1 la variable

Code : Tout sélectionner

$Test
, et lors du test de chaque élément, si la chaîne n'est pas trouvée, alors je met cette variable à 0 et donc lors du test de cette variable, je peut savoir si tout les éléments ont été trouvés ou non. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
RomainR
Niveau 1
Niveau 1
Messages : 13
Enregistré le : ven. 25 sept. 2009 11:15
Status : Hors ligne

Re: [..] Traiter le string de retour de tesseract

#3

Message par RomainR »

Merci pour ta réponse tlem mais ce n'est pas exactement ce que je recherchais :) En fait, je cherchais un moyen de traiter la chaîne de caractère renvoyée par la fonction tesseract.

Finalement j'ai réussi à faire ce que je souhaitais en utilisant un fichier texte qui me sers de "tampon".

Au cas où cela puisse servir voici un code valide pour créer automatiquement un script de reconnaissance d'écran en fonction des labels qu'il contient :
► Afficher le texte
Pour l'utiliser, il faut tout d'abord afficher l'écran souhaité dans "NomDeLaFenêtre" et lancer le script. Une fois les labels acquis, entrer dans l'input le nom de l'écran. Le script créé en sortie un fichier dans le répertoire du script nommé ("TextForScript" & NomEntréDansLInput.txt) qu'il suffit de copier coller dans le script final de reconnaissance d'écran. Je conseille tout de même de faire attention car l'OCR n'est, à mon goût, pas très fiable !

@+
Avatar du membre
Guichon
Niveau 1
Niveau 1
Messages : 3
Enregistré le : jeu. 11 févr. 2010 20:52
Status : Hors ligne

Re: [R] Traiter le string de retour de tesseract

#4

Message par Guichon »

Bonjour,

J'ai découvert récemment AutoIT, car je vais réaliser un stage avec ce logiciel.
J'ai tester les différentes fonctions du script, notamment _TesseractWinCapture mais cela n'aboutit à rien. Ce que j'aimerais c'est récupérer en "String" ce qui est affiché dans la fenêtre.

Par exemple ici, on ouvre Notepad, on écrit dedans et on ferme, vient alors une fenêtre ("Voulez-vous enregistrer les modifications de Sans titre ?")
C'est cette phrase que j'aimerais récupérer.

Code : Tout sélectionner

#include <Tesseract.au3>

Run("notepad.exe")
WinWaitActive("Sans titre - Bloc-notes")
Send("This is some text.")
WinClose("Sans titre - Bloc-notes")
WinWaitActive("Bloc-notes")

Local $LabelsInWin = _TesseractWinCapture(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ; Acquisition des labels affichés à l'écran
MsgBox(0,"Chaînes lues :", $LabelsInWin)


Merci pour votre aide.

Amicalement,
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [R] Traiter le string de retour de tesseract

#5

Message par timmalos »

Je vous conseille d'aller poser votre question sur le forum américain. Vous aurez surement une réponse alors qu'ici peu de gens maitrisent cet UDF, et je ne suis pas dans le lot (j'ai juste transféré le post qui est utile malgré tout)
Je regarderai pendant les vacances si vous n'avez pas trouvé votre bonheur , mais postez ici le lien de votre demande sur le forum anglais que l'on puisse suivre ;)
Répondre