Como faço para escolher entre Tesseract e OpenCV? [fechadas]

93

Recentemente encontrei o Tesseract e o OpenCV . Parece que o Tesseract é um mecanismo de OCR completo e o OpenCV pode ser usado como uma estrutura para criar um aplicativo / serviço de OCR.

Tentei usar Tesseract em algumas das minhas imagens e sua precisão parece decente. Mais tarde, me deparei com um tutorial muito simples sobre como usar o OpenCV para realizar OCR usando Python e fiquei impressionado. Em poucos minutos, terminei de treinar o sistema e sua precisão era boa. Mas é claro que essa abordagem significa que preciso treinar meu sistema extensivamente usando um grande conjunto de treinamento.

Minhas perguntas específicas são as seguintes:

  • Como escolher entre o Tesseract e o OpenCV para construir um aplicativo OCR personalizado?
  • Existem conjuntos de dados de treinamento disponíveis para Tesseract para diferentes idiomas. O OpenCV tem algo semelhante para que eu não tenha que começar a trabalhar para obter OCR?
  • Qual é o melhor para uma aplicação comercial pretensiosa?

Alguma sugestão?

lenda
fonte
8
As respostas abaixo são realmente ótimas, mas como alguém que trabalhou com OCR, posso dizer que a qualidade do reconhecimento no Tesseract está abaixo das expectativas de um usuário de aplicativo comercial. Tesseract é ótimo, mas OCR é difícil - coisas como treinamento online ou melhorias instantâneas são hmmm ... ainda pesquisa. O Google, o grande patrocinador do TS ultimamente, decidiu construir seu próprio motor - OCROpus. E embora prometesse abrir o código-fonte, o mecanismo de reconhecimento principal ainda não está disponível - eles apenas publicaram uma estrutura - que é uma API para tesseract.
Sam
3
@vasile: Isso é muito informativo. Eu não estava ciente de OCROpus. Obrigado. Você teria alguma sugestão de alternativas se meu objetivo final fosse escrever um OCR de cartão de visita (ou digamos, um que leia recibos de posto de gasolina como o que eu vinculei : upload.wikimedia.org/wikipedia/en/3/34/… )? Estou perguntando porque estou curioso para saber o que os vários aplicativos móveis usam para fazer isso. Não me importo de fazer o OCR no servidor. Fiquei tentado a usar o OpenCV depois de ver esta demonstração legal: youtube.com/watch?v=OkcOfS1lTxs
Legend
6
Existem vários motores de OCR comerciais, basta google OCR accuracy testse você encontrará alguns gráficos. E por falar em aplicativos móveis, a maioria deles usa tesseract. Mas se você se importar em baixar alguns deles, verá que os resultados são um pouco diferentes das promessas. Eles geralmente fazem uma demonstração em vídeo em um ambiente cuidadosamente controlado e postam no youtube, mas à solta, se você escanear uma página / receita / cartão / qualquer coisa, você obterá alguns resultados engraçados.
Sam
1
@vasile: Obrigado. Algo para me manter ocupado esta noite. Realmente aprecio seu tempo.
Legend

Respostas:

77
  • Tesseract é um mecanismo de OCR. É usado, trabalhado e financiado pelo Google especificamente para ler texto de imagens, realizar segmentação de documentos básicos e operar em entradas de imagens específicas (uma única palavra, linha, parágrafo, página, dicionários limitados, etc.).

  • O OpenCV, por outro lado, é uma biblioteca de visão computacional que inclui recursos que permitem realizar algumas extrações de recursos e classificação de dados. Você pode criar um classificador e segmentador de letras simples que executa OCR básico, mas não é um mecanismo de OCR muito bom (eu fiz um em Python antes do zero. É realmente impreciso para entrada que se desvia de seus dados de treinamento).

Se você deseja obter uma compreensão básica de como o OCR é difícil, experimente o OpenCV. Tesseract é para OCR real .

