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
Sitio de descarga
- Además hay que descargar desde aqui:
https://github.com/tesseract-ocr/tessdata_fast
- Además hay que descargar desde aqui:
https://github.com/tesseract-ocr/tessdata_fast
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
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
https://www.youtube.com/@OMES-va
No hay comentarios:
Publicar un comentario