Un wrapper pour travailler avec Tesseract OCR dans PHP.
Via Compositeur :
$ composer require thiagoalessio/tesseract_ocr
Il existe de nombreuses façons d'installer Tesseract OCR sur votre système, mais si vous souhaitez simplement que quelque chose soit opérationnel rapidement, je vous recommande d'installer le package Capture2Text avec Chocolatey.
choco install capture2text --version 3.9
tesseract
.
Avec MacPorts, vous pouvez installer la prise en charge de langues individuelles, comme ceci :
$ sudo port install tesseract-<langcode>
Mais ce n'est pas possible avec Homebrew. Par défaut, il est uniquement pris en charge en anglais , donc si vous avez l'intention de l'utiliser dans une autre langue, la solution la plus rapide est de tous les installer :
$ brew install tesseract tesseract-lang
use thiagoalessio TesseractOCR TesseractOCR ;
echo ( new TesseractOCR ( ' text.png ' ))
-> run ();
The quick brown fox
jumps over
the lazy dog.
use thiagoalessio TesseractOCR TesseractOCR ;
echo ( new TesseractOCR ( ' german.png ' ))
-> lang ( ' deu ' )
-> run ();
Bülowstraße
use thiagoalessio TesseractOCR TesseractOCR ;
echo ( new TesseractOCR ( ' mixed-languages.png ' ))
-> lang ( ' eng ' , ' jpn ' , ' spa ' )
-> run ();
I eat すし y Pollo
use thiagoalessio TesseractOCR TesseractOCR ;
echo ( new TesseractOCR ( ' 8055.png ' ))
-> allowlist ( range ( ' A ' , ' Z ' ))
-> run ();
BOSS
Oui, je sais que certains d'entre vous voudront peut-être utiliser cette bibliothèque dans le noble but de briser les CAPTCHA, alors jetez un œil à ce commentaire :
#91 (commentaire)
Exécute une commande tesseract
, en recevant éventuellement un entier comme timeout
, au cas où vous rencontreriez des processus tesseract bloqués.
$ ocr = new TesseractOCR ();
$ ocr -> run ();
$ ocr = new TesseractOCR ();
$ timeout = 500 ;
$ ocr -> run ( $ timeout );
Définir le chemin d'une image à reconnaître par tesseract
.
$ ocr = new TesseractOCR ();
$ ocr -> image ( ' /path/to/image.png ' );
$ ocr -> run ();
Définissez l'image à reconnaître par tesseract
à partir d'une chaîne, avec sa taille. Cela peut être utile lorsqu'il s'agit de fichiers déjà chargés en mémoire. Vous pouvez facilement récupérer les données d'image et la taille d'un objet image :
//Using Imagick
$ data = $ img -> getImageBlob ();
$ size = $ img -> getImageLength ();
//Using GD
ob_start ();
// Note that you can use any format supported by tesseract
imagepng ( $ img , null , 0 );
$ size = ob_get_length ();
$ data = ob_get_clean ();
$ ocr = new TesseractOCR ();
$ ocr -> imageData ( $ data , $ size );
$ ocr -> run ();
Définissez un emplacement personnalisé pour l'exécutable tesseract
, si, pour une raison quelconque, il n'est pas présent dans le $PATH
.
echo ( new TesseractOCR ( ' img.png ' ))
-> executable ( ' /path/to/tesseract ' )
-> run ();
Renvoie la version actuelle de tesseract
.
echo ( new TesseractOCR ())-> version ();
Renvoie une liste des langues/scripts disponibles.
foreach (( new TesseractOCR ())-> availableLanguages () as $ lang ) echo $ lang ;
Plus d'informations : https://github.com/tesseract-ocr/tesseract/blob/master/doc/tesseract.1.asc#linguals-and-scripts
Spécifiez un emplacement personnalisé pour le répertoire tessdata.
echo ( new TesseractOCR ( ' img.png ' ))
-> tessdataDir ( ' /path ' )
-> run ();
Spécifiez l'emplacement du fichier de mots utilisateur.
Il s'agit d'un fichier texte brut contenant une liste de mots que vous souhaitez considérer comme des mots de dictionnaire normaux par tesseract
.
Utile lorsqu'il s'agit de contenus contenant de la terminologie technique, du jargon, etc.
$ cat /path/to/user-words.txt
foo
bar
echo ( new TesseractOCR ( ' img.png ' ))
-> userWords ( ' /path/to/user-words.txt ' )
-> run ();
Spécifiez l'emplacement du fichier de modèles utilisateur.
Si les contenus que vous traitez ont des modèles connus, cette option peut grandement aider à la précision de la reconnaissance de tesseract.
$ cat /path/to/user-patterns.txt'
1-ddd-GOOG-441
www.n\*.com
echo ( new TesseractOCR ( ' img.png ' ))
-> userPatterns ( ' /path/to/user-patterns.txt ' )
-> run ();
Définissez une ou plusieurs langues à utiliser lors de la reconnaissance. Une liste complète des langues disponibles est disponible sur : https://github.com/tesseract-ocr/tesseract/blob/master/doc/tesseract.1.asc#linguals
Astuce de @daijiale : utilisez la combinaison ->lang('chi_sim', 'chi_tra')
pour une bonne reconnaissance du chinois.
echo ( new TesseractOCR ( ' img.png ' ))
-> lang ( ' lang1 ' , ' lang2 ' , ' lang3 ' )
-> run ();
Spécifiez la méthode de segmentation de page, qui indique tesseract
comment interpréter l'image donnée.
Plus d'informations : https://github.com/tesseract-ocr/tesseract/wiki/ImproveQuality#page-segmentation-method
echo ( new TesseractOCR ( ' img.png ' ))
-> psm ( 6 )
-> run ();
Spécifiez le mode du moteur OCR. (voir tesseract --help-oem
)
echo ( new TesseractOCR ( ' img.png ' ))
-> oem ( 2 )
-> run ();
Spécifiez le DPI de l'image. C'est utile si votre image ne contient pas ces informations dans ses métadonnées.
echo ( new TesseractOCR ( ' img.png ' ))
-> dpi ( 300 )
-> run ();
Il s'agit d'un raccourci pour ->config('tessedit_char_whitelist', 'abcdef....')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> allowlist ( range ( ' a ' , ' z ' ), range ( 0 , 9 ), ' -_@ ' )
-> run ();
Spécifiez un fichier de configuration à utiliser. Il peut s'agir soit du chemin d'accès à votre propre fichier de configuration, soit du nom de l'un des fichiers de configuration prédéfinis : https://github.com/tesseract-ocr/tesseract/tree/master/tessdata/configs
echo ( new TesseractOCR ( ' img.png ' ))
-> configFile ( ' hocr ' )
-> run ();
Spécifiez un fichier de sortie à utiliser. Attention : si vous définissez un fichier de sortie, l'option withoutTempFiles
est ignorée. Les fichiers temporaires sont écrits (et supprimés) même si withoutTempFiles = true
.
En combinaison avec configFile
vous pouvez obtenir les fichiers hocr
, tsv
ou pdf
.
echo ( new TesseractOCR ( ' img.png ' ))
-> configFile ( ' pdf ' )
-> setOutputFile ( ' /PATH_TO_MY_OUTPUTFILE/searchable.pdf ' )
-> run ();
Raccourci pour ->configFile('digits')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> digits ()
-> run ();
Raccourci pour ->configFile('hocr')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> hocr ()
-> run ();
Raccourci pour ->configFile('pdf')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> pdf ()
-> run ();
Raccourci pour ->configFile('quiet')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> quiet ()
-> run ();
Raccourci pour ->configFile('tsv')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> tsv ()
-> run ();
Raccourci pour ->configFile('txt')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> txt ()
-> run ();
Définissez un répertoire personnalisé pour stocker les fichiers temporaires générés par tesseract. Assurez-vous que le répertoire existe réellement et que l'utilisateur exécutant php
est autorisé à y écrire.
echo ( new TesseractOCR ( ' img.png ' ))
-> tempDir ( ' ./my/custom/temp/dir ' )
-> run ();
Spécifiez que tesseract
doit afficher le texte reconnu sans écrire dans des fichiers temporaires. Les données sont plutôt collectées à partir de la sortie standard de tesseract
.
echo ( new TesseractOCR ( ' img.png ' ))
-> withoutTempFiles ()
-> run ();
Toute option de configuration proposée par Tesseract peut être utilisée comme ça :
echo ( new TesseractOCR ( ' img.png ' ))
-> config ( ' config_var ' , ' value ' )
-> config ( ' other_config_var ' , ' other value ' )
-> run ();
Ou comme ça :
echo ( new TesseractOCR ( ' img.png ' ))
-> configVar ( ' value ' )
-> otherConfigVar ( ' other value ' )
-> run ();
Plus d'informations : https://github.com/tesseract-ocr/tesseract/wiki/ControlParams
Parfois, il peut être utile de limiter le nombre de threads que tesseract est autorisé à utiliser (par exemple dans ce cas). Définissez le nombre maximum de threads comme paramètre pour la fonction run
:
echo ( new TesseractOCR ( ' img.png ' ))
-> threadLimit ( 1 )
-> run ();
Vous pouvez contribuer à ce projet en :
Assurez-vous simplement de jeter un œil à notre code de conduite et à nos instructions de contribution.
tesseract-ocr-for-php est publié sous la licence MIT.
Fabriqué avec à Berlin