processamento de imagem / OCR super leve
-
11-09-2019 - |
Pergunta
Eu tenho 55 000 arquivos de imagem (em formato JPG e TIFF), que são imagens de um livro.
A estrutura de cada página é o seguinte:
algum texto
--- (linha horizontal) ---
um número
algum texto
--- (linha horizontal) ---
outro número
algum texto
Não pode haver de zero a 4 linhas horizontais em qualquer página.
Eu preciso encontrar o que o número é, logo abaixo da linha horizontal.
Mas, os números seguem de forma rigorosa, a partir de uma em uma página, de modo a fim de encontrar o número, eu não preciso lê-lo: eu só poderia detectar a presença de linhas horizontais, que deve ser tanto mais fácil e mais seguro do que tentar OCR da página para detectar os números.
O algoritmo seria, basicamente:
for each image
count horizontal lines
print image name, number of horizontal lines
next image
A questão é: qual seria a melhor biblioteca de imagens / idioma para fazer a parte "contar linhas horizontais"
Solução
Provavelmente a maneira mais fácil de detectar suas linhas está usando o Hough transformar na OpenCV (que tem invólucros para várias línguas) .
O tranform OpenCV Hough irá detectar todas as linhas na imagem e voltar seus ângulos e começar / coordenadas de parada. Você só deve manter aqueles cujos ângulos estão perto horizontal e de comprimento adequado.
O O'Reilly Aprendizagem OpenCV explica em detalhes entrada e saída da função (p.156).
Outras dicas
Se você tem bom contraste, tente executar os componentes conectados e analisar o resultado. Pode ser uma alternativa para encontrar linhas através Hough e cobrirem o caso quando os seus elementos estruturados são um pouco curvadas ou uma linha algoritmo pega as linhas que você não quer que ele a pegar.
componentes ligados é um super rápido, dois raster varredura algoritmo e lhe dará uma máscara com tudo o que você conectado elementos nele marcado com rótulos diferentes e contabilizadas. Você pode descartar curto nada (em termos de relação de aspecto). No geral, este pode ser mais geral, mais rápido, mas, provavelmente, um pouco mais envolvido do que correr transformada de Hough. A transformada de Hough por outro lado, será mais tolerável para artefactos de contraste e até mesmo a abertura acidental de linhas. OpenCV tem as findContours () função que encontrar componentes para você.
Você pode querer tentar de John' Resig OCR e redes neurais em Javascript