192 lines
6.8 KiB
Markdown
192 lines
6.8 KiB
Markdown
|
|
# 后端存储需求分析
|
||
|
|
|
||
|
|
## 📊 当前架构分析
|
||
|
|
|
||
|
|
### 现状:
|
||
|
|
|
||
|
|
**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下载)
|
||
|
|
|
||
|
|
### 数据库设计:
|
||
|
|
|
||
|
|
```sql
|
||
|
|
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端同步功能
|
||
|
|
- ✅ 访问记录统计
|
||
|
|
- ✅ 照片存储功能
|
||
|
|
|
||
|
|
请告诉我您的需求,我会立即开始实现! 🚀
|