Manual
do
Maker
.
com
Há pouco fui agraciado com a informação de que algumas páginas do blog não estavam carregando. Tomara tenha sido por conta do tema usado anteriormente, mas se vocês notarem que a página fica toda branca, por favor, me avisem pela página DobitAoByte no Facebook. O tema que trouxe a informação até mim foi o LPR desse artigo e também desse outro. Um deles não estava carregando. O assunto encaminhou para o reconhecimento dos caracteres, onde recomendei um dataset ou alguma tentativa utilizando o tesseract com LSTM, uma rede neural dele próprio, disponível desde a versão 4.0.
Tem duas formas básicas; uma é instalando o pytesseract pelo pip e a outra é diretamente pelo shell. Vou mostrar a instalação de ambos e exemplificar o uso.
Basicamente, instale o programa python3-pip e depois instale o pytesseract:
sudo apt-get install python3-pip
sudo pip3 install pytesseract
Vamos instalar o programa para teste.
Para utilizá-lo sem programar nada mais, podemos utilizar o programa por linha de comando. Para isso, instale os seguintes pacotes:
sudo apt-get install tesseract-ocr tesseract-ocr-por
Agora vamos ver um pouco da saída de help
Claro que será ideal experimentar antes de desenvolver. Para alguns casos pode ser a solução perfeita, mas inviável para outros. Quando me perguntaram se funcionava, fiz um exemplo simples e mostrei na hora o resultado, no messenger, pelo facebook:
O texto branco sobre o fundo azul não funcionou. O que fazer nesse caso? Bem, se fosse necessário, poderíamos inverter as cores, converter para grayscale e ajustar o contraste, tudo isso usando o OpenCV. Não tem mágica, se quiser um bom resultado, precisará ter um pouco de trabalho. Mas considerando o contraste da letra escura (que não é preto) sobre um cinza acentuado, já deu pra ver que o programa funciona bem:
Quando escolher o nome de saída, dispense a extensão; ele cria automaticamente como txt, por isso que o nome do arquivo de saída ficou output.txt.txt.
Para pegar os parâmetros, precisamos chamar o programa com --help-extras como parâmetro. Temos 4 modos de operação; legado, somente com rede neural, legado + rede neural ou padrão conforme o que estiver instalado.
esseract -l por --help-extra
Usage:
tesseract --help | --help-extra | --help-psm | --help-oem | --version
tesseract --list-langs [--tessdata-dir PATH]
tesseract --print-parameters [options...] [configfile...]
tesseract imagename|imagelist|stdin outputbase|stdout [options...] [configfile...]
OCR options:
--tessdata-dir PATH Specify the location of tessdata path.
--user-words PATH Specify the location of user words file.
--user-patterns PATH Specify the location of user patterns file.
--dpi VALUE Specify DPI for input image.
-l LANG[+LANG] Specify language(s) used for OCR.
-c VAR=VALUE Set value for config variables.
Multiple -c arguments are allowed.
--psm NUM Specify page segmentation mode.
--oem NUM Specify OCR Engine mode.
NOTE: These options must occur before any configfile.
Page segmentation modes:
0 Orientation and script detection (OSD) only.
1 Automatic page segmentation with OSD.
2 Automatic page segmentation, but no OSD, or OCR.
3 Fully automatic page segmentation, but no OSD. (Default)
4 Assume a single column of text of variable sizes.
5 Assume a single uniform block of vertically aligned text.
6 Assume a single uniform block of text.
7 Treat the image as a single text line.
8 Treat the image as a single word.
9 Treat the image as a single word in a circle.
10 Treat the image as a single character.
11 Sparse text. Find as much text as possible in no particular order.
12 Sparse text with OSD.
13 Raw line. Treat the image as a single text line,
bypassing hacks that are Tesseract-specific.
OCR Engine modes: (see https://github.com/tesseract-ocr/tesseract/wiki#linux)
0 Legacy engine only.
1 Neural nets LSTM engine only.
2 Legacy + LSTM engines.
3 Default, based on what is available.
Single options:
-h, --help Show minimal help message.
--help-extra Show extra help for advanced users.
--help-psm Show page segmentation modes.
--help-oem Show OCR Engine modes.
-v, --version Show version information.
--list-langs List available languages for tesseract engine.
--print-parameters Print tesseract parameters.
No exemplo utilizei --oem 1, que faz uso exclusivamente do LSTM. Podemos fazer segmentação, mas ele tentará deduzir a palavra se for por uma base invés de LSTM. A placa da Merdosul não devolveu nenhum resultado com a fonte escrota européia, mas com uma fonte diferente o resultado foi perfeito.
Vale salientar que o isolamento da placa foi muito bem explicado nos artigos anteriores relacionados, citados no começo desse artigo.
O resultado foi:
Enfim, podemos aplicar diversos filtros diferentes do OpenCV para achatar a letra, modificar os cantos para ficar como acima e coisas do tipo que poderão lhe levar a um resultado muito satisfatório. Cabe estudo.
Se quiser usar com Python (e certamente quererá), recomendo seguir o exemplo do PySearchImage.
É isso por enquanto.
Revisão: Ricardo Amaral de Andrade
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.