基于 DeepFace 与 OpenCV 的实时情绪分析系统
利用深度学习库 DeepFace 结合计算机视觉工具 OpenCV,我们可以快速构建一个能够实时捕捉视频流并分析人脸情绪的演示系统。这不仅展示了如何利用现有 AI 库快速搭建应用,也为进一步开发情感识别系统提供了基础框架。
环境准备
本方案对硬件要求极低,仅需一台配备摄像头的电脑即可运行。软件方面主要依赖 Python 生态中的几个核心库:
- OpenCV (
cv2):负责视频流的捕获、图像预处理及结果绘制。 - DeepFace:专注于面部识别及属性预测(如年龄、性别、情绪)的深度学习模型封装。
- time & numpy:用于时间计算和数值处理,其中
numpy虽未直接调用但为科学计算的基础。
核心实现逻辑
程序的核心在于主循环中每一帧的处理流程。我们首先初始化摄像头,随后进入无限循环读取视频帧。为了保证用户体验,我们需要在画面上显示当前的 FPS(每秒帧数),这里采用滑动平均算法来平滑瞬时帧率波动,避免数字跳动过于剧烈。
在情绪分析环节,我们调用 DeepFace.analyze() 函数,指定只执行情绪检测 (actions=['emotion'])。该函数会返回当前帧中检测到的人脸区域坐标、主导情绪及其置信度。如果未检测到人脸,通过 enforce_detection=False 参数避免程序崩溃,而是静默跳过。
最后,使用 OpenCV 的绘图接口将人脸框、情绪标签及置信度绘制在视频帧上,并通过 cv2.imshow 展示。监听键盘输入,按下 q 键即可安全退出并释放资源。
完整代码
import cv2
import time
import numpy as np
from deepface import DeepFace
# 打开默认摄像头
cap = cv2.VideoCapture(0)
# FPS 计算参数
prev_time = time.time()
fps = 0
alpha = 0.9 # 滑动平均权重,数值越大,FPS 越平稳
while True:
ret, frame = cap.read()
if not ret:
break
# 计算 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
try:
# 进行表情识别
result = DeepFace.analyze(frame, actions=[], enforce_detection=)
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)
cv2.waitKey() & == ():
cap.release()
cv2.destroyAllWindows()







