Go to file
sairate bf52ea388d build: 添加项目依赖项
- 新增 requirements.txt 文件
- 添加项目所需的所有依赖包
-包括 Flask、SQLAlchemy等主要依赖
2025-02-06 15:31:03 +08:00
.idea feat(photo): 优化照片分类和查询功能 2025-02-06 15:26:21 +08:00
__pycache__ Signed-off-by: sairate <sairate@sina.cn> 2025-02-05 12:29:13 +08:00
static feat(photo): 优化照片分类和查询功能 2025-02-06 15:26:21 +08:00
templates feat(photo): 优化照片分类和查询功能 2025-02-06 15:26:21 +08:00
README.md feat(photo): 优化照片分类和查询功能 2025-02-06 15:26:21 +08:00
app.py feat(photo): 优化照片分类和查询功能 2025-02-06 15:26:21 +08:00
functions.py feat(photo): 优化照片分类和查询功能 2025-02-06 15:26:21 +08:00
models.py feat(photo): 优化照片分类和查询功能 2025-02-06 15:26:21 +08:00
requirements.txt build: 添加项目依赖项 2025-02-06 15:31:03 +08:00

README.md

照片管理系统项目文档

项目概述

本项目是一个基于 Flask 框架的照片管理系统,主要功能包括:

  1. 人脸管理:增删改查用户的人脸数据。
  2. 照片上传与分类:用户可以上传照片,系统会根据 EXIF 时间信息和数据库中的人脸数据进行分类存储。
  3. 照片查询:用户可以根据姓名和日期查找相应的照片。

技术栈

  • 后端FlaskPython
  • 数据库SQLAlchemySQLite / MySQL
  • 前端HTML + CSS + Jinja2
  • 存储:文件系统存储上传的照片

数据库设计

1. users 表(用户信息表)

字段名 类型 说明
id 主键 自动生成
username 字符串 用户名,唯一且非空
encoding 二进制数据 人脸识别编码,用于匹配
photo 字符串 用户头像照片路径

2. photos 表(照片信息表)

字段名 类型 说明
id 主键 自动生成
user_id 外键 关联到 users 表的 id
created_at 时间戳 照片拍摄时间(来自 EXIF 信息)
classification 布尔值 照片是否分类(默认 False,分类成功后 True
classification_confidence 浮点数 照片分类置信度(默认 0
classification_image_path 字符串 分类后的照片存储路径

主要功能实现

1. 用户管理

  • 添加用户:用户可上传照片,系统提取人脸编码并存入数据库。
  • 查看用户列表:显示所有用户及其头像。
  • 删除用户:从数据库中删除用户信息及相关照片。

2. 照片上传与分类

  • 上传照片:用户上传照片,系统解析 EXIF 数据确定拍摄时间。
  • 人脸匹配分类:系统根据数据库中的人脸编码进行匹配,分类并存储到相应目录。
  • 存储路径规则
    static/uploads/users/{用户名}/{日期(年-月-日)}/照片文件名
    

3. 照片查询

  • 基于姓名和日期查询:用户输入姓名和日期,系统返回符合条件的照片。
  • 展示分类结果:前端页面显示照片缩略图,并提供原始照片下载链接。

关键代码

1. 照片上传(upload 端点)

@app.route('/upload', methods=['GET', 'POST'])
def upload():
    if request.method == 'POST':
        photos = request.files.getlist('photos')
        classify_photos(photos)  # 进行分类处理
        
        # 获取最新照片并关联用户信息
        recent_photos = Photo.query.order_by(Photo.created_at.desc()).limit(len(photos)).all()
        photos_with_users = []
        for photo in recent_photos:
            user = User.query.get(photo.user_id)
            photos_with_users.append({
                "filename": photo.classification_image_path,
                "username": user.username if user else "未知",
                "created_at": photo.created_at
            })
        
        return render_template('upload.html', photos=photos_with_users)
    
    return render_template('upload.html', photos=[])

2. 照片查询(search 端点)

@app.route('/search', methods=['POST'])
def search():
    name = request.form['name']
    date = request.form['date']
    
    user = User.query.filter_by(username=name).first()
    if not user:
        return render_template('search.html', photos=[], message="用户不存在")
    
    photos = Photo.query.filter_by(user_id=user.id).filter(Photo.created_at.like(f"{date}%")).all()
    return render_template('search.html', photos=photos)

前端页面示例

1. 照片查询页面(search.html

<form action="{{ url_for('search') }}" method="POST">
    <label for="name">姓名:</label>
    <input type="text" id="name" name="name" placeholder="请输入用户名" required>
    <label for="date">日期:</label>
    <input type="date" id="date" name="date" required>
    <button type="submit">查询照片</button>
</form>

目录结构

project_root/
│── app.py  # Flask 入口文件
│── functions.py  # 处理照片分类等功能
│── models.py  # 数据库模型
│── templates/
│   ├── base.html  # 公共模板
│   ├── upload.html  # 上传页面
│   ├── search.html  # 查询页面
│── static/
│   ├── uploads/  # 存储照片
│   ├── styles.css  # 样式表
│── .venv/  # 虚拟环境
│── requirements.txt  # 依赖文件

部署方式

  1. 安装依赖
    pip install -r requirements.txt
    
  2. 运行 Flask 服务器
    flask run
    
  3. 访问应用 在浏览器中打开 http://127.0.0.1:5000

未来优化方向

  • 添加身份验证:使用 Flask-Login 实现用户登录功能。
  • 优化分类算法:提高人脸识别和分类的准确率。
  • 支持云存储:将照片存储到云端,如 AWS S3 或阿里云 OSS。

本项目旨在提供一个高效、易用的照片管理系统,欢迎优化和扩展!