Explicación del Código
1. Importación de Librerías
time: Librería estándar de Python que proporciona funciones para trabajar con
tiempo. Se usa aquí para hacer pausas en el procesamiento de fotogramas.
cv2 (OpenCV): Usada para la manipulación de imágenes y video. En este caso,
para capturar video desde la cámara y procesarlo fotograma por fotograma.
pandas: Aunque está importada, no se usa en el código. Podría ser para un
procesamiento de datos posterior que no se ha implementado en este fragmento.
asyncio: Permite trabajar con operaciones asincrónicas (como la comunicación
con la API de Hume sin bloquear el programa).
hume: Librería de Hume que se usa para enviar imágenes a su API para analizar
emociones en las personas mostradas en las imágenes.
2. Función process_frame
Propósito: Procesar cada fotograma del video y enviarlo a la API de Hume para
analizar las emociones de las personas en la imagen.
model_config: Configuración del modelo de Hume para detectar emociones
faciales.
stream_options: Define cómo se conectará al servicio de Hume.
cv2.imwrite: Guarda el fotograma actual como una imagen temporal.
socket.send_file(filename): Envía la imagen a la API de Hume para el análisis.
Impresión de resultados: Muestra las emociones detectadas en la consola.
3. Función process_video
Propósito: Captura video desde la cámara, muestra el video en tiempo real y
envía cada fotograma a la función process_frame para su análisis.
time.sleep(5): Pausa de 5 segundos antes de comenzar a capturar.
cap = cv2.VideoCapture(0): Accede a la cámara web del sistema.
cv2.imshow: Muestra el video en una ventana.
await process_frame: Llama a la función asincrónica para procesar cada
fotograma.
time.sleep(10): Pausa de x segundos entre cada fotograma procesado.
Contador de fotogramas: Asegura que solo se procesen 5 fotogramas.
cv2.waitKey(1): Permite salir de la captura de video presionando la tecla 'q'.
4. Función main y Ejecucion
Propósito: Inicializa el cliente de Hume con la clave API proporcionada y luego
comienza el proceso de captura de video.
Propósito: Inicia el ciclo de eventos asincrónicos, ejecutando la función main().
AsyncHumeClient: Cliente asincrónico que se conecta a la API de Hume usando
la clave API.
await process_video: Llama a la función process_video para empezar a capturar
y procesar los fotogramas.
RESPUESTA DE LA API POR CADA FOTOGRAMA ENVIADO:
payload_id='6a57ecd4-a359-4727-af4e-8e9a86c2a398' job_details=None burst=None
face=StreamModelPredictionsFace(predictions=[StreamModelPredictionsFacePredictionsI
tem(frame=0.0, time=None, bbox=StreamBoundingBox(x=274.9959716796875,
y=152.5815887451172, w=234.46572875976562, h=293.6021270751953),
prob=0.9995218515396118, face_id='unknown',
emotions=[EmotionEmbeddingItem(name='Admiration', score=0.1293908953666687),
EmotionEmbeddingItem(name='Adoration', score=0.13152764737606049),
EmotionEmbeddingItem(name='Aesthetic Appreciation', score=0.07251390814781189),
EmotionEmbeddingItem(name='Amusement', score=0.2791385054588318),
EmotionEmbeddingItem(name='Anger', score=0.05937659740447998),
EmotionEmbeddingItem(name='Anxiety', score=0.17475560307502747),
EmotionEmbeddingItem(name='Awe', score=0.1149793490767479),
EmotionEmbeddingItem(name='Awkwardness', score=0.21877868473529816),
EmotionEmbeddingItem(name='Boredom', score=0.3598477244377136),
EmotionEmbeddingItem(name='Calmness', score=0.3018871247768402),
EmotionEmbeddingItem(name='Concentration', score=0.2639833390712738),
EmotionEmbeddingItem(name='Contemplation', score=0.1530245989561081),
EmotionEmbeddingItem(name='Confusion', score=0.3401000499725342),
EmotionEmbeddingItem(name='Contempt', score=0.11954359710216522),
EmotionEmbeddingItem(name='Contentment', score=0.16591468453407288),
EmotionEmbeddingItem(name='Craving', score=0.05612417310476303),
EmotionEmbeddingItem(name='Determination', score=0.07726062834262848),
EmotionEmbeddingItem(name='Disappointment', score=0.25520965456962585),
EmotionEmbeddingItem(name='Disgust', score=0.09292662143707275),
EmotionEmbeddingItem(name='Distress', score=0.2462012618780136),
EmotionEmbeddingItem(name='Doubt', score=0.2339126020669937),
EmotionEmbeddingItem(name='Ecstasy', score=0.07417427003383636),
EmotionEmbeddingItem(name='Embarrassment', score=0.13069958984851837),
EmotionEmbeddingItem(name='Empathic Pain', score=0.10542809218168259),
EmotionEmbeddingItem(name='Entrancement', score=0.11573964357376099),
EmotionEmbeddingItem(name='Envy', score=0.03809939697384834),
EmotionEmbeddingItem(name='Excitement', score=0.15029527246952057),
EmotionEmbeddingItem(name='Fear', score=0.1348695158958435),
EmotionEmbeddingItem(name='Guilt', score=0.0831504613161087),
EmotionEmbeddingItem(name='Horror', score=0.07015413045883179),
EmotionEmbeddingItem(name='Interest', score=0.3013198673725128),
EmotionEmbeddingItem(name='Joy', score=0.247066468000412),
EmotionEmbeddingItem(name='Love', score=0.2031264454126358),
EmotionEmbeddingItem(name='Nostalgia', score=0.08011148869991302),
EmotionEmbeddingItem(name='Pain', score=0.1980431079864502),
EmotionEmbeddingItem(name='Pride', score=0.0710662454366684),
EmotionEmbeddingItem(name='Realization', score=0.15538948774337769),
EmotionEmbeddingItem(name='Relief', score=0.10416096448898315),
EmotionEmbeddingItem(name='Romance', score=0.07781804352998734),
EmotionEmbeddingItem(name='Sadness', score=0.26275941729545593),
EmotionEmbeddingItem(name='Satisfaction', score=0.19877640902996063),
EmotionEmbeddingItem(name='Desire', score=0.09061579406261444),
EmotionEmbeddingItem(name='Shame', score=0.08627019077539444),
EmotionEmbeddingItem(name='Surprise (negative)', score=0.07439003139734268),
EmotionEmbeddingItem(name='Surprise (positive)', score=0.062122177332639694),
EmotionEmbeddingItem(name='Sympathy', score=0.07257080078125),
EmotionEmbeddingItem(name='Tiredness', score=0.25429877638816833),
EmotionEmbeddingItem(name='Triumph', score=0.04926609992980957)], facs=None,
descriptions=None)]) facemesh=None language=None prosody=None