Logotipo de Zephyrnet

Comprensión de la detección de etiquetas en facturas con OpenCV

Fecha:

Introducción

El análisis de imágenes de documentos es el nombre de los algoritmos y métodos utilizados para convertir los píxeles de una imagen en una descripción que una computadora pueda entender. Reconocimiento óptico de caracteres, u OCR, utiliza la visión por computadora para encontrar y leer el texto en las imágenes. OCR puede predecir con precisión la salida en cuestión de milisegundos. OCR fue uno de los primeros problemas que visión de computadora trató de resolver, y ha recorrido un largo camino desde entonces. Con la ayuda de estos modelos de OCR, encontramos una forma de etiquetar las facturas de detección, como el nombre del proveedor, la fecha de la factura, el número de la factura, el monto de la factura y la cantidad total de artículos. Para obtener un alto nivel de precisión, utilizamos una técnica de conjunto en la que usamos diferentes OCR para detectar y reconocer las etiquetas por separado.

OBJETIVOS DE APRENDIZAJE 

A continuación se presentan los principales objetivos de aprendizaje de este artículo:

  1. Aprenderás a usar abiertocv para la detección de etiquetas en una factura, como el número de factura, la fecha de la factura, el monto total, el número total de artículos, etc.
  2. Aprenderás a obtener las coordenadas del texto de cualquier imagen de factura.
  3. Aprenderás los pasos en preprocesamiento de imagen.
  4. Aprenderá a saber qué tipo de plantilla es una nueva factura utilizando el conjunto de datos de imagen de plantilla.
  5. Revise los fragmentos de código para comprender los objetivos anteriores.

Este artículo fue publicado como parte del Blogatón de ciencia de datos.

Índice del contenido

Arquitectura básica

  • Digamos que necesitamos detectar etiquetas en facturas de diferentes plantillas y se nos proporciona un conjunto de datos de etiquetas de plantilla que consta de los nombres de las etiquetas para varias plantillas.
  • Si tenemos un conjunto de datos de etiquetas de plantilla con los nombres de las etiquetas para un número de templ.
  • Las coordenadas de las etiquetas requeridas para cada plantilla se almacenan en una tabla (archivo csv).
  • El mapeo de diseño se realiza para encontrar la plantilla de imagen para la nueva factura, de modo que las etiquetas para la nueva factura se puedan encontrar utilizando las coordenadas que ya se han almacenado.
  • Después de encontrar la plantilla, se recuperaron las coordenadas de las etiquetas en la tabla (archivo csv).
  • Las coordenadas extraídas se utilizan para predecir las etiquetas de la nueva factura.

Preprocesamiento de Imagen de Facturas

Dado que la entrada es una imagen de una factura, sabemos que el preprocesamiento de las imágenes es un paso muy importante que nos ayudará a obtener mejores resultados. Para ello, utilizamos corrección de inclinación, binarización, filtrado de ruido y detección de contornos como parte del preprocesamiento.

#binarisation
res = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY,11,2) plt.figure(figsize=(100, 60))
plt.imshow(res,'gray')
plt.show() #noise filtering
cv2.fastNlMeansDenoisingColored(img,None,10,10,7,21) #skew correction
import numpy as np
from skimage import io
from skimage.transform import rotate
from skimage.color import rgb2gray
from deskew import determine_skew
image = io.imread(_img)
grayscale = rgb2gray(image)
angle = determine_skew(grayscale) rotated = rotate(image, angle, resize=True) * 255
rotated=rotated.astype(np.uint8)

La detección de contornos se realiza porque las facturas en las imágenes que tenemos están en diferentes lugares y necesitamos encontrarlas. Esto se hizo con la ayuda de un "método de detección de contorno". Encuentre el contorno más grande de la imagen, recórtelo para que se ajuste y muéstrelo. Esto se hizo usando la función cv2.findContours() para encontrar los bordes y el método cv2.contourArea() para encontrar el borde con la mayor área, luego recortando la imagen hasta ese borde.

contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
# Find Biggest Contour
areas = [cv2.contourArea(c) for c in contours]
max_index = np.argmax(areas)
# Find approxPoly Of Biggest Contour
epsilon = 0.1 * cv2.arcLength(contours[max_index], True)
approx = cv2.approxPolyDP(contours[max_index], epsilon, True)
# Crop The Image points1 = np.float32(approx)
points = np.float32([[0, 0], [width, 0], [width, height], [0, height]])
result = cv2.warpPerspective(img, matrix, (width, height))
matrix = cv2.getPerspectiveTransform(points1, points)

Luego, utilizando EasyOCR como modelo de detección y PaddleOCR como modelo de reconocimiento, se construye el modelo MultiOcr para obtener las coordenadas de las etiquetas de cada plantilla de factura.

reader = easyocr.Reader(['en'])
ocr = PaddleOCR(lang='en') #detection
def detect_text_blocks(img_path): detection_result = reader.detect(img_path,width_ths=0.7,mag_ratio=1.5) text_coordinates = detection_result[0][0] return text_coordinates

