Este programa es un sistema de OCR (Reconocimiento Óptico de Caracteres) que procesa imágenes para extraer texto. Sus principales características son:
Funcionalidades principales:
- Preprocesamiento de imágenes con técnicas avanzadas:
- Escalado de resolución
- Eliminación de ruido
- Mejora de contraste (CLAHE)
- Umbralización adaptativa
- Operaciones morfológicas
- Reconocimiento de texto en español con soporte para caracteres especiales
- Interfaz gráfica para:
- Selección de imágenes
- Visualización de resultados
- Guardado de imágenes procesadas
Tecnologías utilizadas:
- OpenCV para procesamiento de imágenes
- Tesseract OCR con entrenamiento en español
- Tkinter para la interfaz gráfica
- Python 3 con bibliotecas numpy y PIL
Flujo de trabajo:
- Carga de imagen
- Mejora de calidad mediante transformaciones
- Extracción de texto con filtrado por confianza
- Presentación de resultados en interfaz amigable
🔍 Técnicas de Preprocesamiento
El preprocesamiento es esencial para facilitar la detección precisa del texto. Se aplican los siguientes pasos de mejora sobre cada imagen:
📏 1. Redimensionamiento (Escalado)
El primer paso es escalar la imagen para que el texto sea más legible por el motor OCR.
Se utiliza INTER_CUBIC para una mejor calidad en ampliaciones.
python
Copiar
Editar
imagen_escalada = cv2.resize(original_image,
(nueva_anchura, nueva_altura),
interpolation=cv2.INTER_CUBIC)
🌑 2. Conversión a Escala de Grises
Transformamos la imagen a escala de grises para eliminar el color, enfocándonos solo en la intensidad de los píxeles.
python
Copiar
Editar
gris = cv2.cvtColor(imagen_escalada, cv2.COLOR_BGR2GRAY)
Esto reduce el ruido y simplifica el procesamiento posterior.
🧹 3. Reducción de Ruido (Denoising)
Se aplica el algoritmo fastNlMeansDenoising para eliminar el ruido preservando los bordes.
python
Copiar
Editar
gris = cv2.fastNlMeansDenoising(gris, h=30)
Mejora la definición del texto eliminando irregularidades de fondo.
🌈 4. CLAHE - Ecualización Adaptativa del Histograma
El contraste de la imagen se mejora con CLAHE (Contrast Limited Adaptive Histogram Equalization).
python
Copiar
Editar
clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8, 8))
gris = clahe.apply(gris)
Este paso aumenta la visibilidad del texto sin sobreexponer.
🧾 5. Umbralización Adaptativa
Convierte la imagen a blanco y negro utilizando umbralización adaptativa con el método Gaussiano.
python
Copiar
Editar
umbral = cv2.adaptiveThreshold(gris, 255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY_INV,
31, 11)
Esto ayuda a separar el texto del fondo incluso en condiciones de iluminación desiguales.
🧱 Operaciones Morfológicas
Estas operaciones se usan para mejorar la estructura de los caracteres detectados.
🔓 Apertura (Eliminación de ruido pequeño)
Elimina pequeños puntos blancos o negros que no son parte del texto.
python
Copiar
Editar
kernel_open = np.ones((2, 2), np.uint8)
umbral = cv2.morphologyEx(umbral, cv2.MORPH_OPEN, kernel_open, iterations=1)
Reduce el “ruido sal y pimienta” conservando la estructura de las letras.
🔐 Cerradura (Rellenado de huecos)
Rellena pequeños huecos dentro de los caracteres para mejorar su definición.
python
Copiar
Editar
kernel_close = np.ones((3, 3), np.uint8)
processed_image = cv2.morphologyEx(umbral, cv2.MORPH_CLOSE, kernel_close, iterations=1)
Permite que las letras incompletas sean reconocidas correctamente por el OCR.
🔠 Uso del OCR
Se utiliza Tesseract OCR como motor de reconocimiento de texto.
📦 Configuración utilizada
python
Copiar
Editar
self.config_ocr = (
'–psm 6 --oem 1 ’
'-c tessedit_char_whitelist=“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzáéíóúÁÉÍÓÚüÜñÑ0123456789 .,;:¿?¡!-_()” ’
‘-c preserve_interword_spaces=1’
)
–psm 6: Supone un bloque uniforme de texto.
–oem 1: Usa el motor OCR LSTM.
Se define un conjunto de caracteres permitido (whitelist) y se conserva el espaciado entre palabras.
🧠 Ejecución del OCR
python
Copiar
Editar
texto_completo = pytesseract.image_to_string(pil_image, lang=‘spa’, config=self.config_ocr)
data = pytesseract.image_to_data(pil_image, lang=‘spa’, config=self.config_ocr, output_type=pytesseract.Output.DICT)
Se obtiene el texto completo junto con información detallada (posición, nivel de confianza, etc.) de cada palabra.
Se filtran únicamente las palabras con un nivel de confianza mayor a 30:
python
Copiar
Editar
recognized_words = []
for i in range(len(data[‘text’])):
word = data[‘text’][i].strip()
if word and data[‘conf’][i] > 30:
recognized_words.append(word)
OpenCV
NumPy
Pillow
pytesseract
Tesseract OCR instalado en C:\Program Files\Tesseract-OCR\tesseract.exe
📎 Créditos
Desarrollado por Andrés de Jesús Turriza Euan y Luis Javier Quintana Olivera/p>