基于 DeepFace 与 OpenCV 的实时情绪分析系统
利用计算机视觉技术实时捕捉并分析人脸情绪,是人工智能落地的典型场景之一。本方案结合 OpenCV 的视频流处理能力与 DeepFace 的深度学习模型,构建一个轻量级的实时情绪检测应用。
核心组件
硬件与环境
仅需一台配备摄像头的电脑即可运行,无需额外传感器。软件层面依赖 Python 生态中的几个关键库:
- OpenCV (
cv2):负责视频流的捕获、图像预处理及结果绘制。 - DeepFace:封装了多种预训练模型(如 VGG-Face, Google FaceNet 等),专注于面部属性分析,这里主要调用其情绪识别功能。
- Time & Numpy:辅助计算帧率及处理数组数据。
实现逻辑
程序的核心在于一个持续运行的循环,不断从摄像头读取帧,经过处理后展示结果。
视频流与 FPS 监控
为了评估性能,我们需要计算每秒帧数(FPS)。直接计算瞬时值波动较大,因此采用滑动平均法平滑数据。通过记录上一帧的时间戳,计算当前耗时,再结合权重系数更新当前的 FPS 显示值。这能让开发者直观感受到模型推理对流畅度的影响。
情绪识别流程
在每一帧中,我们调用 DeepFace.analyze() 接口。注意设置 enforce_detection=False,这样当画面中没有检测到人脸时,程序不会抛出异常中断,而是跳过该帧继续处理,保证体验连贯。
返回的结果包含人脸区域坐标、主导情绪及各项情绪的置信度。我们将这些信息绘制在原图上:绿色矩形框标记人脸位置,上方文字显示情绪名称和百分比。
交互控制
使用 OpenCV 的窗口监听机制,按下 q 键即可安全退出,释放摄像头资源。
完整代码
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 # 滑动平均权重
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()




