
使用 DeepFace 和 OpenCV 实现情绪分析器
使用 DeepFace 深度学习库结合 OpenCV 构建实时情绪分析器。通过摄像头获取视频流,利用 DeepFace 模型识别面部表情(如开心、伤心、恐惧等),在画面上标注情绪类型及置信度,并计算显示 FPS。该方案适用于心理健康评估、用户体验研究、互动娱乐及安全监控等场景,展示了 AI 技术在情感交互领域的实际应用潜力。

使用 DeepFace 深度学习库结合 OpenCV 构建实时情绪分析器。通过摄像头获取视频流,利用 DeepFace 模型识别面部表情(如开心、伤心、恐惧等),在画面上标注情绪类型及置信度,并计算显示 FPS。该方案适用于心理健康评估、用户体验研究、互动娱乐及安全监控等场景,展示了 AI 技术在情感交互领域的实际应用潜力。







应用场景比较广泛,尤其是在需要了解和分析人类情感反应的场合:
总之,随着人工智能技术的发展,情绪识别作为一种重要的交互方式,在许多领域都有着巨大的潜力和广阔的应用前景。
cv2):一个开源的计算机视觉和机器学习软件库。它提供了大量的图像处理和计算机视觉算法,这里主要用于捕获摄像头视频流、处理图像以及在图像上绘制矩形框和文字。np):虽然在这段代码中没有直接使用,但它是进行科学计算的基础库,通常与 OpenCV 一起用于更复杂的图像处理任务。cv2.VideoCapture(0) 打开摄像头,并通过循环不断读取视频帧。time.time() 获取当前时间戳,通过计算连续两帧之间的时间差来计算瞬时 FPS,并采用滑动平均方法平滑 FPS 值。DeepFace.analyze() 函数对每一帧中的所有人脸进行情绪分析。分析结果包含每个人脸的位置、主导情绪及置信度。cv2.rectangle() 和 cv2.putText())在视频帧上标记出人脸位置、显示情绪信息及置信度,并展示当前的 FPS 值。cv2.waitKey(1)),允许用户按下 q 键退出程序。主要是通过摄像头捕捉实时视频流,然后使用深度学习模型对捕捉到的每一帧进行情绪分析,然后在视频上标记出检测到的情绪和置信度,并显示当前的 FPS(每秒帧数)。下面是对代码各个部分的详细解释:
import cv2
import time
import numpy as np
from deepface import DeepFace
cv2:OpenCV 库,用于处理图像和视频流。time:用于计算时间间隔,进而计算 FPS。numpy:虽然在这段代码中没有直接使用,但通常与 OpenCV 一起用于图像处理。DeepFace:一个基于深度学习的面部识别和分析库。cap = cv2.VideoCapture(0)
prev_time = time.time()
fps = 0
alpha = 0.9
cv2.VideoCapture(0):打开默认摄像头(0 代表第一个摄像头设备)。prev_time 和 fps:用于计算 FPS 的变量。prev_time 保存上一帧的时间戳,而 fps 保存当前帧率。alpha:用于滑动平均计算 FPS 的权重值。while True:
ret, frame = cap.read()
if not ret:
break
# ... 处理逻辑 ...
cap.release()
cv2.destroyAllWindows()
cap.read())。如果读取失败 (ret 为 False),则退出循环。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
delta_time),然后根据这个时间差计算瞬时 FPS (instant_fps)。fps)。result = DeepFace.analyze(frame, actions=['emotion'], enforce_detection=False)
# 遍历结果并绘制
for face in result:
x, y, w, h = face['region']['x'], face['region']['y'], face['region']['w'], face['region']['h']
emotion = face['dominant_emotion']
confidence = face['emotion'][emotion]
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
text = f'{emotion} ({confidence:.2f}%)'
cv2.putText(frame, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
DeepFace.analyze() 方法进行情绪分析。actions=['emotion'] 指定只执行情绪分析。cv2.rectangle) 和识别出的情绪信息 (cv2.putText)。cv2.putText(frame, f'FPS: {fps:.2f}', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 255), 2)
cv2.imshow("Emotion Detection", frame)
cv2.imshow() 显示带有标注的图像。if cv2.waitKey(1) & 0xFF == ord('q'):
break
q 键,则退出循环结束程序。最后,释放摄像头资源 (cap.release()) 并关闭所有窗口 (cv2.destroyAllWindows())。
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
if delta_time > 0:
instant_fps = 1.0 / delta_time
fps = alpha * fps + (1 - alpha) * instant_fps
# 计算滑动平均 FPS
try:
# 进行表情识别
result = DeepFace.analyze(frame, actions=['emotion'], enforce_detection=False)
for face in result:
x, y, w, h = face['region']['x'], face['region']['y'], face['region']['w'], face['region']['h']
emotion = face['dominant_emotion']
confidence = face['emotion'][emotion] # 获取表情的置信度
# 绘制人脸矩形框
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 在人脸上方显示情绪信息
text = f'{emotion} ({confidence:.2f}%)'
cv2.putText(frame, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
except Exception as e:
print("无法检测到人脸:", e)
# 显示 FPS(平滑更新)
cv2.putText(frame, f'FPS: {fps:.2f}', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 255), 2)
# 显示图像
cv2.imshow("Emotion Detection", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
核心在于结合了 OpenCV 进行视频处理和 DeepFace 进行面部情绪分析的能力。通过这些组件,实现从摄像头实时捕捉视频、分析视频中人物的情绪状态并在视频画面上直观地展示分析结果的功能。
这不仅展示了如何利用现有的 AI 库快速构建实用的应用程序,也为进一步开发基于情感识别的复杂系统提供了基础框架或者是组件。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online