基于 DeepFace 与 OpenCV 的实时情绪分析实战
利用深度学习库 DeepFace 结合 OpenCV,我们可以快速构建一个实时情绪识别系统。这个项目不仅能捕捉摄像头画面,还能在每一帧上标注出人脸的情绪状态和置信度,同时监控运行帧率(FPS)。
环境准备
主要依赖两个核心库:
- OpenCV (
cv2):负责视频流捕获、图像处理及绘图。 - DeepFace:封装了多种面部分析模型,这里专门用于情绪识别。
此外还需要 time 和 numpy 辅助计算帧率和处理数据。
核心逻辑梳理
整个流程其实很直观:打开摄像头 -> 读取帧 -> 计算 FPS -> 调用模型分析 -> 绘制结果 -> 显示窗口。
1. 初始化与循环
首先打开默认摄像头,并设置好 FPS 计算的变量。这里用了一个滑动平均算法来平滑 FPS 数值,避免数字跳动太剧烈影响观察。
import cv2
import time
import numpy as np
from deepface import DeepFace
cap = cv2.VideoCapture(0)
prev_time = time.time()
fps = 0
alpha = 0.9 # 滑动平均权重
2. 主循环处理
进入 while True 后,每读一帧就做一次完整的工作流。
帧率计算
通过记录当前时间和上一帧时间的差值,算出瞬时 FPS,再结合历史数据做加权平均。
current_time = time.time()
delta_time = current_time - prev_time
prev_time = current_time
if delta_time > 0:
instant_fps = 1.0 / delta_time
fps = alpha * fps + (1 - alpha) * instant_fps
情绪分析与绘图
这是最关键的一步。调用 DeepFace.analyze() 时,指定只分析情绪 (actions=['emotion']),并关闭强制检测 (enforce_detection=False) 以防无人脸时报错。拿到结果后,遍历每个人脸区域,画出矩形框并在上方标注情绪名称和百分比。
try:
result = DeepFace.analyze(frame, actions=['emotion'], enforce_detection=False)
for face in result:
x, y, w, h = face['region'][], face[][], face[][], face[][]
emotion = face[]
confidence = face[][emotion]
cv2.rectangle(frame, (x, y), (x + w, y + h), (, , ), )
text =
cv2.putText(frame, text, (x, y - ), cv2.FONT_HERSHEY_SIMPLEX, , (, , ), )
Exception e:
(, e)


自然状态
开心
伤心
恐惧
惊讶