Biblioteca C ++ para reconhecimento de imagem: imagens que contenham palavras para string

StackOverflow https://stackoverflow.com/questions/462860

Pergunta

Alguém sabe de uma biblioteca C ++ para obter uma imagem e efectuar o reconhecimento de imagem nele de tal forma que ele pode encontrar cartas com base em uma determinada fonte e / ou fonte altura? Mesmo aquele que não permite que você selecione uma fonte seria bom (por exemplo:. ReadLetters (imagem de imagem)

Foi útil?

Solução

Eu estive olhando para este lote um recentemente. Sua melhor é simplesmente Tesseract. Se você precisa de análise do layout no topo do OCR do que ir com OCRopus (que por sua vez usa Tesseract para fazer o OCR). análise do layout refere-se a ser capaz de detectar a posição do texto na imagem e fazer coisas como segmentação linha, segmentação de bloco, etc.

Eu encontrei alguns realmente boas dicas através da experimentação com Tesseract que valem a pena compartilhar. Basicamente, eu tinha que fazer um monte de pré-processamento para a imagem.

  1. Upsize / Downsize sua imagem de entrada para 300 dpi.
  2. Remover cor da imagem. escala de cinza é bom. Eu realmente usado um limiar exaltação e fiz meu preto de entrada e branco.
  3. Cortar lixo desnecessário de sua imagem. Para todos os três acima eu netbpm utilizado (um conjunto de ferramentas de manipulação de imagem para unix) para chegar ao ponto onde eu estava ficando praticamente 100 por cento de precisão para o que eu precisava.

Se você tem uma fonte altamente personalizado e ir com tesseract sozinho você tem que "Train" do sistema - basicamente você tem que alimentar um bando de dados de treinamento. Isto está bem documentado no site tesseract-ocr. Você essencialmente criar uma "linguagem" nova para o seu tipo de letra e passá-lo com o parâmetro -l.

O outro mecanismo de formação que encontrei foi com OCRopus usando net nueral (BPnet) treinamento. Ela exige uma grande quantidade de dados de entrada para construir um bom modelo estatístico.

Em termos de invocar Tesseract / OCRopus são ambos C ++. Não vai ser tão simples como readlines (Imagem), mas há uma API que você pode conferir. Você também pode invocar via linha de comando.

Outras dicas

Enquanto eu não posso recomendar um em particular, o termo que você está procurando é OCR (Optical Character Recognition).

tesseract-ocr que é uma biblioteca profissional para fazer isso.

De lá web site

O motor Tesseract OCR foi um dos 3 principais motores no teste de Precisão 1995 UNLV. Entre 1995 e 2006, tinha pouco trabalho feito sobre o assunto, mas é provavelmente um dos mais motores precisos open source OCR disponível

Eu acho que você quer é Conjectura . Costumava ser o projeto libgocr. Eu nunca usei isso por alguns anos, mas que costumava ser muito confiável se você configurar uma chave.

O biblioteca Tesseract OCR dá resultados bastante precisos, sua biblioteca C e C ++. Meus resultados iniciais foram cerca de 80% exato, mas a aplicação de pré-processamento nas imagens antes de fornecer dentro para OCR os resultados foram cerca de 95% de precisão. O que é pré-pré-processamento:

1) Binarize o bitmap (B & W funcionou melhor para mim). Como isso poderia ser feito

2) Resampling sua imagem a 300 dpi

3) Guardar a sua imagem em um formato lossless, como LZW TIFF ou CCITT Grupo 4 TIFF.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top