如何记录导出模型识别的情绪,实现线上会议情绪分析与报表生成
实现情绪结果记录、统计与报表生成的方案
前置依赖导入
先在代码开头导入所需工具库:
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
相关产品推荐
相关产品推荐

