Skip to content

xhcom-ui/photo-scanner

Repository files navigation

PhotoScanner - iOS 智能照片搜索应用

基于 Chinese-CLIP 模型的本地化智能照片搜索应用,支持文字搜图、以图搜图、人脸分组、地点相册等多种功能。

功能特性

  • 文字搜图: 输入中文/英文文本,使用 CLIP 模型语义匹配照片库中的图片
  • 以图搜图: 选择一张照片,搜索相似的照片
  • 人脸分组: 自动识别照片中的人物并分组
  • 地点相册: 按拍摄地点浏览照片
  • 相似聚类: 自动发现相似照片簇
  • 图文相似度: 分析照片与文字的匹配度
  • 图图相似度: 比较两张照片的相似度
  • 最 X 的照片: 展示照片库中的各项之最(最高、最长、分辨率最大等)
  • 离线处理: 所有推理在设备本地完成,无需网络,保护隐私
  • 智能索引: 后台自动提取图片特征向量,支持暂停/继续
  • 高效检索: 使用 L2 归一化的余弦相似度快速排序
  • 精美 UI: 现代化的用户界面,流畅的交互体验

项目结构

PhotoScanner/
├── PhotoScannerApp.swift          # 应用入口
├── ContentView.swift              # 主视图 (Tab导航)
│
├── Models/                        # 模型层
│   ├── ChineseTokenizer.swift     # 中文BERT分词器
│   ├── CLIPTextModel.swift        # CoreML文本编码器
│   └── CLIPImageModel.swift       # CoreML图像编码器
│
├── Data/                          # 数据层
│   ├── ChineseCLIP_image.mlpackage/ # 图像模型
│   ├── ChineseCLIP_text.mlpackage/  # 文本模型
│   ├── EmbeddingCache.swift       # 特征向量持久化缓存
│   └── PhotoLibraryManager.swift  # 相册访问与索引管理
│
├── Views/                         # UI视图
│   ├── AssetThumbnailView.swift   # 资产缩略图视图
│   ├── BestPhotosView.swift       # 最X的照片页面
│   ├── DiscoverView.swift         # 发现页面
│   ├── FaceGroupingView.swift     # 人脸分组页面
│   ├── LocationAlbumView.swift    # 地点相册页面
│   ├── PhotoDetailView.swift      # 照片详情页面
│   ├── SearchView.swift           # 主搜索页面
│   ├── SettingsView.swift         # 设置与索引进度页面
│   ├── StatsView.swift            # 聚类统计页面
│   └── ToolsView.swift            # 工具页面
│
├── Assets.xcassets/              # 资源文件
└── vocab.txt                     # 分词器词汇表

快速开始

第一步: 检查模型文件

项目已经包含了预转换的模型文件,位于 PhotoScanner/PhotoScanner/Data/ 目录中:

如果这些文件不存在,请运行转换脚本生成它们:

第三步: 配置权限

在 Xcode 项目设置中添加:

Info.plist / Privacy - Photo Library Usage Description:

用于访问您的照片库以进行文字搜索和特征索引

第四步: 构建运行

  1. 选择真机或模拟器 (iOS 15+)
  2. Cmd + R 运行

使用说明

  1. 首次打开后进入「设置」页,点击「开始分析」建立索引
  2. 返回「搜索」页输入关键词(如 "猫咪"、"海边日落"、"旅行")
  3. 或点击推荐标签快速搜索
  4. 结果按相似度降序排列,百分比表示匹配程度

技术细节

组件 技术
文本编码 Chinese-CLIP ViT-B/16 Text Encoder → CoreML
图像编码 Chinese-CLIP ViT-B/16 Vision Encoder → CoreML
分词器 BERT WordPiece Tokenizer (Swift实现)
特征维度 512维浮点向量
相似度计算 余弦相似度 (L2归一化后的点积)
缓存存储 JSON文件 (Documents目录)

注意事项

  • 首次索引约3000张照片需要5-10分钟(取决于设备性能)
  • 模型文件较大(~540MB),建议仅在真机上测试
  • 索引过程支持后台执行,可随时暂停/继续

依赖

  • iOS 15.0+
  • Swift 5.9+
  • SwiftUI
  • Photos Framework
  • CoreML Framework
  • Core Location Framework

应用截图 应用截图 应用截图 应用截图 应用截图 应用截图

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors