Face_reg_app/FaceFeatureExtractorAPI/STORAGE_ANALYSIS.md

6.8 KiB

后端存储需求分析

📊 当前架构分析

现状:

Android端:

  • 使用SQLite本地数据库存储人脸特征
  • 存储内容: 姓名、年龄、1024维特征向量、人脸图片路径
  • 识别时: 本地遍历所有用户特征进行比对

Web API后端:

  • 仅提供无状态的计算服务:
    1. /api/extract_feature - 提取特征
    2. /api/compare_features - 对比特征
    3. /api/compare_image_feature - 图像与特征对比
  • 不存储任何用户数据

🤔 是否需要后端存储?

两种架构对比

方案A: 当前架构 (Android本地存储)

┌─────────────────┐
│   Android端     │
├─────────────────┤
│ • 注册人脸      │ ──┐
│ • SQLite数据库  │   │  提取特征
│ • 本地存储特征  │   ├──────────> ┌──────────────┐
│ • 本地比对识别  │   │            │  Web API     │
│ • 离线可用      │ ──┘            │  (无状态)    │
└─────────────────┘                │ • 提取特征   │
                                   │ • 计算相似度 │
                                   └──────────────┘

优点:

  • 离线可用 - 网络断开仍可识别已注册用户
  • 隐私保护 - 用户数据不离开设备
  • 响应快速 - 无需网络往返
  • 成本低 - 无需维护后端数据库
  • 适合单设备使用

缺点:

  • 数据孤岛 - 每个设备独立存储
  • 无法多端同步 - 手机A注册的用户,手机B无法识别
  • 难以集中管理 - 无法统一管理所有用户
  • 数据备份困难 - 设备丢失数据即丢失

方案B: 后端集中存储

┌─────────────────┐                ┌──────────────────┐
│  Android端1     │                │  Web API后端     │
├─────────────────┤                ├──────────────────┤
│ • 注册人脸      │ ──注册──────> │ • 提取特征       │
│ • 识别人脸      │ <──查询所有── │ • 存储用户数据   │
│ • 轻量级客户端  │                │ • PostgreSQL/    │
└─────────────────┘                │   MySQL数据库    │
                                   │ • 用户管理API    │
┌─────────────────┐                │ • 查询/删除/更新 │
│  Android端2     │ <──────────────┤ • 统一认证       │
├─────────────────┤                └──────────────────┘
│ • 识别所有用户  │
│ • 多端共享数据  │
└─────────────────┘

优点:

  • 多端同步 - 所有设备共享用户库
  • 集中管理 - 统一管理所有注册用户
  • 数据备份 - 后端数据库定期备份
  • 统计分析 - 可进行访问记录、统计分析
  • 权限控制 - 可设置不同设备的访问权限
  • 适合企业级应用

缺点:

  • 必须联网 - 离线无法使用
  • 隐私风险 - 用户数据存储在服务器
  • 延迟增加 - 每次识别需查询后端
  • 成本提高 - 需要数据库、存储、带宽
  • 运维复杂 - 需要数据库维护

💡 推荐方案

混合架构 (推荐)

结合两者优势,提供灵活选择:

┌─────────────────────┐           ┌──────────────────────┐
│  Android端          │           │  Web API后端         │
├─────────────────────┤           ├──────────────────────┤
│ • 本地SQLite缓存    │           │ • 提取特征(无状态)   │
│ • 离线识别已缓存用户│           │ • 可选: 用户库存储   │
│ • 定期同步后端数据  │<──同步──> │ • 可选: 注册/查询API │
│                     │           │ • 可选: PostgreSQL   │
│ 配置项:             │           └──────────────────────┘
│ □ 仅本地存储        │
│ ☑ 本地+云端同步     │
│ □ 纯云端存储        │
└─────────────────────┘

🎯 建议

根据您的需求选择:

场景1: 个人/小型应用保持当前架构

  • 单设备使用
  • 注册人数 < 100人
  • 隐私优先
  • 无需后端存储

场景2: 企业/多设备应用添加后端存储

  • 多个门禁设备共享用户库
  • 需要集中管理员工信息
  • 需要访问记录和统计
  • 建议添加后端存储

场景3: 混合应用本地+云端同步

  • 平时使用本地缓存(快速+离线)
  • 定期从云端同步最新用户库
  • 新注册用户自动上传云端
  • 灵活性最高

🚀 如果需要后端存储

我可以为您实现以下功能:

新增API接口:

  1. POST /api/users/register - 注册用户(存储特征+姓名+照片)
  2. GET /api/users/list - 获取所有用户列表
  3. GET /api/users/{user_id} - 获取单个用户信息
  4. DELETE /api/users/{user_id} - 删除用户
  5. POST /api/users/recognize - 识别人脸(在后端用户库中查找)
  6. POST /api/users/sync - 同步用户数据(供Android下载)

数据库设计:

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL UNIQUE,
    age INTEGER,
    feature_vector FLOAT[1024] NOT NULL,  -- 特征向量
    photo_path VARCHAR(255),              -- 照片路径
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW()
);

CREATE TABLE recognition_logs (
    id SERIAL PRIMARY KEY,
    user_id INTEGER REFERENCES users(id),
    device_id VARCHAR(100),
    similarity FLOAT,
    recognized_at TIMESTAMP DEFAULT NOW()
);

您的选择

请告诉我您的使用场景:

  1. 仅供个人使用 → 保持当前架构,无需后端存储
  2. 企业多设备使用 → 我为您添加完整的后端存储功能
  3. 混合模式 → 我实现本地+云端同步架构

如果选择2或3,我将为您实现:

  • PostgreSQL/SQLite数据库集成
  • 完整的用户管理API
  • Android端同步功能
  • 访问记录统计
  • 照片存储功能

请告诉我您的需求,我会立即开始实现! 🚀