import cv2 import gradio as gr def process_video(video): face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') estadoanterior = "" estadoactual = "" output_frames = [] cap = cv2.VideoCapture(video) while cap.isOpened(): ret, frame = cap.read() if frame is None: break gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) hh, ww = gray.shape faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x, y, w, h) in faces: cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2) cv2.line(frame, (int(ww / 2), 0), (int(ww / 2), hh), (0, 0, 255), 2) if x <= ww / 2: estadoactual = "I" if estadoactual != estadoanterior: estadoanterior = estadoactual else: estadoactual = "D" if estadoactual != estadoanterior: estadoanterior = estadoactual output_frames.append(frame) cap.release() return output_frames # Gradio Interface demo = gr.Interface( fn=process_video, inputs=gr.Video(label="Sube tu video"), outputs=gr.Video(label="Video procesado"), title="Detección de Rostros y Ojos", description="Este espacio detecta rostros y ojos en un video subido.", ) if __name__ == "__main__": demo.launch()