你这个需求,如果只是“能跑”,其实两周就能做出来;但你想做的是可规模化、可进化、能长期优化的能力平台,那架构一定要一开始就设计对。否则后面不是性能炸,就是效果上不去。
我给你一版真正能落地 + 能扩展到 APM / AI 能力平台的架构(iOS / Android 通用思路)。
一、整体架构(分层设计)
┌──────────────────────────────┐
│ UI / 业务层 │
│ 相似照片分组 / 推荐最佳照片 │
└─────────────┬────────────────┘
│
┌─────────────▼────────────────┐
│ Photo Dedup Service │
│ 去重 + 最优选择核心服务层 │
└─────────────┬────────────────┘
│
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
特征提取 相似度聚类 质量评分
Embedding Clustering Ranking
│ │ │
└──────┬─────┴──────┬─────┘
▼ ▼
索引系统 模型管理
(ANN Index) (Model Hub)
│ │
└────┬───────┘
▼
数据 & 缓存层
二、核心模块拆解(工程可实现)
1️⃣ 特征提取层(Embedding)
iOS
-
Apple Vision Framework
VNGenerateImageFeaturePrintRequest
- Core ML(自定义模型)
Android
- TensorFlow Lite
- 或 MediaPipe
👉 输出
image → 128~512 维向量
👉 性能策略(关键)
- 只做一次(缓存 embedding)
- 后台线程执行
- 分批(batch size 16/32)
2️⃣ 相似度检索(ANN Index)
你不能暴力两两比(N² 会炸)
方案:
- HNSW(推荐)
- IVF(Faiss 思路)
👉 移动端实现:
- 轻量 ANN(自己实现简化版)
-
或降级:
- 分桶(时间 + hash)
👉 索引结构
时间分桶 → embedding → ANN索引
3️⃣ 聚类(Clustering)
推荐方案(移动端最稳)
时间窗口 + 相似度阈值
if |t1 - t2| < 5s AND similarity > 0.9
→ same group
👉 不要一开始上复杂算法(DBSCAN)
👉 简单规则 + 滑动窗口更稳
4️⃣ 质量评分(Ranking Engine)
核心是一个可扩展打分系统
评分模块设计
ScoreEngine
├── SharpnessEvaluator
├── ExposureEvaluator
├── FaceEvaluator
├── AestheticEvaluator
├── UniquenessEvaluator
iOS 能力
- Apple Vision Framework(人脸)
- CoreImage(清晰度 / 曝光)
Android
- ML Kit(人脸)
- OpenCV(清晰度)
👉 评分函数
score = Σ (wi * feature_i)
👉 关键优化
- 模块可插拔(方便 A/B)
- 权重可远程配置(灰度)
5️⃣ 最优选择(Best Pick)
best = argmax(score)
但要加一个现实优化:
👉 避免误删策略
- 保留 Top2(不是只留1张)
- 用户确认删除
三、性能架构(你必须重视)
1️⃣ 分阶段处理(核心)
Stage 1: 快速过滤(hash + 时间)
Stage 2: embedding 相似度
Stage 3: 精细评分
👉 每一步都在“降数据量”
2️⃣ 调度系统(移动端关键)
iOS
- GCD / OperationQueue
- BGTaskScheduler(后台跑)
Android
- WorkManager
3️⃣ 缓存策略
| 数据 | 是否缓存 |
|---|---|
| embedding | ✅ 必须 |
| score | ✅ |
| 分组结果 | ✅ |
4️⃣ 增量更新(必须做)
不要全量扫描:
新增照片 → 局部计算 → 更新索引
四、模型策略(别一开始走歪)
MVP(最优性价比)
- embedding:Vision / MobileNet
- 不训练模型
- 规则评分
👉 能做到 80% iPhone 效果
进阶版
- Aesthetic 模型(美学评分)
- 人脸质量模型(闭眼检测)
高阶版(你可以做差异化)
- 用户偏好学习(强化学习)
- 场景模型(人像 / 风景)
五、APM + AI 平台化(重点,拉开差距)
你现在做的不该只是“功能”,而是:
👉 端侧 AI 能力平台
抽象一层
AI Engine
├── Embedding Service
├── Ranking Service
├── Model Manager
├── Feature Store
APM 接入点
你可以监控:
- 模型耗时
- 电量消耗
- 命中率(用户是否接受推荐)
- 删除转化率
👉 关键指标:
推荐命中率 = 用户选择推荐照片 / 总推荐数
六、数据闭环(很多人做不到)
用户行为 → 日志 → 模型优化 → 下发权重
👉 你可以做:
- 用户最终保留哪张
- 用户手动恢复哪张
→ 反向训练 ranking
七、你这套系统的本质(说透一点)
不要把它当“图片处理”:
这是一个:端侧搜索 + 排序 + 推荐系统
和你做:
- 搜索排序
- Feed流推荐
是一个东西
八、给你一个现实建议(很关键)
你如果现在就想上线:
👉 别做“最强模型”,先做:
- 时间分组
- 清晰度评分
- 人脸检测
就已经比 70% App 强了
如果你愿意,我可以下一步直接帮你:
👉 画一版iOS Swift / Android Kotlin 的代码级架构(类图 + 接口设计)
👉 或帮你设计embedding + score 的具体实现(含伪代码)
这一步会直接从“架构”走到“可开发”。