es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error al intentar utilizar pytesseract

Estoy tratando de usar pytesseract para resolver este captcha pero aún no obtengo ningún resultado.

Aquí tienes el código que utilizo:

import pytesseract
from PIL import Image

path = 'Captcha.jpg'
img = Image.open(path)
thresh = 200
fn = lambda x: 0 if x > thresh else 255
r = img.convert('L').point(fn, mode='1')
r.save('temp.jpg')
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
text = pytesseract.image_to_string(r)
print(text)

No imprime nada.

No estoy seguro de cómo funciona el algoritmo image_to_string, pero creo que el problema podría estar en los ángulos de los dígitos y esas líneas en el fondo. ¿Es cierto? Si es cierto, ¿hay algún método que pueda utilizar?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución para el funcionamiento incorrecto de pytesseract en una imagen de Captcha
    El problema con pytesseract que no funciona en la imagen de Captcha dada puede deberse a los dígitos inclinados y las líneas en el fondo. Para resolver este problema, podemos usar OpenCV (Biblioteca de Visión Computacional de Código Abierto) para preprocesar la imagen y facilitar el reconocimiento de los caracteres por parte de pytesseract.

    Aquí tienes un código actualizado que utiliza OpenCV y pytesseract para resolver la imagen de Captcha:

    import cv2
    import pytesseract
    
    # Cargar la imagen usando OpenCV
    img = cv2.imread('Captcha.jpg')
    
    # Convertir la imagen a escala de grises
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    # Aplicar el umbral para preprocesar la imagen
    thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)[1]
    
    # Aplicar dilatación para facilitar el reconocimiento de los caracteres
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
    dilate = cv2.dilate(thresh, kernel, iterations=1)
    
    # Guardar la imagen preprocesada
    cv2.imwrite('preprocessed.jpg', dilate)
    
    # Establecer la ruta al ejecutable de tesseract
    pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
    
    # Aplicar pytesseract para reconocer los caracteres en la imagen preprocesada
    text = pytesseract.image_to_string(dilate, config='--psm 6')
    print(text)
    

    El código anterior preprocesa la imagen convirtiéndola a escala de grises, aplicando umbral y luego dilatación para facilitar el reconocimiento de los caracteres. Luego guarda la imagen preprocesada y aplica pytesseract para reconocer los caracteres en la imagen preprocesada.

    La bandera config='--psm 6' se utiliza para especificar el modo de segmentación de página para pytesseract. En este caso, utilizamos el modo 6 que asume un único bloque uniforme de texto alineado verticalmente.

    Con este código, deberíamos poder reconocer con éxito los caracteres en la imagen de Captcha.

Comments are closed.