You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何记录导出模型识别的情绪,实现线上会议情绪分析与报表生成

实现情绪结果记录、统计与报表生成的方案

前置依赖导入

先在代码开头导入所需工具库:

import csv
from datetime import datetime
import matplotlib.pyplot as plt

步骤1:初始化统计存储变量

在while True循环启动前,新增变量用于存储检测数据和统计计数:

# 存储所有有效检测记录:[检测时间, 情绪标签, 置信度]
emotion_records = []
# 按情绪标签初始化计数字典,和你现有emotions配置项适配
emotion_count = {emo['emotion']: 0 for emo in emotions}

步骤2:检测环节实时写入数据

找到代码中if (emotion_probability > 0.36):的分支,在获取到情绪标签后新增记录逻辑:

if (emotion_probability > 0.36):
    emotion_label_arg = np.argmax(emotion_prediction)
    # 新增:获取当前情绪,写入记录和计数
    current_emotion = emotions[emotion_label_arg]['emotion']
    emotion_records.append([
        datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
        current_emotion,
        round(float(emotion_probability), 4)
    ])
    emotion_count[current_emotion] += 1
    # 原有画图逻辑保持不变
    color = emotions[emotion_label_arg]['color']
    cv2.rectangle(frame, (x, y), (x + w, y + h), color, 2)
    # 后续原有代码省略...

步骤3:会后统计与报表导出

在循环结束后、cap.release()之前,新增统计和导出逻辑:

# 1. 导出原始检测明细到CSV文件,可直接用Excel打开查看
csv_filename = f"会议情绪记录_{datetime.now().strftime('%Y%m%d%H%M')}.csv"
with open(csv_filename, 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(['检测时间', '情绪标签', '置信度'])
    writer.writerows(emotion_records)

# 2. 统计情绪占比,计算主导情绪
total_valid_count = sum(emotion_count.values())
emotion_ratio = {}
for emo, cnt in emotion_count.items():
    emotion_ratio[emo] = round(cnt / total_valid_count * 100, 2) if total_valid_count > 0 else 0
dominant_emotion = max(emotion_ratio, key=emotion_ratio.get)

# 3. 生成可视化饼图报表
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文显示乱码问题
plt.figure(figsize=(10, 6))
plt.pie(
    emotion_ratio.values(), 
    labels=emotion_ratio.keys(), 
    autopct='%1.1f%%', 
    colors=[emo['color'] for emo in emotions]
)
plt.title(f'会议情绪占比统计 | 主导情绪:{dominant_emotion}({emotion_ratio[dominant_emotion]}%)')
pic_filename = f"会议情绪统计报表_{datetime.now().strftime('%Y%m%d%H%M')}.png"
plt.savefig(pic_filename)
plt.close()

# 可选:控制台打印统计结果
print("=== 会议情绪统计结果 ===")
print(f"有效检测次数:{total_valid_count}")
print(f"主导情绪:{dominant_emotion},占比:{emotion_ratio[dominant_emotion]}%")
print("各情绪占比:", emotion_ratio)

补充说明

  • 若会议有多个参会人,可以额外增加人脸匹配逻辑给每个检测到的人脸加唯一ID,就能分别统计每个人的情绪数据
  • 现有0.36的置信度阈值可以根据实际场景调整,过滤低置信度的检测结果可以提升统计准确性
  • 如果需要更复杂的网页版报表,可以把统计数据和生成的饼图嵌入HTML模板后导出为html文件

内容的提问来源于stack exchange,提问作者Thiago Rocha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:45:03