Page 1 sur 1

[R] Traiter le string de retour de tesseract

Posté : mer. 07 oct. 2009 16:59
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:

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

Posté : mer. 07 oct. 2009 17:40
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. ;)

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

Posté : jeu. 08 oct. 2009 13:16
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 !

@+

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

Posté : dim. 14 févr. 2010 18:16
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,

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

Posté : jeu. 18 févr. 2010 16:03
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 ;)