Mostrando entradas con la etiqueta QR. Mostrar todas las entradas
Mostrando entradas con la etiqueta QR. Mostrar todas las entradas

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



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...