EmotionFace / app.py
Madras1's picture
Create app.py
1910a34 verified
import cv2
import numpy as np
import gradio as gr
from deepface import DeepFace
# Berta: Não precisamos mais instalar dependências manualmente aqui,
# isso vai num arquivo chamado requirements.txt no Space!
def detect_emotion(image):
"""
Função que recebe uma imagem da webcam (numpy array),
detecta emoções e devolve a imagem desenhada.
"""
if image is None:
return None
# O Gradio já entrega a imagem em RGB, o OpenCV usa BGR
# Mas o DeepFace aceita bem. Vamos converter para desenhar as caixas corretamente.
img_bgr = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
try:
# Detecção
results = DeepFace.analyze(img_bgr,
actions=['emotion'],
detector_backend='opencv', # Ou yolov8 se instalar
enforce_detection=False,
silent=True)
# Desenhar resultados (Simplificado para o exemplo)
for face in results:
region = face['region']
x, y, w, h = region['x'], region['y'], region['w'], region['h']
emotion = face['dominant_emotion']
score = face['emotion'][emotion]
# Desenha retângulo
cv2.rectangle(img_bgr, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.putText(img_bgr, f"{emotion} ({score:.1f}%)", (x, y-10),
cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
except Exception as e:
print(f"Erro: {e}")
pass
# Converte de volta para RGB para exibir no Gradio
return cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
# Interface Gráfica com Gradio
# Berta: Aqui está a mágica. O 'stream' ativa a webcam contínua.
iface = gr.Interface(
fn=detect_emotion,
inputs=gr.Image(sources=["webcam"], streaming=True),
outputs="image",
live=True,
title="Detector de Emoções do Gabrielzinho (Via Berta 🤖)",
description="Backend rodando DeepFace no Hugging Face Spaces."
)
iface.launch()