Un contenedor para trabajar con Tesseract OCR dentro de PHP.
Vía Compositor:
$ composer require thiagoalessio/tesseract_ocr
Hay muchas formas de instalar Tesseract OCR en su sistema, pero si solo desea que algo esté en funcionamiento rápidamente, le recomiendo instalar el paquete Capture2Text con Chocolatey.
choco install capture2text --version 3.9
tesseract
.
Con MacPorts puedes instalar soporte para idiomas individuales, así:
$ sudo port install tesseract-<langcode>
Pero eso no es posible con Homebrew. De forma predeterminada, solo viene con soporte en inglés , por lo que si pretendes usarlo en otro idioma, la solución más rápida es instalarlos todos:
$ 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
Sí, sé que algunos de ustedes tal vez quieran usar esta biblioteca con el noble propósito de romper CAPTCHA, así que eche un vistazo a este comentario:
#91 (comentario)
Ejecuta un comando tesseract
y, opcionalmente, recibe un número entero como timeout
, en caso de que experimente procesos de tesseract estancados.
$ ocr = new TesseractOCR ();
$ ocr -> run ();
$ ocr = new TesseractOCR ();
$ timeout = 500 ;
$ ocr -> run ( $ timeout );
Define la ruta de una imagen para que tesseract
la reconozca.
$ ocr = new TesseractOCR ();
$ ocr -> image ( ' /path/to/image.png ' );
$ ocr -> run ();
Configure la imagen para que tesseract
la reconozca a partir de una cadena, con su tamaño. Esto puede resultar útil cuando se trata de archivos que ya están cargados en la memoria. Puede recuperar fácilmente los datos de la imagen y el tamaño de un objeto de imagen:
//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 ();
Defina una ubicación personalizada del ejecutable tesseract
, si por algún motivo no está presente en $PATH
.
echo ( new TesseractOCR ( ' img.png ' ))
-> executable ( ' /path/to/tesseract ' )
-> run ();
Devuelve la versión actual de tesseract
.
echo ( new TesseractOCR ())-> version ();
Devuelve una lista de idiomas/scripts disponibles.
foreach (( new TesseractOCR ())-> availableLanguages () as $ lang ) echo $ lang ;
Más información: https://github.com/tesseract-ocr/tesseract/blob/master/doc/tesseract.1.asc#languages-and-scripts
Especifique una ubicación personalizada para el directorio tessdata.
echo ( new TesseractOCR ( ' img.png ' ))
-> tessdataDir ( ' /path ' )
-> run ();
Especifique la ubicación del archivo de palabras del usuario.
Este es un archivo de texto sin formato que contiene una lista de palabras que desea que tesseract
considere como palabras de un diccionario normal.
Útil cuando se trata de contenidos que contienen terminología técnica, jerga, etc.
$ cat /path/to/user-words.txt
foo
bar
echo ( new TesseractOCR ( ' img.png ' ))
-> userWords ( ' /path/to/user-words.txt ' )
-> run ();
Especifique la ubicación del archivo de patrones de usuario.
Si los contenidos con los que está tratando tienen patrones conocidos, esta opción puede ayudar mucho a la precisión del reconocimiento 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 ();
Defina uno o más idiomas que se utilizarán durante el reconocimiento. Puede encontrar una lista completa de los idiomas disponibles en: https://github.com/tesseract-ocr/tesseract/blob/master/doc/tesseract.1.asc#languages
Consejo de @daijiale: utilice la combinación ->lang('chi_sim', 'chi_tra')
para un reconocimiento adecuado del chino.
echo ( new TesseractOCR ( ' img.png ' ))
-> lang ( ' lang1 ' , ' lang2 ' , ' lang3 ' )
-> run ();
Especifique el método de segmentación de página, que indica tesseract
cómo interpretar la imagen dada.
Más información: https://github.com/tesseract-ocr/tesseract/wiki/ImproveQuality#page-segmentation-method
echo ( new TesseractOCR ( ' img.png ' ))
-> psm ( 6 )
-> run ();
Especifique el modo del motor OCR. (ver tesseract --help-oem
)
echo ( new TesseractOCR ( ' img.png ' ))
-> oem ( 2 )
-> run ();
Especifique el DPI de la imagen. Es útil si su imagen no contiene esta información en sus metadatos.
echo ( new TesseractOCR ( ' img.png ' ))
-> dpi ( 300 )
-> run ();
Este es un atajo para ->config('tessedit_char_whitelist', 'abcdef....')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> allowlist ( range ( ' a ' , ' z ' ), range ( 0 , 9 ), ' -_@ ' )
-> run ();
Especifique un archivo de configuración que se utilizará. Puede ser la ruta a su propio archivo de configuración o el nombre de uno de los archivos de configuración predefinidos: https://github.com/tesseract-ocr/tesseract/tree/master/tessdata/configs
echo ( new TesseractOCR ( ' img.png ' ))
-> configFile ( ' hocr ' )
-> run ();
Especifique un archivo de salida que se utilizará. Tenga en cuenta: si configura un archivo de salida, se ignora la opción withoutTempFiles
. Los archivos temporales se escriben (y eliminan) incluso si withoutTempFiles = true
.
En combinación con configFile
puede obtener archivos hocr
, tsv
o pdf
.
echo ( new TesseractOCR ( ' img.png ' ))
-> configFile ( ' pdf ' )
-> setOutputFile ( ' /PATH_TO_MY_OUTPUTFILE/searchable.pdf ' )
-> run ();
Acceso directo para ->configFile('digits')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> digits ()
-> run ();
Acceso directo para ->configFile('hocr')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> hocr ()
-> run ();
Acceso directo para ->configFile('pdf')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> pdf ()
-> run ();
Acceso directo para ->configFile('quiet')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> quiet ()
-> run ();
Acceso directo para ->configFile('tsv')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> tsv ()
-> run ();
Acceso directo para ->configFile('txt')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> txt ()
-> run ();
Defina un directorio personalizado para almacenar archivos temporales generados por tesseract. Asegúrese de que el directorio realmente exista y que el usuario que ejecuta php
pueda escribir allí.
echo ( new TesseractOCR ( ' img.png ' ))
-> tempDir ( ' ./my/custom/temp/dir ' )
-> run ();
Especifique que tesseract
debe generar el texto reconocido sin escribir en archivos temporales. En cambio, los datos se recopilan de la salida estándar de tesseract
.
echo ( new TesseractOCR ( ' img.png ' ))
-> withoutTempFiles ()
-> run ();
Cualquier opción de configuración que ofrece Tesseract se puede utilizar así:
echo ( new TesseractOCR ( ' img.png ' ))
-> config ( ' config_var ' , ' value ' )
-> config ( ' other_config_var ' , ' other value ' )
-> run ();
O así:
echo ( new TesseractOCR ( ' img.png ' ))
-> configVar ( ' value ' )
-> otherConfigVar ( ' other value ' )
-> run ();
Más información: https://github.com/tesseract-ocr/tesseract/wiki/ControlParams
A veces, puede resultar útil limitar el número de subprocesos que tesseract puede utilizar (por ejemplo, en este caso). Establezca el número máximo de subprocesos como parámetro para la función run
:
echo ( new TesseractOCR ( ' img.png ' ))
-> threadLimit ( 1 )
-> run ();
Puedes contribuir a este proyecto mediante:
Solo asegúrese de consultar nuestro Código de conducta y las instrucciones de contribución.
tesseract-ocr-for-php se publica bajo la licencia MIT.
Hecho con en berlín