应用场景
情绪识别技术在多个领域都有落地潜力。比如在心理健康评估中辅助医生诊断,或在产品设计时观察用户反应以优化体验。游戏和 VR 也能根据玩家情绪动态调整难度。此外,在安全监控、教育培训以及智能助手集成方面,感知用户状态都能带来更个性化的服务。对于驾驶场景,疲劳或情绪波动分析也是重要的安全因子。
核心组件
硬件上主要依赖一个摄像头来捕捉视频流,无论是笔记本内置还是外接 USB 均可。软件层面,我们使用 OpenCV (cv2) 处理图像和视频帧,配合 time 模块计算帧率。虽然代码里没显式用到 numpy,但它通常是图像处理的基础。核心逻辑在于 DeepFace 库,它封装了深度学习模型,专门负责面部属性(如年龄、性别、情绪)的预测。
实现思路详解
整个流程其实很直观:打开摄像头 -> 逐帧读取 -> 计算 FPS -> 调用 DeepFace 分析情绪 -> 绘制结果 -> 显示画面。
初始化环境
导入必要的库后,我们需要建立摄像头连接并设置一些变量。默认摄像头通常对应索引 0。为了平滑显示帧率,我们会引入滑动平均算法,设定一个权重系数 alpha。
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
主循环与 FPS 计算
程序进入无限循环不断读取帧。如果读取失败就退出。在每一帧处理前,我们先算一下当前帧率。通过记录上一帧的时间戳,计算时间差得到瞬时 FPS,再用滑动平均更新整体 FPS,这样数值不会跳动太厉害。
while True:
ret, frame = cap.read()
if not ret:
break
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']),并关闭强制检测以免无脸时报错。拿到结果后遍历每个人脸区域,提取坐标、主导情绪及置信度。接着用 OpenCV 的绘图函数在画面上框出人脸,并在上方标注情绪名称和百分比。同时,别忘了把当前的 FPS 也画上去,方便观察性能。
try:
result = DeepFace.analyze(frame, actions=['emotion'], enforce_detection=False)
face result:
x, y, w, h = face[][], 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)
cv2.putText(frame, , (, ), cv2.FONT_HERSHEY_SIMPLEX, , (, , ), )
cv2.imshow(, frame)







