跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
PythonAI算法

基于 DeepFace 与 OpenCV 的实时情绪分析实战

基于 DeepFace 与 OpenCV 构建实时情绪分析系统。通过摄像头捕捉视频流,利用深度学习模型识别面部主导情绪及置信度,并在画面上叠加标注结果。项目包含 FPS 性能监控、异常捕获处理及平滑帧率显示。适用于交互娱乐、用户研究等需要感知情感反馈的场景,为情感计算应用提供基础框架。

极光发布于 2026/3/16更新于 2026/4/253 浏览
基于 DeepFace 与 OpenCV 的实时情绪分析实战

基于 DeepFace 与 OpenCV 的实时情绪分析实战

利用深度学习库 DeepFace 结合 OpenCV,我们可以快速构建一个实时情绪识别系统。这个项目不仅能捕捉摄像头画面,还能在每一帧上标注出人脸的情绪状态和置信度,同时监控运行帧率(FPS)。

环境准备

主要依赖两个核心库:

  • OpenCV (cv2):负责视频流捕获、图像处理及绘图。
  • DeepFace:封装了多种面部分析模型,这里专门用于情绪识别。

此外还需要 time 和 numpy 辅助计算帧率和处理数据。

核心逻辑梳理

整个流程其实很直观:打开摄像头 -> 读取帧 -> 计算 FPS -> 调用模型分析 -> 绘制结果 -> 显示窗口。

1. 初始化与循环

首先打开默认摄像头,并设置好 FPS 计算的变量。这里用了一个滑动平均算法来平滑 FPS 数值,避免数字跳动太剧烈影响观察。

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  # 滑动平均权重

2. 主循环处理

进入 while True 后,每读一帧就做一次完整的工作流。

帧率计算

通过记录当前时间和上一帧时间的差值,算出瞬时 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
情绪分析与绘图

这是最关键的一步。调用 DeepFace.analyze() 时,指定只分析情绪 (actions=['emotion']),并关闭强制检测 (enforce_detection=False) 以防无人脸时报错。拿到结果后,遍历每个人脸区域,画出矩形框并在上方标注情绪名称和百分比。

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 画在左上角,展示图像。监听键盘输入,按 q 键即可安全退出并释放资源。

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()

完整代码

将上述片段整合,就是一个可直接运行的脚本:

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

    # 进行表情识别
    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()

效果预期

程序运行后,窗口会实时显示摄像头画面。当检测到人脸时,绿色方框会框住面部,上方标注如 "happy (85.42%)" 等字样。不同情绪下会有不同的识别结果:

文章配图 自然状态

文章配图 开心

文章配图 伤心

文章配图 恐惧

文章配图 惊讶

总结

这个案例展示了如何组合现有 AI 库快速构建实用应用。核心在于利用 OpenCV 处理视频流,配合 DeepFace 完成推理,最终在画面上直观反馈结果。这不仅是一个情绪识别 Demo,也为后续开发更复杂的交互系统提供了基础框架。

目录

  1. 基于 DeepFace 与 OpenCV 的实时情绪分析实战
  2. 环境准备
  3. 核心逻辑梳理
  4. 1. 初始化与循环
  5. 2. 主循环处理
  6. 帧率计算
  7. 情绪分析与绘图
  8. 显示与退出
  9. 完整代码
  10. 打开摄像头
  11. FPS 计算参数
  12. 效果预期
  13. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • C++ 开发者转 Python:完整学习与实战指南
  • DeepSeek 系列模型版本演进与优缺点深度解析
  • 大模型 AI 产品经理学习路线:从零基础到精通
  • 抖音 WEB 端逆向实战:解析与生成 a_bogus 参数
  • 小米 Miloco 大模型智能家居本地化部署实战
  • C++ 多态详解:虚函数重写、虚表指针与动态绑定原理
  • 深入 llama.cpp:llama-server 从命令行到 HTTP Server
  • MidJourney AI 艺术创作详细教程
  • Flutter 框架现状分析与 Dart 语言核心学习指南
  • 深度学习激活函数完全指南:Sigmoid、Tanh、ReLU 及现代变体
  • Python 文件操作:Markdown 格式处理
  • 10 个大型语言模型 (LLM) 核心面试题与解析
  • OpenTiny NEXT 前端智能化系列直播征文:AI 前端与 WebAgent 实践指南
  • 5 大 WebAssembly 编译工具性能深度评测
  • 开源电路板查看器 OpenBoardView:.brd 文件解析工具
  • 双指针算法:快乐数与盛水最多的容器
  • Qwen-Image-Edit-2511 与 Stable Diffusion 图像编辑能力对比
  • Neo4j 图数据库安装与 CQL 语句入门
  • Python 爬虫实战:批量获取股票实时行情数据
  • 基于魔搭社区免费 GPU 使用 LLaMaFactory 微调大模型

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online