<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Streamlit | Liu chen chen CV</title><link>https://liuchenlili.github.io/tags/streamlit/</link><atom:link href="https://liuchenlili.github.io/tags/streamlit/index.xml" rel="self" type="application/rss+xml"/><description>Streamlit</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Wed, 22 Oct 2025 00:00:00 +0000</lastBuildDate><image><url>https://liuchenlili.github.io/media/logo.svg</url><title>Streamlit</title><link>https://liuchenlili.github.io/tags/streamlit/</link></image><item><title>SLR</title><link>https://liuchenlili.github.io/projects/slr/</link><pubDate>Wed, 22 Oct 2025 00:00:00 +0000</pubDate><guid>https://liuchenlili.github.io/projects/slr/</guid><description>&lt;h1 id="智能手语教学平台"&gt;智能手语教学平台&lt;/h1&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;项目代号：SignLM&lt;br&gt;
版本：v2.0&lt;br&gt;
最后更新：2025-11-18&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;github地址：https://github.com/liuchenlili/SLR-AI&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bilibili演示视频demo:&lt;/strong&gt;:
&lt;div class="w-full h-auto aspect-video relative"&gt;
&lt;iframe src="//player.bilibili.com/player.html?bvid=BV1Kz4y1e7nP&amp;page=1&amp;autoplay=0"
allow="accelerometer; clipboard-write; encrypted-media; gyroscope; fullscreen; picture-in-picture;"
class="w-full h-full"
&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-项目愿景"&gt;1. 项目愿景&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;“让手语学习像说话一样自然，让听障交流像呼吸一样自由。”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="2-一句话说明"&gt;2. 一句话说明&lt;/h2&gt;
&lt;p&gt;用 AI 把“手语视频”实时变成“文字/语音”，再把“文字/语音”变成“手语教学”，形成一个可教、可练、可评的闭环学习平台。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="3-核心场景mvp"&gt;3. 核心场景（MVP）&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;场景&lt;/th&gt;
&lt;th&gt;用户故事&lt;/th&gt;
&lt;th&gt;完成标准&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;词汇学习&lt;/td&gt;
&lt;td&gt;小明打开网页，点击“你好”，看到手语示范视频，跟做后系统打分 ≥80 分。&lt;/td&gt;
&lt;td&gt;端到端跑通，延迟 &amp;lt;1.5 s。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;实时识别&lt;/td&gt;
&lt;td&gt;老师面对摄像头打一句手语，系统即时返回文字“同学们好”。&lt;/td&gt;
&lt;td&gt;Top-1 准确率 ≥90%，FPS ≥15。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI 问答&lt;/td&gt;
&lt;td&gt;小红问“手语中的‘是’和‘事’怎么区分？”扣子智能体给出动作差异 GIF。&lt;/td&gt;
&lt;td&gt;答案相关度 ≥4/5（人工评测）。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-技术全景图"&gt;4. 技术全景图&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TD
A[浏览器] --&gt;|WebRTC| B(前端 Vue3)&lt;--Axios/WebSocket--&gt;C[Spring Boot 网关]
C --&gt;|HTTP| D[FastAPI 推理集群]
D --&gt;|调用| E[SignFormer GPU 容器]
D --&gt;|调用| F[CNN-LSTM 容器]
C --&gt;|GraphQL| G[扣子智能体]
H[CSL-500 数据集] -.-&gt;|微调| E
H -.-&gt;|蒸馏| F
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="5-模型动物园"&gt;5. 模型动物园&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;模型&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;th&gt;输入&lt;/th&gt;
&lt;th&gt;输出&lt;/th&gt;
&lt;th&gt;指标&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SignFormer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;主力识别&lt;/td&gt;
&lt;td&gt;32 帧 224×224&lt;/td&gt;
&lt;td&gt;500 类 logits&lt;/td&gt;
&lt;td&gt;Top-1 94.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R(2+1)D&lt;/td&gt;
&lt;td&gt;轻量备选&lt;/td&gt;
&lt;td&gt;16 帧 112×112&lt;/td&gt;
&lt;td&gt;500 类 logits&lt;/td&gt;
&lt;td&gt;Top-1 89.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CNN-LSTM&lt;/td&gt;
&lt;td&gt;老设备兼容&lt;/td&gt;
&lt;td&gt;8 帧 64×64&lt;/td&gt;
&lt;td&gt;100 类 logits&lt;/td&gt;
&lt;td&gt;Top-1 82.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CLIP-Teacher&lt;/td&gt;
&lt;td&gt;语义监督&lt;/td&gt;
&lt;td&gt;被掩码帧&lt;/td&gt;
&lt;td&gt;512-D 向量&lt;/td&gt;
&lt;td&gt;CosSim 0.83&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="6-数据流水线"&gt;6. 数据流水线&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;原始视频 → OpenCV 抽帧 → MediaPipe 抠手/脸 → 对齐到 1280×720 → 增强（随机翻转、亮度、遮挡）→ 生成 two-stream tensor → 进入 SignFormer
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="7-关键创新点3-句话版本"&gt;7. 关键创新点（3 句话版本）&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;双流时空解耦&lt;/strong&gt;：空间流看“手型”，时间流看“轨迹”，交叉注意力融合，比 3D-CNN 节省 42% FLOPs。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;智能掩码&lt;/strong&gt;：只遮“手+脸”Tube，强迫模型关注关键语义区域，收敛快 1.7×。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;语义级重建&lt;/strong&gt;：不仅还原像素，还要对齐 CLIP 特征，让网络“理解”动作含义，zero-shot 连续句提升 6.8%。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="8-系统架构"&gt;8. 系统架构&lt;/h2&gt;
&lt;h3 id="81-前端vue3--ts"&gt;8.1 前端（Vue3 + TS）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;组件库：Ant Design Vue 4&lt;/li&gt;
&lt;li&gt;状态：Pinia 持久化到 IndexedDB&lt;/li&gt;
&lt;li&gt;实时识别：WebSocket 二进制流传输，前端 WASM 做帧级缓存，降低后端压力。&lt;/li&gt;
&lt;li&gt;可视化：ECharts 5 动态绘制混淆矩阵、训练曲线、网络拓扑图（支持点击查看参数量）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="82-后端spring-boot-3"&gt;8.2 后端（Spring Boot 3）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;多租户：学校/机构隔离（Schema-per-tenant）。&lt;/li&gt;
&lt;li&gt;微服务：用户、课程、成绩、模型网关四模块。&lt;/li&gt;
&lt;li&gt;鉴权：JWT + Redis 黑名单，支持单点踢出。&lt;/li&gt;
&lt;li&gt;文件存储：MinIO S3 协议，视频自动生命周期 30 天后转冷归档。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="83-推理服务fastapi"&gt;8.3 推理服务（FastAPI）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;镜像大小：nvidia/cuda:11.8-runtime，仅保留 onnxruntime-gpu，压缩到 1.2 GB。&lt;/li&gt;
&lt;li&gt;动态批处理：自适应 N=1~4，延迟 &amp;lt;800 ms@N=1，吞吐提升 2.3×@N=4。&lt;/li&gt;
&lt;li&gt;灰度发布：通过 Header &lt;code&gt;Model-Version=signformer-v1.2&lt;/code&gt; 一键切换。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="84-扣子智能体"&gt;8.4 扣子智能体&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Prompt 模板 1200 token，注入《中国手语词典》第三版 5600 词条。&lt;/li&gt;
&lt;li&gt;多轮记忆：Redis Stream 保存最近 5 轮对话，支持断网续问。&lt;/li&gt;
&lt;li&gt;卡片回复：返回 JSON 含 &lt;code&gt;gif_url&lt;/code&gt;、&lt;code&gt;动作要领&lt;/code&gt;、&lt;code&gt;易错点&lt;/code&gt;，前端自动渲染。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="9-性能基准csl-500-测试集"&gt;9. 性能基准（CSL-500 测试集）&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;模型&lt;/th&gt;
&lt;th&gt;Top-1&lt;/th&gt;
&lt;th&gt;Top-5&lt;/th&gt;
&lt;th&gt;延迟(P99)&lt;/th&gt;
&lt;th&gt;显存&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SignFormer&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;94.2%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;99.1%&lt;/td&gt;
&lt;td&gt;670 ms&lt;/td&gt;
&lt;td&gt;3.4 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R(2+1)D&lt;/td&gt;
&lt;td&gt;89.7%&lt;/td&gt;
&lt;td&gt;97.3%&lt;/td&gt;
&lt;td&gt;320 ms&lt;/td&gt;
&lt;td&gt;1.6 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CNN-LSTM&lt;/td&gt;
&lt;td&gt;82.4%&lt;/td&gt;
&lt;td&gt;94.5%&lt;/td&gt;
&lt;td&gt;120 ms&lt;/td&gt;
&lt;td&gt;0.9 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;目标：在 RTX 4060 笔记本端 SignFormer INT8 量化后延迟 &amp;lt;400 ms，精度下降 ≤1%。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="10-安全--伦理"&gt;10. 安全 &amp;amp; 伦理&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;数据脱敏：人脸模糊化开源脚本，默认勾选。&lt;/li&gt;
&lt;li&gt;未成年人模式：13 岁以下禁用上传真人视频，仅用官方素材。&lt;/li&gt;
&lt;li&gt;偏差审查：每季度抽检 500 条预测结果，若性别/地域偏差&amp;gt;5%，立即重训。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="13-一分钟本地体验"&gt;13. 一分钟本地体验&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/xxx/signlm.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; docker &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; docker-compose up
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 浏览器打开 http://localhost:5173&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 上传 video/hello.mp4 → 看到识别结果“你好”&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="14-许可证"&gt;14. 许可证&lt;/h2&gt;
&lt;p&gt;代码：MIT&lt;br&gt;
模型权重：CC BY-NC-SA 4.0（禁止商用）&lt;br&gt;
CSL-500 数据：遵循原协议，仅提供下载脚本。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="15-联系方式"&gt;15. 联系方式&lt;/h2&gt;
&lt;p&gt;如有问题或建议，请联系：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;邮箱:
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;让 AI 做手语翻译，让科技更有温度。❤️&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>FaceSign</title><link>https://liuchenlili.github.io/projects/facesign/</link><pubDate>Sun, 22 Oct 2023 00:00:00 +0000</pubDate><guid>https://liuchenlili.github.io/projects/facesign/</guid><description>&lt;h1 id="facesign---智能人脸识别考勤系统"&gt;FaceSign - 智能人脸识别考勤系统&lt;/h1&gt;
&lt;p&gt;FaceSign是一个基于深度学习的人脸识别签到考勤系统，采用Streamlit框架开发，支持教师和学生两种角色。系统通过Dlib库实现人脸特征提取和识别，结合MySQL数据库实现考勤数据的存储和管理。&lt;/p&gt;
&lt;p&gt;github地址：https://github.com/liuchenlili/FaceSign&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bilibili演示视频demo:&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="w-full h-auto aspect-video relative"&gt;
&lt;iframe src="//player.bilibili.com/player.html?bvid=BV1zZtwzbE5P&amp;page=1&amp;autoplay=0"
allow="accelerometer; clipboard-write; encrypted-media; gyroscope; fullscreen; picture-in-picture;"
class="w-full h-full"
&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;h2 id="-项目简介"&gt;📝 项目简介&lt;/h2&gt;
&lt;p&gt;FaceSign是一个基于深度学习的人脸识别签到考勤系统，采用Streamlit框架开发，支持教师和学生两种角色。系统通过Dlib库实现人脸特征提取和识别，结合MySQL数据库实现考勤数据的存储和管理。&lt;/p&gt;
&lt;h2 id="-主要功能"&gt;✨ 主要功能&lt;/h2&gt;
&lt;h3 id="-教师功能"&gt;👨‍🏫 教师功能&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;人脸录入&lt;/strong&gt;: 为学生录入人脸信息，建立人脸特征数据库&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;课堂考勤&lt;/strong&gt;: 实时人脸识别签到，自动记录考勤数据&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;考勤统计&lt;/strong&gt;: 查看班级考勤情况，生成统计报表&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据管理&lt;/strong&gt;: 管理学生信息，修改学生资料&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;账户管理&lt;/strong&gt;: 修改个人密码和账户信息&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-学生功能"&gt;👨‍🎓 学生功能&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;签到统计&lt;/strong&gt;: 查看个人考勤记录和统计数据&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;个人信息&lt;/strong&gt;: 管理个人资料和头像&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;密码修改&lt;/strong&gt;: 修改登录密码&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="-技术栈"&gt;🛠️ 技术栈&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;前端框架&lt;/strong&gt;: Streamlit&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;计算机视觉&lt;/strong&gt;: OpenCV + Dlib&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据库&lt;/strong&gt;: MySQL&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;图像处理&lt;/strong&gt;: PIL&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据分析&lt;/strong&gt;: Pandas + Plotly&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UI组件&lt;/strong&gt;: streamlit-option-menu&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="-依赖包"&gt;📦 依赖包&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;streamlit
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;opencv-python
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dlib
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pymysql
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pandas
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;plotly
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pillow
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;streamlit-option-menu
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;numpy
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="-安装和运行"&gt;🚀 安装和运行&lt;/h2&gt;
&lt;h3 id="1-环境准备"&gt;1. 环境准备&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 安装依赖&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install -r requirements.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="2-数据库配置"&gt;2. 数据库配置&lt;/h3&gt;
&lt;p&gt;创建MySQL数据库并执行以下SQL语句：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 创建数据库
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DATABASE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;face&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;CHARACTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SET&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;utf8mb4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COLLATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;utf8mb4_unicode_ci&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c1"&gt;-- 使用数据库
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="n"&gt;USE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;face&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c1"&gt;-- 创建用户表
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AUTO_INCREMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIMARY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;UNIQUE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;role&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;teacher&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;student&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;face_feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BLOB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;created_at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TIMESTAMP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;updated_at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TIMESTAMP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;UPDATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c1"&gt;-- 创建考勤记录表
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;attendance&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AUTO_INCREMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIMARY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;attendance_time&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TIMESTAMP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;present&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;absent&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;late&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;present&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FOREIGN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;REFERENCES&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DELETE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CASCADE&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c1"&gt;-- 插入默认管理员账户
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;INTO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;role&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;VALUES&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;admin&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;admin123&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;teacher&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;系统管理员&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="3-模型文件准备"&gt;3. 模型文件准备&lt;/h3&gt;
&lt;p&gt;下载Dlib预训练模型文件到 &lt;code&gt;data_dlib/&lt;/code&gt; 目录：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dlib_face_recognition_resnet_model_v1.dat&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shape_predictor_68_face_landmarks.dat&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可从官方网站下载：http://dlib.net/files/&lt;/p&gt;
&lt;h3 id="4-运行应用"&gt;4. 运行应用&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;streamlit run app.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="-项目结构"&gt;📁 项目结构&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;FaceSign/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── app.py # 主应用程序
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── dock_in.py # 考勤签到模块
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── get_face.py # 人脸录入模块
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── stu_statistics.py # 学生统计模块
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── tea_statistics.py # 教师统计模块
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── README.md # 项目说明文档
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── requirements.txt # 依赖包列表
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── data_dlib/ # Dlib模型文件目录
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ├── dlib_face_recognition_resnet_model_v1.dat
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └── shape_predictor_68_face_landmarks.dat
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── imgs/ # 用户头像存储目录
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── config/ # 配置文件目录(建议新增)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="-配置说明"&gt;🔧 配置说明&lt;/h2&gt;
&lt;h3 id="数据库配置"&gt;数据库配置&lt;/h3&gt;
&lt;p&gt;在各个模块中修改数据库连接参数：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;DatabaseConnection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3306&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;root&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;your_password&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;face&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;建议将数据库配置抽取到独立的配置文件中。&lt;/p&gt;
&lt;h2 id="-使用说明"&gt;📊 使用说明&lt;/h2&gt;
&lt;h3 id="首次使用流程"&gt;首次使用流程&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;管理员登录&lt;/strong&gt;: 使用默认账户 admin/admin123 登录&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;学生注册&lt;/strong&gt;: 通过注册功能创建学生账户&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;人脸录入&lt;/strong&gt;: 为每个学生录入人脸特征&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;开始考勤&lt;/strong&gt;: 使用课堂考勤功能进行签到&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="考勤流程"&gt;考勤流程&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;教师选择&amp;quot;课堂考勤&amp;quot;功能&lt;/li&gt;
&lt;li&gt;系统启动摄像头&lt;/li&gt;
&lt;li&gt;学生面向摄像头进行人脸识别&lt;/li&gt;
&lt;li&gt;系统自动识别并记录考勤信息&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="-安全说明"&gt;🔒 安全说明&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;密码采用明文存储，建议在生产环境中使用哈希加密&lt;/li&gt;
&lt;li&gt;人脸特征数据已进行加密存储&lt;/li&gt;
&lt;li&gt;建议定期备份数据库数据&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="-故障排除"&gt;🐛 故障排除&lt;/h2&gt;
&lt;h3 id="常见问题"&gt;常见问题&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;摄像头无法打开&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;检查摄像头权限&lt;/li&gt;
&lt;li&gt;确认摄像头未被其他程序占用&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;人脸识别失败&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;确保光线充足&lt;/li&gt;
&lt;li&gt;检查Dlib模型文件是否正确加载&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;数据库连接失败&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;检查MySQL服务是否启动&lt;/li&gt;
&lt;li&gt;验证数据库连接参数&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="-更新日志"&gt;🔄 更新日志&lt;/h2&gt;
&lt;h3 id="v100-当前版本"&gt;v1.0.0 (当前版本)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;基本的人脸识别考勤功能&lt;/li&gt;
&lt;li&gt;用户管理系统&lt;/li&gt;
&lt;li&gt;考勤统计功能&lt;/li&gt;
&lt;li&gt;Web界面交互&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="-未来规划"&gt;🎯 未来规划&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 增加批量导入学生功能&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 支持多课程管理&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 增加考勤报告导出功能&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 添加移动端支持&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 优化人脸识别算法&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 增加实时通知功能&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="-联系方式"&gt;📞 联系方式&lt;/h2&gt;
&lt;p&gt;如有问题或建议，请联系：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;邮箱:
&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>