El modelo MultiOcr encuentra las coordenadas de los nombres de etiquetas en el conjunto de datos de etiquetas de plantilla para cada factura de plantilla y las almacena en una tabla (archivo csv). Debido a que la cantidad de elementos de una factura puede variar, se proporcionaron las coordenadas de inicio y finalización de la tabla de elementos de la factura en la imagen de la factura para predecir cuántos elementos había en la factura.

Cuando cambia el tamaño de la tabla de artículos en la imagen de la factura, las etiquetas como la posición de "importe total" cambian. Esto se debe a que el monto total viene después de la tabla de elementos de factura en cualquier factura. Para resolver este problema, se puede utilizar un método de posicionamiento relativo para adivinar y detectar la cantidad total. Esto se puede hacer almacenando las coordenadas de las cadenas alrededor de la etiqueta de cantidad total en la factura. Esto se hace porque el valor de la cadena (o el nombre) no cambia, incluso si las facturas son diferentes pero provienen de la misma plantilla.

Encontrar la plantilla de cualquier nueva factura dada

  • Para detectar las etiquetas de nuevas facturas, necesitamos conocer la plantilla de la factura. El propósito del método de similitud de documentos es predecir la plantilla de factura
  • Como sugiere el nombre, la similitud de documentos le dice qué tan similares son dos documentos. La distancia del documento se usa para determinar qué tan similares son dos documentos. El método de similitud del coseno se puede utilizar para hacer esto
  • A partir de esto, podremos obtener la plantilla de la factura cuyas etiquetas se van a predecir por este método.
  • Por ejemplo
"Detección de etiquetas
"Detección de etiquetas

Detección de etiquetas
El método de similitud de documentos se utiliza en estas tres imágenes. Image1 e image2 son del mismo proveedor e image3 es de un proveedor diferente. Los resultados de similitud de documentos se muestran a continuación:

  • Image1 – Image2: La distancia es 1.000072 (radianes)
  • Image1 – Image3: La distancia es 1.408562 (radianes)

A partir de los resultados del método de similitud de documentos, podemos ver que la distancia entre la imagen 1 y la imagen 2 es menor que entre la imagen 1 y la imagen 3. Esto significa que las imágenes 1 y 2 son del mismo proveedor.

Detección de etiquetas de la nueva factura utilizando las coordenadas de etiquetas de la plantilla

Dado que obtuvimos la plantilla de la tabla (archivo csv), las coordenadas de la etiqueta se toman y se utilizan para identificar las etiquetas de imagen de la factura.

Ejemplo: Cuando se proporciona como entrada una imagen de una factura como la que se muestra a continuación, primero busca la plantilla de la factura. La tabla (archivo csv) se utiliza para obtener las coordenadas de las etiquetas. Las etiquetas de imagen en la factura se identificarán con estas coordenadas de etiqueta.

factura
Fuente: https://gogstbill.com

Métodos para mejorar el rendimiento

  1. Durante el preprocesamiento, se pueden usar diferentes métodos de umbral, como el Umbral global, el Umbral medio adaptativo y el Umbral gaussiano adaptativo, para obtener una mejor imagen de una factura.
  2. Para la detección y el reconocimiento, el modelo MultiOcr puede utilizar varios modelos de OCR, como PyTesseract, PPOCR, easyOCR, MMOCR y Keras-OCR. El modelo OCR que dio mejores resultados será elegido como modelo final.
  3. En el paso de detección del modelo MultiOcr, el ajuste de hiperparámetros se realiza con los parámetros width_ths, que establece la distancia horizontal máxima entre dos cuadros delimitadores que se fusionarán, y mag_ratio, que escala la imagen hacia arriba o hacia abajo según el factor dado.
  4. Se pueden usar varios métodos de similitudes de documentos, como la similitud del coseno y la distancia euclidiana, para mejorar los resultados al predecir la plantilla.

Conclusión

En Conclusión, Con este trabajo se propone un algoritmo para la detección de etiquetas a partir de las facturas utilizando el Modelo MultiOcr; podremos detectar con éxito las posiciones de las etiquetas para las plantillas, así como las etiquetas para cualquier factura nueva dentro de las plantillas dadas. Para ello, utilizamos modelos de OCR como easyOCR como modelo de detección y PaddleOCR como modelo de reconocimiento. Además, nos complace decir que podemos dar mejores resultados con este algoritmo.

Puntos clave de este artículo

  1. Podemos obtener un 85 % de precisión para la detección de contornos, y el modelo multiOcr que incluye EasyOcr y paddleOCR logra aproximadamente un 95 % de precisión.
  2. El enfoque de similitud del coseno determina la similitud del documento con una precisión del 82.8 %. Pueden surgir falsos positivos si dos documentos comparten una gran cantidad de términos.
  3. Hemos discutido los pasos de preprocesamiento de imágenes, la detección de etiquetas de facturas utilizando sus coordenadas y la detección de plantillas de facturas.
  4. Aprendí algunos códigos básicos y concluí el artículo con un ejemplo.

Los medios que se muestran en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.

punto_img

Información más reciente

café vc

café vc

punto_img