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.
Como usar o Tesseract com LSTM
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.
Como instalar o tesseract com LSTM com pip
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.
Como instalar o tesseract com LSTM no shell
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
Como usar o tesseract com LSTM por linha de comando
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.
Parâmetros para o Tesseract com LSTM
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
Comments are closed, but trackbacks and pingbacks are open.