Eu tenho usado o tesseract para converter documentos em texto. A qualidade dos documentos varia muito, e estou procurando dicas sobre que tipo de processamento de imagem pode melhorar os resultados. Percebi que o texto altamente pixelizado - por exemplo, o gerado por máquinas de fax - é especialmente difícil para o tesseract processar - presumivelmente todas essas bordas irregulares nos caracteres confundem os algoritmos de reconhecimento de forma.
Que tipo de técnicas de processamento de imagem melhoraria a precisão? Eu tenho usado um desfoque gaussiano para suavizar as imagens pixelizadas e vi algumas pequenas melhorias, mas espero que exista uma técnica mais específica que produza melhores resultados. Diga um filtro que foi ajustado para imagens em preto e branco, que suavizariam bordas irregulares, seguido de um filtro que aumentaria o contraste para tornar os caracteres mais distintos.
Alguma dica geral para quem é iniciante no processamento de imagens?
fonte
Não sou de modo algum um especialista em OCR. Mas nesta semana eu precisei converter texto de um jpg.
Comecei com um jpg colorido RGB de 445x747 pixels. Eu tentei imediatamente tesseract sobre isso, e o programa converteu quase nada. Eu entrei no GIMP e fiz o seguinte. imagem> modo> imagem em escala de cinza> imagem em escala> filtros de 1191x2000 pixels> aprimoramento> máscara de nitidez com valores de raio = 6,8, valor = 2,69, limite = 0 Em seguida, salvei como um novo jpg com 100% de qualidade.
O Tesseract conseguiu extrair todo o texto em um arquivo .txt
Gimp é seu amigo.
fonte
Três pontos para melhorar a legibilidade da imagem: 1) Redimensione a imagem com altura e largura variáveis (multiplique 0,5 e 1 e 2 com altura e largura da imagem). 2) Converta a imagem no formato de escala de cinza (preto e branco). 3) Remova os pixels de ruído e deixe mais claro (Filtre a imagem).
Consulte o código abaixo:
IMAGEM DE ENTRADA
IMAGEM DE SAÍDA
fonte
Como regra geral, geralmente aplico as seguintes técnicas de pré-processamento de imagem usando a biblioteca OpenCV:
Redimensionar a imagem (é recomendado se você estiver trabalhando com imagens com um DPI inferior a 300 dpi):
Convertendo imagem em escala de cinza:
Aplicando dilatação e erosão para remover o ruído (você pode brincar com o tamanho do kernel, dependendo do seu conjunto de dados):
A aplicação de desfoque, que pode ser feita usando uma das seguintes linhas (cada uma com seus prós e contras, no entanto, o desfoque médio e o filtro bilateral geralmente apresentam desempenho melhor que o desfoque gaussiano.):
Recentemente, escrevi um guia bastante simples para o Tesseract, mas ele deve permitir que você escreva seu primeiro script de OCR e elimine alguns obstáculos que experimentei quando as coisas estavam menos claras do que gostaria na documentação.
Caso você queira vê-los, aqui estou compartilhando os links com você:
Introdução ao Tesseract - Parte I: Introdução
Introdução ao Tesseract - Parte II: Pré-processamento de Imagem
fonte
Isso é um pouco atrás, mas ainda pode ser útil.
Minha experiência mostra que redimensionar a imagem na memória antes de passar para o tesseract às vezes ajuda.
Experimente diferentes modos de interpolação. A postagem https://stackoverflow.com/a/4756906/146003 me ajudou muito.
fonte
O que foi extremamente útil para mim dessa maneira são os códigos-fonte do projeto Capture2Text. http://sourceforge.net/projects/capture2text/files/Capture2Text/ .
BTW: Parabéns ao seu autor por compartilhar um algoritmo tão meticuloso.
Preste atenção especial ao arquivo Capture2Text \ SourceCode \ leptonica_util \ leptonica_util.c - essa é a essência da pré-processamento de imagem para este utilitário.
Se você executar os binários, poderá verificar a transformação da imagem antes / depois do processo na pasta Capture2Text \ Output \.
A solução mencionada PS usa o Tesseract para OCR e Leptonica para pré-processamento.
fonte
Versão Java para o código de Sathyaraj acima:
fonte
A documentação do Tesseract contém alguns bons detalhes sobre como melhorar a qualidade do OCR através das etapas de processamento de imagem.
Até certo ponto, o Tesseract os aplica automaticamente. Também é possível solicitar ao Tesseract que grave uma imagem intermediária para inspeção, ou seja, verifique como o processamento interno da imagem funciona (procure
tessedit_write_images
na referência acima).Mais importante, o novo sistema de rede neural no Tesseract 4 produz resultados OCR muito melhores - em geral e especialmente para imagens com algum ruído. É ativado com
--oem 1
, por exemplo, como em:(este exemplo seleciona o idioma alemão)
Portanto, faz sentido testar primeiro a que distância você chega com o novo modo Tesseract LSTM antes de aplicar algumas etapas personalizadas de processamento de imagem de pré-processamento.
fonte
O limiar adaptativo é importante se a iluminação for irregular na imagem. Meu pré-processamento usando o GraphicsMagic é mencionado neste post: https://groups.google.com/forum/#!topic/tesseract-ocr/jONGSChLRv4
O GraphicsMagic também possui o recurso -lat para o limiar adaptativo de tempo linear, que tentarei em breve.
Outro método de limiar usando o OpenCV é descrito aqui: http://docs.opencv.org/trunk/doc/py_tutorials/py_imgproc/py_thresholding/py_thresholding.html
fonte
Fiz isso para obter bons resultados de uma imagem que não possui texto muito pequeno.
E se ainda não obtiver bons resultados, redimensione a imagem para 150% ou 200%.
fonte
A leitura de texto de documentos de imagem usando qualquer mecanismo de OCR tem muitos problemas para obter uma boa precisão. Não há solução fixa para todos os casos, mas aqui estão algumas coisas que devem ser consideradas para melhorar os resultados do OCR.
1) Presença de ruído devido à baixa qualidade da imagem / elementos / blobs indesejados na região de segundo plano. Isso requer algumas operações de pré-processamento, como remoção de ruído, que podem ser feitas facilmente usando o filtro gaussiano ou métodos normais de filtro mediano. Estes também estão disponíveis no OpenCV.
2) Orientação incorreta da imagem: devido à orientação incorreta, o mecanismo OCR falha ao segmentar as linhas e palavras na imagem corretamente, o que fornece a pior precisão.
3) Presença de linhas: ao fazer a segmentação de palavras ou linhas, o mecanismo de OCR às vezes também tenta mesclar as palavras e as linhas, processando conteúdo incorreto e, portanto, fornecendo resultados incorretos. Existem outras questões também, mas essas são as básicas.
Esse aplicativo pós- OCR é um exemplo de caso em que alguns pré-processamento e pós-processamento de imagem no resultado do OCR podem ser aplicados para obter melhor precisão do OCR.
fonte
O reconhecimento de texto depende de vários fatores para produzir uma saída de boa qualidade. A saída de OCR depende muito da qualidade da imagem de entrada. É por isso que todo mecanismo de OCR fornece diretrizes sobre a qualidade da imagem de entrada e seu tamanho. Essas diretrizes ajudam o mecanismo de OCR a produzir resultados precisos.
Eu escrevi um artigo detalhado sobre o processamento de imagens em python. Por favor, siga o link abaixo para obter mais explicações. Também foi adicionado o código-fonte python para implementar esses processos.
Por favor, escreva um comentário se você tiver uma sugestão ou uma idéia melhor sobre este tópico para melhorá-lo.
https://medium.com/cashify-engineering/improve-accuracy-of-ocr-using-image-preprocessing-8df29ec3a033
fonte
você pode reduzir o ruído e aplicar limiar, mas pode brincar com a configuração do OCR alterando os valores --psm e --oem
tente: --psm 5 --oem 2
você também pode consultar o link a seguir para obter mais detalhes aqui
fonte