Cómo detectar texto / imágenes en una imagen de documento

Hay cuatro formas de lograr esta tarea con un resultado definitivo y una alta precisión. Como me especializo en soluciones comerciales para diversas tareas de procesamiento de imágenes y captura de datos, mi kit de herramientas consta de herramientas comerciales de alta calidad, pero quizás se puedan lograr los mismos métodos con otras herramientas. También supongo que esta tarea debe realizarse para un gran volumen de imágenes, por lo que todas mis respuestas suponen un procesamiento por lotes automatizado.

Opción 1. Detectar texto a través de OCR, luego redactarlo. Utilizando un potente reconocimiento óptico de caracteres, como la API web OCR-IT (API OCR | Convertir imágenes en texto electrónico | Software OCR), procese esta imagen en XML. El resultado XML contendrá todo el texto detectado y sus coordenadas para cada palabra. Luego, un script puede tomar esas coordenadas y blanquear todas las áreas, dejando efectivamente solo las imágenes. Configuración e implementación: unas pocas horas. Costo: centavos por página.

Opción 2. Detectar imágenes, luego extraerlas. Usando el mismo proceso que en la opción # 1, pero los objetos de imagen de destino, cuyas coordenadas también se proporcionarán en el XML. Usa esas coordenadas y extrae estas imágenes. Configuración e implementación: unas pocas horas. Costo: centavos por página.

Opción 3. Detecte imágenes como objetos y extráigalas, método listo para usar, no requiere programación. Utilice un paquete comercial de captura de datos / extracción de contenido FlexiCapture (procesamiento inteligente de formularios y captura de datos ABBYY FlexiCapture) detecte objetos de imagen por tipo de objeto y / o tamaño. El software guarda todas las imágenes detectadas en archivos individuales separados. Configuración e implementación: 1-2 horas. Costo: varios miles para la compra inicial de FlexiCapture.

Opción 4. Subcontratar a una oficina de servicios especializados. Usando el mismo software mencionado en el n. ° 3, pero permita que otra persona que ya posee FlexiCapture ejecute el proyecto por usted. Tengo varios socios que actualmente poseen FlexiCapture y pueden ejecutar esta extracción por usted. Configuración e implementación: ninguna, realizada por un experto externo. Costo: algo por página.

No dude en ponerse en contacto conmigo si tiene alguna pregunta.

Un método simple y apreciablemente eficiente es usar las funciones MSER (regiones extremas máximamente estables) para detectar texto. Dado un papel impreso, las características de MSER intentan encontrar regiones conectadas (y casi conectadas). Necesitamos ajustar los parámetros como el área mínima, el umbral, etc. para que funcione para un tipo específico de papel impreso.

La característica MSER lista para usar se implementa como una función en la biblioteca OpenCV que es eficiente, rápida y eficiente de usar con C ++, Python o Java. Además, MATLAB le proporciona las mismas funciones.
Este enlace, Detección y descripción de funciones, sería útil. Además, para saber cuáles son las entradas (parámetros) que se deben dar a este algoritmo, se trata aquí, página en stackoverflow.com.

Para usarlo a través de Matlab, compruebe esto, detecte las características de MSER y devuelva el objeto MSERRegions.

Déjame asumir que el documento está impreso y no escrito a mano. Consideremos el documento escaneado como una imagen en escala de grises.

Si aplica un filtro espacial para detectar bordes horizontales, los datos de texto aparecerían como líneas nerviosas espaciadas uniformemente, mientras que las imágenes muestran continuidad en áreas más amplias. Cuando se aplica el filtro vertical hacia arriba en la imagen del borde horizontal, la mayoría de las áreas de texto desaparecerían, y lo que queda es la imagen.

Puede repetir el proceso de filtro o cambiar el parámetro del filtro espacial para obtener los mejores efectos.

Hay una técnica llamada ventanas. Esto se hace utilizando redes neuronales o máquinas de vectores de soporte.

Básicamente, entrena su clasificador (red neuronal o SVM) con 1000000 de imágenes de caracteres individuales de tamaño de píxel de 10 x 10 más o menos.

Si su imagen objetivo es, digamos, 1280 x 720, comienza dividiendo en una cuadrícula de 10 × 10 cuadrados. Alimenta cada uno de estos cuadrados a un clasificador para ver si es un carácter de texto. Si resulta ser cierto, lo deja en blanco.

Después de esto, cualquier cosa que no esté en blanco en su región de imagen es la región de texto.

Mira este video, Coursera

La mejor y más precisa forma de reconocer una región de texto es detectar algo de texto dentro de ella; confirmando de ahora en adelante que la región de hecho contiene texto.

Por eso recomiendo buscar tecnologías de reconocimiento de texto. Puede construir un RNN (Red neuronal recurrente) o un DNN (Red neuronal profunda) para el reconocimiento de imágenes. Sin embargo, tenga cuidado, el reconocimiento de imágenes para diferentes tamaños de fuente no es la tarea más fácil. Seguir este enfoque también requerirá una amplia escala / reducción de escala de todas las regiones.

Otro enfoque será simplemente entrenar un MLP (Perceptrón de múltiples capas) para reconocer regiones de texto basadas en regiones ya marcadas. La imagen de entrada (imagen del documento) puede dividirse en secciones y clasificarse para la capacitación.

Aunque generalmente, las soluciones generales son mejores. La base de conocimiento abstraída se puede reutilizar y reutilizar según sea necesario con un esfuerzo relativamente menor.

El reconocimiento óptico de caracteres (OCR) puede ayudarlo a resolver el reconocimiento de texto de imágenes, como jpeg, png, tiff y gif.
El OCR en línea puede proporcionar un 99% de precisión en el reconocimiento de texto, y es gratis y fácil de usar. solo necesita cargar su archivo de imagen, esta herramienta ocr puede detectar texto de imágenes gratis en línea.
La mejor fuente abierta de OCR es tesseract, compatible con más de 100 tipos de idiomas.

Si desea detectar texto con diferente tamaño de letra, tipo e incluso en diferentes idiomas sin aprender, le aconsejo que elija algo llamado transformación de ancho de trazo. Establece que los caracteres que pertenecen a la misma línea tienen el mismo trazo, puede leer más en este documento: http://research.microsoft.com/pu
Código: SWT: Transformación de ancho de trazo