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

news/2025/10/27 16:50:54/文章来源:https://www.cnblogs.com/kkman2000/p/19169560

📖 项目简介

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

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

🏗️ 代码结构详解

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爱好者:了解人工智能的实际应用
  • 心理学爱好者:探索情绪追踪和分析
  • 产品经理:学习用户需求到技术实现的转化

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/947886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读《程序员修炼之道:从小工到专家》

读《程序员修炼之道》,仍被书中 “务实的程序员” 理念戳中。它没教复杂算法,却把成长拆成可落地的日常:像 “ DRY 原则” 让我改掉重复写工具类的习惯,“不要重复发明轮子” 提醒我先调研再动手,而 “持续学习”…

本地运行nginx服务,模拟线上环境访问项目

一、了解nginx Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。 Nginx也是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行…

git提交远程项目步骤

git提交远程项目步骤一个比较复杂的情况 远程已经有了代码的前提下,我复制一份到本地修改,然后再提交到原仓库 分两种情况,一种是想全部覆盖远程的代码,另一种是只是在原代码基础上做了一些修改,只需要提交一下p…

基于Redis海量数据场景分布式ID生成实践

概述 在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决…

电梯调度算法结对编程作业

1、项目仓库地址:https://z.gitee.cn/zgca/repos/zgca/elevator_arrange/sources 2、项目简介 3、PSP表格 4、接口设计介绍 5、模块接口的设计与实现过程 6、结对编程过程中的问题总结 7、界面模块的详细设计过程 8、…

【完结22章】从0到1,LangChain+RAG全链路实战AI知识库

【完结22章】从0到1,LangChain+RAG全链路实战AI知识库 学习地址:……/s/1hIjOa9HEwE-81qiVg6TUyA 提取码:qe8c 在信息爆炸的时代,企业积累的文档、报告、代码和各类数据资产正以前所未有的速度增长。传统的知识管理…

分享精选文章合集 - 2025-10-27

分享精选文章合集 - 2025-10-27汇总2025-10-27的精品精选求职与招聘文章。大家好,我是jobleap.cn的小九。 今日热门信息 - jobleap4u.com 内容概览:共 100 篇内容(按发布时间倒序排列,数据源自提供的ArticleCollec…

20232416 2025-2026-1 《网络与系统攻防技术》实验三实验报告

20232416 2025-2026-1 《网络与系统攻防技术》实验三实验报告 1.实验内容 (1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧正确使用msf编码器,使用msfvenom生成jar、php等文件 veil,加壳…

2025 年搅拌器搅拌设备,侧入式搅拌设备,斜插式揽拌设备,卧式搅拌设备厂家最新推荐,聚焦资质、案例、售后的五家企业深度解读

引言 随着工业领域对搅拌设备精细化、高效化需求的不断提升,搅拌器、侧入式、斜插式、卧式等各类搅拌设备的市场关注度持续攀升。为帮助企业精准筛选优质设备厂家,通用机械工业协会搅拌设备分会联合第三方检测机构,…

芯片实现路线图

在集成电路(IC)设计中,“物理实现”是将抽象的逻辑设计落地为可生产布局(Layout)的关键阶段,其中包含floor-planning(布局规划)、placement(布局布置)、routing(布线)与physical verification(物理验证)…

2025 年环保搅拌设备,搅拌装置设备,框式搅拌设备厂家最新推荐,实力品牌深度解析采购无忧之选!

引言 随着环保理念在工业领域的深度渗透,环保搅拌设备、搅拌装置设备及框式搅拌设备的市场需求持续攀升,企业对设备的性能、可靠性及环保性要求愈发严格。为助力企业精准筛选优质厂家,通用机械工业协会搅拌设备分会…

2025 年顶入式搅拌设备,直叶搅拌设备,节能减排搅拌设备厂家最新推荐,技术实力与市场口碑深度解析

引言 在工业生产中,顶入式、直叶式及节能减排搅拌设备作为关键装备,其性能与品质直接影响企业生产效率与环保水平。为精准筛选优质厂家,通用机械工业协会搅拌设备分会于 2025 年初开展专项测评,采用 “技术指标 + …

10.27总结

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int score=sc.nextInt(); if(score<60)System.out.println("不及格"); …

BongoCat日志搜索程序:正则表达式与高级筛选

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

WPF 自定义控件库

一、使用场景开发自定义控件库时,向外部暴露可复用的样式、模板、画笔等资源。 多模块应用中,共享通用资源(如主题样式)。 需要避免资源键命名冲突的场景。二 ,程序 1.静态的后台代码 资源键// MyControlLibrary/R…

2025质量可靠的义乌刺绣工厂推荐榜

2025质量可靠的义乌刺绣工厂推荐下。在义乌及周边区域,刺绣工厂数量众多,而质量可靠是企业选择合作方的核心考量因素。 Top1:浦江县俊贤刺绣有限公司 推荐程度:★★★★★ 浦江县俊贤刺绣有限公司虽位于浦江,但与…

c# 使用 jwt

基于 oauth2.0 协议, 具体原理可以参考:https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.htmlpublic class JWTHelper{private const string salt = "123";//盐//获得jwt令牌public sta…

2025义乌做刺绣的厂家推荐榜单

2025义乌做刺绣的厂家推荐下。义乌及周边区域作为纺织服饰配套产业集聚地,刺绣加工领域企业数量众多,涵盖传统手绣、机械刺绣等不同类型,产品可适配服装、家居装饰、礼品等多个应用场景。 Top1:浦江县俊贤刺绣有限…

2025 年液压旋转接头,高温蒸汽旋转接头,通水旋转接头厂家最新推荐,精准检测与稳定性能深度解析

引言 液压、高温蒸汽及通水旋转接头作为工业流体传输的核心部件,其密封可靠性、工况适配性直接决定生产连续性与能源效率。据行业专项测评数据显示,优质接头可降低设备停机率 37%,减少流体损耗达 45%,而劣质产品导…

Linux基本命令篇 —— date命令

Linux基本命令篇 —— date命令Linux基本命令篇 —— date命令 https://blog.csdn.net/2302_80871796/article/details/148979465网站:http://shibowl.topgithub:https://github.com/hanbinjxnc博客园:https://www.…