在计算机视觉领域,实时情绪分析是一个既有趣又实用的方向。这个项目结合了 OpenCV 的视频处理能力与 DeepFace 的深度学习模型,能够捕捉摄像头画面中的人脸并识别其情绪状态。
核心组件
实现这个功能主要依赖以下几部分:
- 硬件:普通的电脑摄像头或 USB 设备即可。
- 软件库:
OpenCV (cv2):负责视频流捕获、图像处理和界面绘制。DeepFace:基于深度学习的面部分析库,专门用于情绪、年龄等属性预测。time和numpy:辅助计算帧率和处理数据。
实现思路
程序的核心逻辑在于一个持续运行的循环。我们首先打开默认摄像头,然后不断读取每一帧图像。为了监控性能,引入了 FPS 计算模块,采用滑动平均算法来平滑帧率波动,避免数值跳动过大影响观察。
在每一帧的处理流程中,调用 DeepFace 接口进行情绪分析。返回的结果包含人脸区域坐标、主导情绪及置信度。解析这些数据后,使用 OpenCV 的绘图函数在画面上标记出人脸位置,并在上方显示具体的情绪标签和百分比。如果检测到异常(如未检测到人脸),则跳过当前帧并继续,保证程序不崩溃。
完整代码
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 # 滑动平均权重
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=['emotion'], enforce_detection=False)
for face in 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()



