跳到正文

大素材库

在数万张照片与数小时视频上使用 SnapByFace:增量重索引、FAISS 向量检索、暂停/继续/取消,以及意外退出后的恢复。

SnapByFace 是为整个归档而设计的,不是只给你挑几个示例文件夹。这一页讲的是素材库变大之后会发生什么,以及如何让之后的每一次运行都很便宜。

增量处理

在分析一个文件之前,SnapByFace 会先确认它是不是真的变了。当下面几项与索引里存的一致时,该文件会被跳过:

  1. 文件大小 —— 未变。
  2. 修改时间 —— 未变。
  3. SHA-256 摘要 —— 未变。
  4. 索引版本 —— 已存的特征是由当前版本的应用算出来的。

只要其中任意一项不同,这个文件就重新分析;其余全部跳过。实际效果是:

  • 对没动过的素材库跑第二遍,耗时只有第一遍的一小部分。
  • 重新编码或编辑某个文件,只会重分析这一个文件。
  • 把某个目录复制到新位置会触发重分析,因为索引里存的状态属于原来那条文件记录。

向量检索

特征检索使用 FAISS。如果你的安装里没有 FAISS,SnapByFace 会回退到 NumPy 暴力检索。

::::note NumPy 回退返回的是同样的匹配结果 —— 质量不打折,只是更慢,而且库越大差距越明显。参见 故障排查。 ::::

掌控长时间任务

  • 暂停 —— 不再占用 CPU,进度不丢。
  • 继续 —— 从暂停处往下做。
  • 取消 —— 停止;已经完成的文件保留索引。
  • 关掉再打开 —— 启动时 SnapByFace 会询问是否继续未完成的任务,所以意外退出或重启都不会丢掉几个小时的工作。

实用建议

  1. 先从一个目录开始。 先给一个有代表性的目录建索引,确认匹配与阈值合适,再加其余部分。
  2. 大任务放到夜里跑。 数万张图片或数小时视频的第一遍,就是几个小时的 CPU 活。
  3. 把素材放在高速本地磁盘上。 瓶颈通常是网络共享或 USB 机械盘,而不是人脸模型。
  4. 跑的过程中别移动或编辑素材。 这些改动本来也会让文件排进重分析队列。
  5. 第一遍用更粗的视频抽帧间隔 —— 大归档先按 2–5 秒扫一遍,再对重要的目录收紧。
  6. 宁可暂停也别强退。 两种都留了检查点,但暂停更干净。

存储与内存

  • SQLite 索引位于 ~/.snapbyface/snapbyface.db。它随检出的人脸数与抽帧数增长,而不是随素材的字节体积增长。
  • 人脸模型随应用分发,所以索引里从不存模型。
  • 内存占用随检索时持有的向量数增长;素材库很大时,让 FAISS 生效会明显受益。

从零重建索引

如果你需要一次干净重建 —— 比如改了整个素材库的视频抽帧间隔 —— 关掉 SnapByFace,删掉 ~/.snapbyface/snapbyface.db,下次运行会重建。激活状态在 license.dat 里,所以重建索引不会让你的授权失效。

::::caution 删除数据库会清掉全部匹配结果与全部已提取的人脸数据。SnapByFace 从未修改过你的原始照片和视频 —— 被删的只是它自己的索引。 ::::

大概要多久

  • 图片: 现代笔记本上每小时数千张,Apple Silicon 更快。
  • 视频: 主要取决于抽帧间隔 —— 1 秒抽帧意味着每小时素材约 3,600 次检测。
  • 重跑: 只处理变化的文件,所以是几分钟而不是几小时。

下一步