DeepFace + OpenCV 实时情绪识别实战
利用深度学习库 DeepFace 结合 OpenCV,我们可以快速构建一个实时的人脸情绪分析系统。这个项目不仅能捕捉视频流,还能在每一帧上标注出检测到的人脸情绪及置信度,同时监控运行帧率(FPS)。
环境准备
实现这个功能主要依赖以下组件:
- 硬件:普通的电脑摄像头即可。
- 软件库:
opencv-python(cv2):负责视频流捕获、图像处理及绘图。deepface:核心深度学习库,专门用于面部属性分析(年龄、性别、情绪等)。numpy&time:辅助进行数值计算和时间戳管理。
核心逻辑梳理
整个流程并不复杂,关键在于如何高效地处理每一帧图像。
- 初始化:打开默认摄像头,设置 FPS 计算的平滑参数。
- 主循环:持续读取视频帧。如果读取失败则退出。
- 性能监控:通过记录时间差计算瞬时 FPS,并使用滑动平均算法让显示更稳定。
- 情绪分析:调用
DeepFace.analyze()对当前帧进行分析。这里设置了enforce_detection=False,防止因未检测到人脸而直接报错中断程序。 - 结果绘制:遍历分析结果,在画面上画出人脸矩形框,并在上方标注情绪名称和置信度百分比。
- 交互退出:监听键盘输入,按下
q键即可安全关闭窗口并释放资源。
完整代码实现
下面是整合后的完整脚本。你可以直接运行它来测试效果。注意观察代码中关于异常处理和绘图的部分,这些都是实际工程中容易踩坑的地方。
import cv2
import time
import numpy as np
from deepface import DeepFace
# 打开默认摄像头
try:
cap = cv2.VideoCapture(0)
except Exception as e:
print(f"无法打开摄像头:{e}")
exit()
# FPS 计算参数
prev_time = time.time()
fps = 0
alpha = 0.9 # 滑动平均权重,越大越平稳
while True:
ret, frame = cap.read()
if not ret:
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:
cv2.putText(frame, , (, ), cv2.FONT_HERSHEY_SIMPLEX, , (, , ), )
cv2.imshow(, frame)
cv2.waitKey() & == ():
cap.release()
cv2.destroyAllWindows()