Liquidificador
fonte
3
Isso depende de suas imagens de entrada. Tesseract funciona melhor quando as letras são nítidas, em uma linha horizontal, espaçadas, não conectadas e perfeitamente em preto e branco. Trabalhei na comunidade de digitalização / preservação de livros DIY por cerca de um ano e trabalhei em software em meu tempo livre para facilitar o processo. O melhor software disponível (comercial ou não) para pós-processamento de qualquer imagem com texto é o Scan Tailor . Ele tem algumas opções de CLI, mas se você levar algum tempo para ver como funciona, é incrível.
Blender
2
Trabalhei um pouco no código-fonte do Scan Tailor e ele não usa o OpenCV internamente, mas muitos dos algoritmos que foram criados podem ser reescritos com as funções do OpenCV com muita facilidade. Se suas imagens não estão distorcidas e não estão degradadas, você realmente só precisa implementar a binarização adaptativa e alguma remoção simples antes de alimentar sua imagem no Tesseract.
Blender
1
Com relação à sua pergunta, eu estava testando algumas imagens de entrada aleatórias ontem. Tentei um recibo de um posto de gasolina: upload.wikimedia.org/wikipedia/en/3/34/… Ele reconheceu o 0como um 8(no total de $ 20,00). Eu admito que o dígito foi difícil até mesmo para eu decifrar, mas eu não tinha certeza do que mais pode ser feito para adaptar o Tesseract a essas situações ou talvez introduzir um componente de aprendizado se eu tiver uma base de usuários ativa.
Legend
5
O Tesseract é treinado para ler conjuntos de fontes específicos. Essas letras em bloco não são uma delas. Você terá que apresentar ao Google um sacrifício de animal e tentar treinar Tesseract você mesmo: code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3
Blender
1
Além disso, antes de começar a escrever um mecanismo de OCR personalizado para ler essas cartas, não espere que ele seja preciso. Eu escrevi um para automatizar a Roda da Fortuna e as imagens de amostra (capturas de tela de um jogo online) eram JPEGs. Os artefatos da compressão JPEG foram suficientes para bagunçar o classificador de imagem, a menos que eu fornecesse cerca de 10-20 imagens de amostra de cada caractere.
Blender
65

Eu sou o autor daquele tutorial de reconhecimento de dígitos que você mencionou, e eu diria que não é um substituto para o tesserato.

Tesseract é um motor de OCR realmente bom, pode ser o melhor motor de OCR OpenSource.

O tutorial que você mencionou é apenas uma tentativa de entender o funcionamento mais simples do OCR.

Portanto, se você estiver procurando por um aplicativo OCR, recomendo que você use o OpenCV para pré-processar a imagem e, em seguida, aplique o mecanismo tesseract.

Abid Rahman K
fonte
1
+1 Obrigado. Em primeiro lugar, obrigado pelo tutorial :) Foi uma leitura muito interessante. Você está ciente de alguma referência / tutorial sobre como utilizar o OpenCV junto com o Tesseract? Não falando sobre interface, mas o tipo de transformações de imagem ou pré-processamento que precisa ser feito para melhorar a precisão do Tesseract?
Legend
2
Gostaria apenas de dizer que, embora o Tesseract seja um bom mecanismo de OCR em comparação a outros, ele ainda é bastante impreciso, tive uma taxa de sucesso de cerca de 40% em obter o texto correto reconhecido. Esperançosamente, será melhor em alguns anos.
GangstaGraham
4
@GangstaGraham Você só precisa treinar o tesseract e obter melhores resultados em poucas horas ou dias, não anos. opensource.newmediaist.com/tesseract-training.html
valentt
1
Eu uso o PyTesseract para a extração de texto em tempo real. Funciona bem no Linux PC, mas é muito lento no ambiente Raspberry Pi ... Há alguma maneira de instalar a versão leve? Por exemplo, processar apenas dígitos e letras maiúsculas do alfabeto inglês?
Yuriy Chernyshov
9

Os dois podem ser complementares. Se você leu o artigo sobre OpenCV: https://github.com/tesseract-ocr/docs/blob/master/tesseracticdar2007.pdf

Ele destaca que "Uma vez que a HP desenvolveu de forma independente a tecnologia de análise de layout de página que foi usada em produtos, (e, portanto, não foi lançada para código aberto), o Tesseract nunca precisou de sua própria análise de layout de página. O Tesseract, portanto, assume que sua entrada é uma imagem binária com regiões de texto poligonais opcionais definidas. "

Este tipo de tarefa pode ser executado pelo OpenCV e a imagem resultante entregue ao Tesseract. Você pode encontrar uma amostra desse tipo de código no repositório Git: https://github.com/Itseez/opencv_contrib/tree/master/modules/text/samples As amostras usam APIs do Tesseract para fazer conversão de imagem em texto.

user2957542
fonte
3

OpenCV é uma biblioteca para CV , usada para analisar e processar imagens em geral. Tesseract é uma biblioteca para OCR , que é um subconjunto especializado de CV dedicado a extrair texto de imagens.

De OpenCV.org

..... usado para detectar e reconhecer rostos, identificar objetos, classificar ações humanas em vídeos, rastrear movimentos de câmera, rastrear objetos em movimento, extrair modelos 3D de objetos, produzir nuvens de pontos 3D de câmeras estéreo, juntar imagens para produzir uma alta imagem de resolução de uma cena inteira, encontre imagens semelhantes em um banco de dados de imagens, remova olhos vermelhos de imagens tiradas com flash, siga os movimentos dos olhos, reconheça o cenário e estabeleça marcadores para sobrepô-lo com realidade aumentada, etc.

Do Tesseract Github :

..... pode ser usado diretamente ou (para programadores) usando uma API para extrair texto digitado, manuscrito ou impresso de imagens. Suporta uma grande variedade de idiomas.

Aniruddha Varma
fonte