Um wrapper para trabalhar com Tesseract OCR dentro de PHP.
Através do Compositor:
$ composer require thiagoalessio/tesseract_ocr
Há muitas maneiras de instalar o Tesseract OCR em seu sistema, mas se você deseja apenas que algo rápido seja instalado e executado, recomendo instalar o pacote Capture2Text com Chocolatey.
choco install capture2text --version 3.9
tesseract
.
Com MacPorts você pode instalar suporte para idiomas individuais, assim:
$ sudo port install tesseract-<langcode>
Mas isso não é possível com o Homebrew. Ele vem apenas com suporte para inglês por padrão, então se você pretende usá-lo para outro idioma, a solução mais rápida é instalar todos eles:
$ 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
Sim, eu sei que alguns de vocês podem querer usar esta biblioteca com o nobre propósito de quebrar CAPTCHAs, então dê uma olhada neste comentário:
#91 (comentário)
Executa um comando tesseract
, recebendo opcionalmente um número inteiro como timeout
, caso você tenha processos de tesseract paralisados.
$ ocr = new TesseractOCR ();
$ ocr -> run ();
$ ocr = new TesseractOCR ();
$ timeout = 500 ;
$ ocr -> run ( $ timeout );
Defina o caminho de uma imagem a ser reconhecida pelo tesseract
.
$ ocr = new TesseractOCR ();
$ ocr -> image ( ' /path/to/image.png ' );
$ ocr -> run ();
Defina a imagem a ser reconhecida pelo tesseract
a partir de uma string, com seu tamanho. Isto pode ser útil ao lidar com arquivos que já estão carregados na memória. Você pode recuperar facilmente os dados da imagem e o tamanho de um objeto de imagem:
//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 um local personalizado para o executável tesseract
, se por algum motivo ele não estiver presente no $PATH
.
echo ( new TesseractOCR ( ' img.png ' ))
-> executable ( ' /path/to/tesseract ' )
-> run ();
Retorna a versão atual do tesseract
.
echo ( new TesseractOCR ())-> version ();
Retorna uma lista de idiomas/scripts disponíveis.
foreach (( new TesseractOCR ())-> availableLanguages () as $ lang ) echo $ lang ;
Mais informações: https://github.com/tesseract-ocr/tesseract/blob/master/doc/tesseract.1.asc#languages-and-scripts
Especifique um local customizado para o diretório tessdata.
echo ( new TesseractOCR ( ' img.png ' ))
-> tessdataDir ( ' /path ' )
-> run ();
Especifique o local do arquivo de palavras do usuário.
Este é um arquivo de texto simples contendo uma lista de palavras que você deseja que sejam consideradas palavras normais do dicionário por tesseract
.
Útil ao lidar com conteúdos que contenham terminologia técnica, jargões, etc.
$ cat /path/to/user-words.txt
foo
bar
echo ( new TesseractOCR ( ' img.png ' ))
-> userWords ( ' /path/to/user-words.txt ' )
-> run ();
Especifique o local do arquivo de padrões do usuário.
Se o conteúdo com o qual você está lidando possui padrões conhecidos, esta opção pode ajudar muito na precisão do reconhecimento do 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 um ou mais idiomas a serem utilizados durante o reconhecimento. Uma lista completa de idiomas disponíveis pode ser encontrada em: https://github.com/tesseract-ocr/tesseract/blob/master/doc/tesseract.1.asc#languages
Dica de @daijiale: Use a combinação ->lang('chi_sim', 'chi_tra')
para o reconhecimento adequado do chinês.
echo ( new TesseractOCR ( ' img.png ' ))
-> lang ( ' lang1 ' , ' lang2 ' , ' lang3 ' )
-> run ();
Especifique o método de segmentação de página, que instrui tesseract
sobre como interpretar a imagem fornecida.
Mais informações: https://github.com/tesseract-ocr/tesseract/wiki/ImproveQuality#page-segmentation-method
echo ( new TesseractOCR ( ' img.png ' ))
-> psm ( 6 )
-> run ();
Especifique o modo do mecanismo de OCR. (veja tesseract --help-oem
)
echo ( new TesseractOCR ( ' img.png ' ))
-> oem ( 2 )
-> run ();
Especifique o DPI da imagem. É útil se a sua imagem não contém esta informação nos seus metadados.
echo ( new TesseractOCR ( ' img.png ' ))
-> dpi ( 300 )
-> run ();
Este é um atalho para ->config('tessedit_char_whitelist', 'abcdef....')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> allowlist ( range ( ' a ' , ' z ' ), range ( 0 , 9 ), ' -_@ ' )
-> run ();
Especifique um arquivo de configuração a ser usado. Pode ser o caminho para o seu próprio arquivo de configuração ou o nome de um dos arquivos de configuração predefinidos: https://github.com/tesseract-ocr/tesseract/tree/master/tessdata/configs
echo ( new TesseractOCR ( ' img.png ' ))
-> configFile ( ' hocr ' )
-> run ();
Especifique um arquivo de saída a ser usado. Esteja ciente: se você definir um arquivo de saída, a opção withoutTempFiles
será ignorada. Arquivos temporários são gravados (e excluídos) mesmo que withoutTempFiles = true
.
Em combinação com configFile
você pode obter os arquivos hocr
, tsv
ou pdf
.
echo ( new TesseractOCR ( ' img.png ' ))
-> configFile ( ' pdf ' )
-> setOutputFile ( ' /PATH_TO_MY_OUTPUTFILE/searchable.pdf ' )
-> run ();
Atalho para ->configFile('digits')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> digits ()
-> run ();
Atalho para ->configFile('hocr')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> hocr ()
-> run ();
Atalho para ->configFile('pdf')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> pdf ()
-> run ();
Atalho para ->configFile('quiet')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> quiet ()
-> run ();
Atalho para ->configFile('tsv')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> tsv ()
-> run ();
Atalho para ->configFile('txt')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> txt ()
-> run ();
Defina um diretório personalizado para armazenar arquivos temporários gerados pelo tesseract. Certifique-se de que o diretório realmente exista e que o usuário que executa php
tenha permissão para escrever nele.
echo ( new TesseractOCR ( ' img.png ' ))
-> tempDir ( ' ./my/custom/temp/dir ' )
-> run ();
Especifique que tesseract
deve gerar o texto reconhecido sem gravar em arquivos temporários. Os dados são coletados da saída padrão do tesseract
.
echo ( new TesseractOCR ( ' img.png ' ))
-> withoutTempFiles ()
-> run ();
Qualquer opção de configuração oferecida pelo Tesseract pode ser usada assim:
echo ( new TesseractOCR ( ' img.png ' ))
-> config ( ' config_var ' , ' value ' )
-> config ( ' other_config_var ' , ' other value ' )
-> run ();
Ou assim:
echo ( new TesseractOCR ( ' img.png ' ))
-> configVar ( ' value ' )
-> otherConfigVar ( ' other value ' )
-> run ();
Mais informações: https://github.com/tesseract-ocr/tesseract/wiki/ControlParams
Às vezes, pode ser útil limitar o número de threads que o tesseract pode usar (por exemplo, neste caso). Defina o número máximo de threads como parâmetro para a função run
:
echo ( new TesseractOCR ( ' img.png ' ))
-> threadLimit ( 1 )
-> run ();
Você pode contribuir para este projeto:
Apenas certifique-se de dar uma olhada em nosso Código de Conduta e instruções de contribuição.
tesseract-ocr-for-php é lançado sob a licença MIT.
Feito com em Berlim