OCR con Delphi y Python

 


Para hacer un OCR (reconocimiento óptico de caracteres) de una imagen a texto es necesario instalar Python4Delphi, para ello les remito al siguiente post que contiene un tutorial paso a paso.
Una vez que esté instalado, recuerden añadir en el método OnBeforeLoad del componente PythonEngine1, la siguiente línea:

MaskFPUExceptions(True)

Para evitar los errores de división por cero.

 

Instalación de Tesseract

Tesseract es un motor de reconocimiento óptico de caracteres para varios sistemas operativos.​ Es software libre, liberado bajo la licencia Apache Versión 2.0​ y su desarrollo es financiado por Google desde el 2006.
Tesseract fue considerado en 2006 como uno de los motores de OCR de código abierto más precisos disponibles.
- Descarga del programa de instalación: 
tesseract-ocr-w64-setup-v5.0.0.20211201.exe
las traducciones al Español y al Español tradicional (spa.traineddata y spa_old.traineddata)

y copiarlas en la carpeta
C:\Program Files\Tesseract-OCR\tessdata


- Desde el terminal del PC instalamos las librerías y dependencias de tesseract con pip:
c:\> pip install pytesseract

Copia de la imagen de prueba:

La copiamos en nuestro PC en la carpeta: c:\

Una vez que esté instalado el programa Python4Delphi en nuestro PC
Copiamos el siguiente código en Python en el bloque inferior:
import cv2
import numpy as np
import pytesseract

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

def ordenar_puntos(puntos):
n_puntos = np.concatenate([puntos[0], puntos[1], puntos[2], puntos[3]]).tolist()

y_order = sorted(n_puntos, key=lambda n_puntos: n_puntos[1])

x1_order = y_order[:2]
x1_order = sorted(x1_order, key=lambda x1_order: x1_order[0])

x2_order = y_order[2:4]
x2_order = sorted(x2_order, key=lambda x2_order: x2_order[0])

return [x1_order[0], x1_order[1], x2_order[0], x2_order[1]]

image = cv2.imread('c:/img_00.jpeg')

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
canny = cv2.Canny(gray, 10, 150)
canny = cv2.dilate(canny, None, iterations=1)

cnts = cv2.findContours(canny, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]
cnts = sorted(cnts, key=cv2.contourArea, reverse=True)[:1]

for c in cnts:
epsilon = 0.01*cv2.arcLength(c,True)
approx = cv2.approxPolyDP(c,epsilon,True)

if len(approx)==4:
cv2.drawContours(image, [approx], 0, (0,255,255),2)

puntos = ordenar_puntos(approx)

cv2.circle(image, tuple(puntos[0]), 7, (255,0,0), 2)
cv2.circle(image, tuple(puntos[1]), 7, (0,255,0), 2)
cv2.circle(image, tuple(puntos[2]), 7, (0,0,255), 2)
cv2.circle(image, tuple(puntos[3]), 7, (255,255,0), 2)

pts1 = np.float32(puntos)
pts2 = np.float32([[0,0],[270,0],[0,310],[270,310]])
M = cv2.getPerspectiveTransform(pts1,pts2)
dst = cv2.warpPerspective(gray,M,(270,310))
cv2.imshow('dst', dst)

texto = pytesseract.image_to_string(dst, lang='spa')
print('texto: ', texto)

cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Y pulsamos el botón EXECUTE SCRIPT deL programa



 

 

y si todo va bien veremos el resultado del escaneo del texto en la caja superior.


Reconocimiento código python:
https://www.youtube.com/@OMES-va



No hay comentarios:

Publicar un comentario

Simulación del movimiento de los electrones en un campo electrico

Espectacular simulación realizada con OpenGL del movimiento de los electrones cuando atraviesan un campo eléctrico. Como muestra la image...