# 🎭 情绪日历应用(python AI项目)

📖 项目简介

这是一个基于人脸情绪识别的智能日历应用,能够:

  • 📅 记录你每天的情绪状态
  • 😊 自动识别照片中的情绪
  • 💬 提供情绪陪伴聊天
  • 📊 统计月度情绪变化

🏗️ 代码结构详解

1. 导入模块部分 - 程序的"工具箱"

import random  # 随机选择
import glob    # 文件搜索
import os      # 操作系统功能
import cv2     # 图像处理(OpenCV)
import numpy as np  # 数学计算
import streamlit as st  # 网页界面
import warnings  # 警告处理
from fer import FER  # 情绪识别
from collections import Counter  # 数据统计
from zhipuai import ZhipuAI  # AI聊天
import hashlib  # 密码加密
import json     # 数据存储

通俗理解:就像做菜需要各种厨具一样,写程序也需要各种工具库。

2. 基础设置部分

# 隐藏警告信息
warnings.filterwarnings("ignore")

# 创建必要的文件夹
input_dir = "./tupian"    # 图片文件夹
gif_dir = "./gifs"        # 表情包文件夹  
data_dir = "./userdata"   # 用户数据文件夹
os.makedirs(data_dir, exist_ok=True)  # 如果文件夹不存在就创建

3. 核心功能初始化

# 情绪识别器(FER = Facial Emotion Recognition)
detector = FER(mtcnn=False)  # 使用简单的人脸检测

# AI聊天客户端
client = ZhipuAI(api_key="你的API密钥")  # 连接智能AI
chat_model_id = "glm-4"  # 使用GLM-4模型

4. 情绪表情字典 - 程序的"表情包库"

emotion_emojis = {
    "happy": "😊",     # 开心 → 😊
    "sad": "😢",       # 伤心 → 😢
    "angry": "😠",     # 生气 → 😠
    "surprise": "😲",  # 惊讶 → 😲
    "neutral": "😐",   # 平静 → 😐
    "fear": "😨",      # 恐惧 → 😨
    "disgust": "🤢",   # 厌恶 → 🤢
    "unknown": "❓"    # 未知 → ❓
}

5. 用户管理系统 🔐

密码加密

def hash_password(password: str) -> str:
    return hashlib.sha256(password.encode("utf-8")).hexdigest()

工作原理:把密码变成一串乱码,即使数据库被盗,黑客也看不懂原始密码。

用户注册

def register_user(username: str, password: str):
    # 1. 读取现有用户数据
    # 2. 检查用户名是否已存在
    # 3. 加密密码并保存
    # 4. 返回注册结果

用户登录

def login_user(username: str, password: str):
    # 1. 检查用户是否存在
    # 2. 验证密码是否正确
    # 3. 返回登录结果

6. 数据存储系统 💾

用户文件结构

userdata/
├── 用户名1/
│   ├── calendar.json     # 情绪日历数据
│   ├── chat_history.json # 聊天记录
│   └── images/           # 用户照片
│       ├── 1.png
│       ├── 2.png
│       └── ...
├── 用户名2/
└── users.json           # 所有用户账户信息

7. Streamlit界面 🎨

页面配置

st.set_page_config(page_title="情绪日历", layout="wide")
st.title("🤖 情绪日历")

登录/注册标签页

if not st.session_state.logged_in:
    tab1, tab2 = st.tabs(["登录", "注册"])
    # 显示登录和注册界面

st.session_state:就像程序的"记忆",记住用户是否登录、用户名等信息。

8. 情绪日历标签页 📅

日历显示

# 创建HTML表格来显示日历
calendar_html = """
<style>表格样式</style>
<table>...</table>
"""
st.markdown(calendar_html, unsafe_allow_html=True)

图片上传和拍照

upload_tab, camera_tab = st.tabs(["📁 上传图片", "📸 拍照"])
with upload_tab:
    uploaded_file = st.file_uploader("选择照片")
with camera_tab:
    camera_image = st.camera_input("拍照")

9. 情绪识别核心 🧠

# 转换图片格式(BGR → RGB)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 检测情绪
result = detector.detect_emotions(img_rgb)

# 提取最主要的情绪
if result:
    emotion = max(result[0]["emotions"], key=result[0]["emotions"].get)

FER工作原理

  1. 检测图片中的人脸
  2. 分析面部特征(眼睛、嘴巴、眉毛等)
  3. 计算各种情绪的概率
  4. 选择概率最高的情绪

10. AI聊天系统 💬

系统提示词

system_prompt = "你是一个活泼的机器人,叫 Moodi。你会关注主人情绪..."

聊天流程

# 用户输入
user_input = st.chat_input("说点什么吧")

# 发送给AI并获取回复
response = client.chat.completions.create(
    model=chat_model_id,
    messages=st.session_state.chat_history,
    stream=False
)

# 显示回复
reply = response.choices[0].message.content

🚀 使用流程详解

第一步:注册登录

  1. 输入用户名和密码
  2. 系统创建个人数据文件夹
  3. 初始化情绪日历

第二步:记录情绪

  1. 选择日期(1-31号)
  2. 上传照片或直接拍照
  3. 系统自动识别情绪并更新日历

第三步:查看统计

  • 日历显示每天的情绪表情
  • 统计本月最常见情绪
  • 显示对应的GIF表情包

第四步:情绪聊天

  • 与AI机器人Moodi聊天
  • AI会根据你的情绪状态提供关怀
  • 聊天记录自动保存

🔧 技术亮点

1. 人脸情绪识别

  • 使用FER库分析面部表情
  • 支持7种基本情绪识别
  • 实时处理用户上传的图片

2. 数据持久化

  • JSON格式存储用户数据
  • 图片本地保存
  • 聊天记录永久存储

3. 用户隔离

  • 每个用户有独立的数据空间
  • 密码加密存储
  • 数据互不干扰

4. 响应式界面

  • 基于Streamlit的Web应用
  • 支持图片上传和实时拍照
  • 移动端友好

💡 学习价值

这个项目涵盖了:

  • Python基础:变量、函数、循环、条件判断
  • 面向对象:类的使用和模块化
  • 文件操作:读写JSON、图片处理
  • Web开发:Streamlit框架使用
  • AI集成:人脸识别、智能对话
  • 数据安全:密码加密、用户验证
  • 项目管理:代码组织、文件结构

🎯 适合人群

  • 编程初学者:学习完整的项目开发流程
  • AI爱好者:了解人工智能的实际应用
  • 心理学爱好者:探索情绪追踪和分析
  • 产品经理:学习用户需求到技术实现的转化

这个项目就像是一个"情绪日记本",用技术的方式帮助人们更好地了解和管理自己的情绪状态! 😊

posted @ 2025-10-27 16:48  kkman2000  阅读(4)  评论(0)    收藏  举报