Bem-vindo ao Blog da DMarkInfo

Um espaço exclusivo para compartilhar conteúdos e novidades sobre Tecnologia da Informação. Aqui você encontra artigos, tutoriais e análises para se manter atualizado no mundo da TI.

Mapeamento de Emoções em Tempo Real com Python: Uma Análise Avançada

Postado por Eduardo Marques em 18/09/2025
Mapeamento de Emoções em Tempo Real com Python: Uma Análise Avançada

Neste guia, vamos criar um sistema de mapeamento de emoções em tempo real usando Python. O projeto é fascinante, prático e tem aplicações em áreas que vão do marketing à robótica.

1. A Teoria por Trás da Expressão

Antes de pular para o código, vamos entender o básico. A psicologia moderna, em grande parte influenciada pelo trabalho do Dr. Paul Ekman, sugere que existem seis emoções universais: alegria, tristeza, surpresa, medo, raiva e nojo.

O que nos interessa é como essas emoções se manifestam fisicamente. Elas são expressas por meio de movimentos sutis e complexos dos músculos faciais. O que o nosso sistema fará é justamente identificar esses movimentos a partir dos pontos de referência faciais (Landmarks) que discutimos no artigo anterior, e correlacioná-los com uma das seis emoções principais.

2. Ferramentas Essenciais para o Projeto

Para este projeto, vamos precisar de algumas bibliotecas e de um modelo de aprendizado de máquina pré-treinado.

OpenCV: Essencial para a captura de vídeo da webcam.

dlib: Perfeito para a detecção de faces e dos 28 pontos de referência faciais.

TensorFlow/Keras: Para carregar e utilizar nosso modelo de reconhecimento de emoções.

Modelo de Reconhecimento de Emoções (FER-2013): Este é o "cérebro" do nosso projeto. É um modelo pré-treinado 
em um vasto conjunto de dados de imagens faciais, rotuladas com as emoções correspondentes.

A boa notícia é que você não precisa treinar o modelo do zero! Vamos usar um modelo já existente, otimizado 
para o reconhecimento facial.

3. Mãos na Massa: O Código na Prática

O código abaixo é a espinha dorsal do nosso projeto. Ele é dividido em três etapas: configurar o ambiente, 
detectar a face e os pontos de referência, e finalmente, prever a emoção.

Passo 1: Instalação das Bibliotecas

Abra o seu terminal e execute os seguintes comandos:

pip install opencv-python dlib tensorflow keras

Passo 2: O Código Principal

Copie e cole o código abaixo em um arquivo Python (detect_emocoes.py). Certifique-se de ter o arquivo do modelo (modelo_fer2013.h5) e o arquivo de detecção de pontos de referência (shape_predictor_68_face_landmarks.dat) no mesmo diretório. Você pode encontrar esses arquivos em repositórios do GitHub dedicados a projetos de mapeamento de emoções.

import cv2
import dlib
from keras.models import load_model
from keras.preprocessing.image import img_to_array
import numpy as np

# Carregar o detector de faces e o preditor de landmarks do dlib
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

# Carregar o modelo de reconhecimento de emoções
model = load_model("modelo_fer2013.h5")

# Definir as emoções
emocoes = ['Raiva', 'Nojo', 'Medo', 'Alegria', 'Tristeza', 'Surpresa', 'Neutro']

# Iniciar a captura de vídeo
cap = cv2.VideoCapture(0)

while True:
   ret, frame = cap.read()
   if not ret:
       break

   gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
   faces = detector(gray)

   for face in faces:
       x, y, w, h = face.left(), face.top(), face.width(), face.height()
       cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

       # Extrair a região de interesse (ROI) da face
       roi = gray[y:y + h, x:x + w]
       roi = cv2.resize(roi, (48, 48), interpolation=cv2.INTER_AREA)
       roi = roi.astype("float") / 255.0
       roi = img_to_array(roi)
       roi = np.expand_dims(roi, axis=0)

       # Prever a emoção
       preds = model.predict(roi)[0]
       label = emocoes[preds.argmax()]
       
       # Exibir a emoção na tela
       cv2.putText(frame, label, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)

   cv2.imshow('Mapeamento de Emoções', frame)

   if cv2.waitKey(1) & 0xFF == ord('q'):
       break

cap.release()
cv2.destroyAllWindows()

 

4. Como Funciona o Código?

Captura de Imagem: Usando o OpenCV, capturamos os frames da sua webcam em tempo real.

Detecção Facial: Para cada frame, o dlib detecta a face.

Processamento da Imagem: A área da face é isolada, convertida para escala de cinza e redimensionada para 48x48 pixels. Esse é o formato que o nosso modelo de reconhecimento espera.

Previsão: A imagem processada é enviada para o modelo FER-2013. Ele retorna uma lista de probabilidades para cada uma das sete emoções. A emoção com a maior probabilidade é a que o sistema "acredita" que você está sentindo.

Exibição: O nome da emoção é exibido em tempo real em uma caixa delimitadora ao redor do seu rosto.

O Que Vem a Seguir?

Este projeto é um excelente ponto de partida. Você pode expandir o código para:

Detectar as emoções de múltiplas pessoas em um mesmo frame.

Salvar os dados de emoções para análises posteriores.

Criar um gráfico em tempo real para visualizar as mudanças de humor.

Se você gostou deste artigo, compartilhe com seus colegas e continue nos acompanhando para mais projetos práticos com Python! Qual outro projeto nessa área você gostaria de ver?

https://blog.dmarkinfo.com.br/sugestoes

Compartilhe este post:
Voltar para a Home