Lecture d'une chaine sur une image
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
Lecture d'une chaine sur une image
Bonjour,
Je parviens à générer une image à partir de l'écran grâce à la fonction "_ScreenCapture_CaptureWnd".
Cette image contient un chiffre entre 0 et 1000000.
J'aimerais connaître ce chiffre et pas juste en avoir l'image ^^
J'ai parcouru le forum, j'ai croisé l'UDF tesseract dont je ne comprend pas grand chose et sinon, je ne vois pas trop de solution. En auriez-vous une ?
Merci d'avance
Je parviens à générer une image à partir de l'écran grâce à la fonction "_ScreenCapture_CaptureWnd".
Cette image contient un chiffre entre 0 et 1000000.
J'aimerais connaître ce chiffre et pas juste en avoir l'image ^^
J'ai parcouru le forum, j'ai croisé l'UDF tesseract dont je ne comprend pas grand chose et sinon, je ne vois pas trop de solution. En auriez-vous une ?
Merci d'avance
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: Lecture d'une chaine sur une image
Ce nombre à capturer, il s'affiche forcément dans un controle d'une fenêtre quelconque
Pourquoi ne pas directement lire le contenu de ce controle ?
Pourquoi ne pas directement lire le contenu de ce controle ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: Lecture d'une chaine sur une image
En fait non, il apparaît dans l'image que mon utilisateur m'upload et que j'affiche simplement à l'écran.
De cette image, je capture juste la partie qui comporte le chiffre qui m'est nécessaire et j'aimerais pouvoir "lire" ce chiffre en plus d'enregistrer l'image découpée.
De cette image, je capture juste la partie qui comporte le chiffre qui m'est nécessaire et j'aimerais pouvoir "lire" ce chiffre en plus d'enregistrer l'image découpée.
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: Lecture d'une chaine sur une image
Alors oui, l'OCR est inévitable et il va falloir ou bien utiliser un programme externe ou bien utiliser Tesseract...
https://www.autoitscript.com/forum/topi ... e-example/
https://www.autoitscript.com/forum/topi ... e-example/
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: Lecture d'une chaine sur une image
Merci pour votre retour.
Donc si je comprends bien l'exemple démontré ici.
J'utilise "ShellExecuteWait" pour lancer tesseract.exe en lui donnant mon image découpée.
Et cela me renvoi ma chaine (dans mon cas précis mon chiffre) dans un fichier texte et/ou dans une variable.
Est-ce bien cela ?
Est-ce que tesseract peut gérer les différentes couleurs et de texte, et de fond ? (Le chiffre est écrit en "blanc" sur fond "foncé", quand l'utilisateur ne se trompe pas...)
Enfin, pouvez-vous me confirmer, s'il vous plaît, que cette version est bien la dernière en date ?
https://tesseract-ocr.github.io/tessdoc ... or-windows
Donc si je comprends bien l'exemple démontré ici.
J'utilise "ShellExecuteWait" pour lancer tesseract.exe en lui donnant mon image découpée.
Et cela me renvoi ma chaine (dans mon cas précis mon chiffre) dans un fichier texte et/ou dans une variable.
Est-ce bien cela ?
Est-ce que tesseract peut gérer les différentes couleurs et de texte, et de fond ? (Le chiffre est écrit en "blanc" sur fond "foncé", quand l'utilisateur ne se trompe pas...)
Enfin, pouvez-vous me confirmer, s'il vous plaît, que cette version est bien la dernière en date ?
https://tesseract-ocr.github.io/tessdoc ... or-windows
Modifié en dernier par Snake22 le mar. 27 oct. 2020 16:56, modifié 1 fois.
- walkson
- Modérateur
- Messages : 1020
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: Lecture d'une chaine sur une image
Bonjour,
Regardez ici https://github.com/UB-Mannheim/tesseract/wiki
https://www.autoitscript.com/forum/topi ... nt=1389922
Regardez ici https://github.com/UB-Mannheim/tesseract/wiki
local $TIF_FILENAME=@DesktopDir & "\BB.tif"
Local $TESS_PARAMS= $TIF_FILENAME & " output"
Local $TESS_EXE=@DesktopDir & "\tesseract.exe"
local $TWorkDir="C:\temp"
AnalyzeImage()
func AnalyzeImage()
Local $hTimer = TimerInit() ; Begin the timer and store the handle in a variable.
shellexecutewait($TESS_EXE, $TESS_PARAMS, $TWorkDir)
Local $fDiff = TimerDiff($hTimer) ; Find the difference in time from the previous call of TimerInit. The variable we stored the TimerInit handlem is passed as the "handle" to TimerDiff.
consolewrite( ($fDiff/1000) & "seconds passed")
EndFunc
Local $TESS_PARAMS= $TIF_FILENAME & " output"
Local $TESS_EXE=@DesktopDir & "\tesseract.exe"
local $TWorkDir="C:\temp"
AnalyzeImage()
func AnalyzeImage()
Local $hTimer = TimerInit() ; Begin the timer and store the handle in a variable.
shellexecutewait($TESS_EXE, $TESS_PARAMS, $TWorkDir)
Local $fDiff = TimerDiff($hTimer) ; Find the difference in time from the previous call of TimerInit. The variable we stored the TimerInit handlem is passed as the "handle" to TimerDiff.
consolewrite( ($fDiff/1000) & "seconds passed")
EndFunc
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Re: Lecture d'une chaine sur une image
Merci walkson, grâce à vous j'ai donc une version plus récente encore
Par contre votre exemple me perturbe plus qu'autre chose. Je ne comprends décidemment pas comment on utilise tesseract.
Je l'ai installé comme tout exécutable mais pour le reste, je ne percute pas... Et je ne comprends que peu l'anglais, hélas...
Je vois un format d'image "tif", pourquoi ne pas garder "bmp", comme le plus classique ? Tesseract nous l'impose ?
Pourquoi évaluer le temps d'exécution de tesseract ?
Par contre votre exemple me perturbe plus qu'autre chose. Je ne comprends décidemment pas comment on utilise tesseract.
Je l'ai installé comme tout exécutable mais pour le reste, je ne percute pas... Et je ne comprends que peu l'anglais, hélas...
Je vois un format d'image "tif", pourquoi ne pas garder "bmp", comme le plus classique ? Tesseract nous l'impose ?
Pourquoi évaluer le temps d'exécution de tesseract ?
Re: Lecture d'une chaine sur une image
J'ai testé ce code qui ne présente aucune erreur mais qui ne me fourni pas du tout mon chiffre.
Mon _ScreenCapture_CaptureWnd enregistre bien mon chiffre.
Mais tesseract ne me renvoi qu'une flèche vers le haut.
_ScreenCapture_CaptureWnd('test.bmp', $image, 600, 360, 660, 375, False)
Sleep(1000)
$ImageToReadPath=@ScriptDir & "\test.bmp"
$ResultTextPath=@ScriptDir & "\Result"
$OutPutPath=$ResultTextPath & ".txt"
$TesseractExePath="C:\Program Files (x86)\Tesseract-OCR\tesseract.exe"
ShellExecuteWait($TesseractExePath, '"' & $ImageToReadPath & '" "' & $ResultTextPath & '"', "", "", @SW_HIDE)
If @error Then
Exit MsgBox(0, "Error", @error)
EndIf
MsgBox(0, "Result", FileRead($OutPutPath))
;FileDelete($OutPutPath)
Sleep(1000)
$ImageToReadPath=@ScriptDir & "\test.bmp"
$ResultTextPath=@ScriptDir & "\Result"
$OutPutPath=$ResultTextPath & ".txt"
$TesseractExePath="C:\Program Files (x86)\Tesseract-OCR\tesseract.exe"
ShellExecuteWait($TesseractExePath, '"' & $ImageToReadPath & '" "' & $ResultTextPath & '"', "", "", @SW_HIDE)
If @error Then
Exit MsgBox(0, "Error", @error)
EndIf
MsgBox(0, "Result", FileRead($OutPutPath))
;FileDelete($OutPutPath)
Mais tesseract ne me renvoi qu'une flèche vers le haut.
- walkson
- Modérateur
- Messages : 1020
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: Lecture d'une chaine sur une image
J'ai testé avec du tif, du bmp et du jpg sans problème (si l'image est propre sinon il y a quelques erreurs)
Il y a une erreur sur votre code: il faut indiquer le chemin de l'image, un espace puis il faut mettre " output" qui s’enregistrera en txt dans le dossier indiqué dans ShellExecuteWait() troisième argument workingdir (répertoire de travail.)
J'ai testé avec une vieille version (3.2.0.0) car junkew (le lien est à la fin de mon précédent post) écrit (en anglais)
Pour tester, je vous conseille de vous faire un bmp avec des chiffres pour voir le résultat en suivant la méthode de junkew
Il y a une erreur sur votre code: il faut indiquer le chemin de l'image, un espace puis il faut mettre " output" qui s’enregistrera en txt dans le dossier indiqué dans ShellExecuteWait() troisième argument workingdir (répertoire de travail.)
J'ai testé avec une vieille version (3.2.0.0) car junkew (le lien est à la fin de mon précédent post) écrit (en anglais)
Un exemple de code pour tester si le concept fonctionne toujours utilisé version 3.05.1
Pour tester, je vous conseille de vous faire un bmp avec des chiffres pour voir le résultat en suivant la méthode de junkew
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Re: Lecture d'une chaine sur une image
J'ai donc changé cette ligne:
En testant sur ce chiffre: 927,500 (avec la virgule) qui est contenu pile poil dans l'image créée plutôt dans ma capture.
Le fichier de sortie est totalement vide.
Le fichier de sortie est totalement vide.
Re: Lecture d'une chaine sur une image
Je viens d'utiliser la méthode que vous décrivez, celle de junkew.
Elle fonctionne ! (Presque...)
Voici le code:
J'ai vraiment fait au plus simple (avec la déclaration des variables faites avant bien sûr).
Dans mon fichier txt "output", je retrouve bien mon chiffre 927,500. (Avec la virgule )
Mais à la ligne suivante, j'ai un symbole de flèche , que veut-il dire ?
EDIT: Grâce à regex, je ne garde que la partie chiffrée qui m'est nécessaire, donc ça fonctionne , merci =)
Elle fonctionne ! (Presque...)
Voici le code:
$tess_params="test.bmp output"
$tess_exe=@ProgramFilesDir & "\Tesseract-OCR\tesseract.exe"
$tess_workDir=""
ShellExecuteWait($tess_exe, $tess_params, $tess_workDir)
$tess_exe=@ProgramFilesDir & "\Tesseract-OCR\tesseract.exe"
$tess_workDir=""
ShellExecuteWait($tess_exe, $tess_params, $tess_workDir)
Dans mon fichier txt "output", je retrouve bien mon chiffre 927,500. (Avec la virgule )
Mais à la ligne suivante, j'ai un symbole de flèche , que veut-il dire ?
EDIT: Grâce à regex, je ne garde que la partie chiffrée qui m'est nécessaire, donc ça fonctionne , merci =)