Skip to content

AndyTue/-Detector-de-texto-en-im-genes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Detector de texto en imágenes 🖋️

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:

  1. 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
  2. Reconocimiento de texto en español con soporte para caracteres especiales
  3. 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:
  1. Carga de imagen
  2. Mejora de calidad mediante transformaciones
  3. Extracción de texto con filtrado por confianza
  4. 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>

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages