项目背景
利用深度学习技术进行实时情绪识别,在心理健康评估、用户体验研究、互动娱乐及安全监控等领域具有广泛的应用潜力。本项目通过结合 OpenCV 的视频流处理能力与 DeepFace 的深度学习模型,实现从摄像头捕捉画面到实时标注情绪及置信度的完整流程。
环境准备
硬件需求
- 摄像头:电脑内置或外接 USB 摄像头,用于实时视频流采集。
软件依赖
- OpenCV (
cv2):负责图像捕获、处理及绘图(如绘制矩形框和文字)。 - DeepFace:专注于面部属性预测的深度学习库,本例中用于情绪分析。
- Python 标准库:
time用于计算帧率,numpy虽未直接调用但常作为底层支持。
核心逻辑拆解
代码的核心在于循环读取视频帧,对每一帧进行情绪检测,并同步计算 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 # 滑动平均权重,数值越大,FPS 越平稳
主循环与 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() 方法,指定只执行情绪分析。遍历返回的结果,提取人脸区域坐标、主导情绪及对应置信度。随后使用 OpenCV 的绘图函数将信息标注在画面上。
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)







