import cv2
import pytesseract
from ultralytics import YOLO
import os
# Cargar el modelo entrenado para detectar cédulas
model = YOLO('src/train/best.pt')
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
os.environ['TESSDATA_PREFIX'] = r"C:\Program Files\Tesseract-OCR\\"
def extract_text(image):
    """
    Extrae texto de una imagen utilizando OCR.
    """
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # Aplicar umbral adaptativo para mejorar la detección de texto
    thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C,
                                   cv2.THRESH_BINARY, 11, 2)
    # Configurar parámetros de pytesseract para español
    custom_config = r'--oem 3 --psm 6 -l spa'
    text = pytesseract.image_to_string(thresh, config=custom_config)
    return text

def process_image(path):
    """
    Procesa una imagen para detectar y validar la cédula de identidad ecuatoriana.
    """
    image = cv2.imread(path)
    results = model(image)

    # Verificar si se detectó una cédula en la imagen
    if results[0].boxes:
        extracted_texts = []
        for box in results[0].boxes:
            # Extraer coordenadas de la caja detectada
            x1, y1, x2, y2 = map(int, box.xyxy[0])
            # Recortar la región de interés (ROI) de la cédula
            roi = image[y1:y2, x1:x2]
            # Extraer texto de la ROI
            text = extract_text(roi)
            extracted_texts.append(text)
        return {"message": "Cédula(s) detectada(s) y procesada(s).", "extracted_texts": extracted_texts}
    else:
        return {"message": "No se detectó una cédula en la imagen."}