基于 DeepFace 与 OpenCV 的实时情绪分析器
本项目利用 OpenCV 捕获视频流,结合 DeepFace 深度学习库进行面部情绪识别。通过计算滑动平均 FPS 保证运行流畅度,并在画面上实时标注人脸区域及主导情绪置信度。
应用场景
情绪识别技术在多个领域具有实用价值:
- 心理健康评估:辅助医生监控患者情绪变化。
- 用户体验研究:观察用户在使用产品时的情绪反应。
- 互动娱乐:根据玩家情绪动态调整游戏难度。
- 安全监控:早期发现异常行为或潜在威胁。
- 智能助手:让设备感知用户状态并提供个性化服务。
技术栈
硬件需求
- 摄像头:用于捕捉实时视频流(内置或 USB 均可)。
软件依赖
- OpenCV (
cv2):负责视频流捕获、图像绘制及窗口显示。 - DeepFace:深度学习库,专注于面部属性(如年龄、性别、情绪)预测。
- Time & Numpy:基础工具库,用于时间戳计算及数值处理。
核心逻辑
程序的核心流程是循环读取摄像头帧,对每一帧进行人脸检测与情绪分析,最后将结果叠加在画面上。
- 初始化:打开默认摄像头,设置 FPS 平滑参数。
- 主循环:持续读取帧数据,若读取失败则退出。
- 性能优化:计算瞬时 FPS 并通过滑动平均算法平滑数值,避免画面跳动。
- 情绪分析:调用
DeepFace.analyze()接口,指定仅分析情绪,并处理可能的人脸未检测到异常。 - 可视化:在检测到的人脸周围绘制矩形框,上方显示情绪名称及置信度百分比。
- 交互控制:监听键盘输入,按下
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
delta_time > :
instant_fps = / delta_time
fps = alpha * fps + ( - alpha) * instant_fps
:
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()













