ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Ente Photos 智能相册(Auto-add People)全解析:让人脸识别自动填充相册

Ente Photos 智能相册(Auto-add People)全解析:让人脸识别自动填充相册 Ente Photos 智能相册Auto-add People全解析让人脸识别自动填充相册【免费下载链接】ente End-to-end encrypted cloud for everything.项目地址: https://gitcode.com/GitHub_Trending/en/ente导读本文围绕 Ente Photos 的Auto-add people按人物自动添加照片 / 智能相册功能展开当你为某个相册选定了若干人物后凡是后续上传且经设备端人脸识别索引出包含这些人的照片都会自动流入该相册。文章以官方功能文档为主体结合 Ente 开源仓库中mobile/apps/photos的 Dart 源码SmartAlbumsService、SmartAlbumConfig、Collection.canAutoAdd等逐层剖析其前置条件、移动端配置步骤、管理/停止方式与增量同步的底层实现帮助读者既会操作、也懂原理。什么是智能相册Auto-add peopleEnte Photos 的智能相册允许你把特定的人绑定到任意你有编辑权限的相册上。设置完成后只要满足以下两个条件照片就会自动进入该相册照片中包含你选定的人物该照片已经过设备端的人脸识别索引。换句话说是为相册订阅一批人然后让人脸识别把人脉流动起来——上传的新照片无需手动归组会在人脸识别索引完成后自动流入对应相册。官方文档对该功能的一句话概括是Automatically add photos of specific people to any album you can edit. Once set up, new matching photos you upload will flow into that album after face recognition indexes them.需要注意的是智能相册只作用于你自己上传的照片其他协作者/成员上传进相册的内容不会被自动改写详见下文ownerID过滤的源码证据。前置条件先让人被识别出来要使用自动添加功能需要先满足文档列出的若干要求它们分别对应移动端机器学习的两个前置特性前置条件说明对应文档开启设备端机器学习移动端在Settings Machine learning中启用Machine learning与/或Local indexingmachine-learning.md人物已被命名只有已命名的人物才会出现在选人器中namedOnly: trueface-recognition.md拥有相册编辑权限你必须是相册所有者或是管理员/协作者收藏Favorites与未分类Uncategorized不可用本文下方canAutoAdd权限解析只作用于自己上传的照片其他协作者上传的照片保持不变本文下方增量同步解析平台限制目前只有移动端可以配置桌面端与 Web 尚不支持配置本文平台差异章节机器学习的索引流程在 machine-learning.md 中有完整描述应用先下载原始照片到设备在设备本地用 ML 模型分析、建立索引再把索引加密同步到你的其他设备。而人脸识别正是在此基础上完成检测人脸 → 相似人脸聚类 → 命名人物 → 按名搜索的完整闭环详见 face-recognition.md。[!NOTE] 与机器学习整体一样智能相册依赖设备端能力photos.ente.comWeb 端不提供人脸识别因而也无法使用自动添加功能。权限判断的源码证据canAutoAdd为什么收藏和未分类不能启用自动添加源码中给出了明确判定。在 collection.dart 中bool canAutoAdd(int userID) { final participantRole getRole(userID); final canEditCollection isOwner(userID) || participantRole CollectionParticipantRole.collaborator || participantRole CollectionParticipantRole.admin; final isFavoritesOrUncategorized type CollectionType.favorites || type CollectionType.uncategorized; return canEditCollection !isDeleted !isFavoritesOrUncategorized; }可以推断收藏与未分类在 Ente 中属于系统内置集合而非普通可编辑相册因此被显式排除。与此同时相册菜单中的入口同样以该判断为前提在 gallery_app_bar_widget.dart 中先检查hasGrantedMLConsent用户是否同意机器学习再检查collection.canAutoAdd(userId)两者同时为真才展示Auto-add people菜单项若已配置过人菜单文案会从autoAddPeople切换为editAutoAddPeople见同文件 L840-L844。在移动端配置自动添加官方文档给出的操作路径如下打开你想要持续更新的相册点击右上角溢出菜单三个点选择Auto-add people若已配置过则显示Edit auto-add people勾选要关注的人物点击Save相册会先被已有的匹配照片填满之后每当上传的新照片经人脸索引判定包含这些人也会自动加入。[!TIP] 对于空相册可以直接使用空状态页上的Auto-add people快捷按钮。该入口在源码 empty_album_state.dart 中有对应实现空相册页会同时展示添加照片主按钮与Auto-add people次级按钮点击后直接跳转到SmartAlbumPeople选人页。选人界面只展示已命名人物配置界面由 smart_album_people.dart 实现。它通过SmartAlbumPeople(collectionId: ...)接收当前相册 ID初始化时读取已有配置并预选已绑定的人物页面标题为People副标题是自动添加人物的说明文案peopleAutoAddDesc选人列表来自PeopleSectionAllWidget并显式传入namedOnly: true——只有已命名的人物才出现在选人器中这与官方文档People must be named in Face recognition so they appear in the picker的要求完全对应底部的 Save 按钮会与当前配置做差异比较setEquals只有在人物集合真正发生变化时才可点击。保存时代码会区分两种场景smart_album_people.dart首次配置currentConfig null为每个选中人物初始化updatedAt: 0, addedFiles: {}的空记录然后写入配置编辑配置计算被移除的人物removedPersonIds弹出确认对话框询问是否同时删除此前因这些人而自动加入的照片确认后调用moveFilesFromCurrentCollection将这些文件移出当前相册。保存后的动作保存配置后代码会调用smartAlbumsService.saveConfig(newConfig)落盘并紧接着触发一次syncSmartAlbums()见 smart_album_people.dart——也就是说配置一保存相册立即开始回填已有的历史匹配照片。管理与停止自动添加官方文档的运维要点增删人物重复上述配置步骤即可选中更多人或取消勾选某人移除人物的照片当移除某个人物时Ente 会询问你是否同时移除之前因该人物而自动加入的照片。这一步在源码中由removeFilesDialog实现smart_album_people.dart对话框文案为是否移除智能相册自动添加的照片shouldRemoveFilesSmartAlbumsDesc提供 Yes / No 两个选项确认后会按该人物addedFiles记录的文件 ID 精确清理而不是清空整个相册完全停止取消勾选所有人物并保存配置中personIDs变为空集合自动添加即停止暂停行为如果关闭了机器学习自动添加会暂停重新开启机器学习后恢复更新。对应地源码 smart_albums_service.dart 在syncSmartAlbums()开头就检查hasGrantedMLConsent未授权时直接跳过同步并记录警告日志。底层实现剖析智能相册的增量同步机制移动端的功能核心集中在 smart_albums_service.dart配合配置模型 smart_album_config.dart 一起工作。配置模型SmartAlbumConfig与PersonInfotypedef PersonInfo ({int updatedAt, Setint addedFiles}); class SmartAlbumConfig { final String? id; final int collectionId; final SetString personIDs; final MapString, PersonInfo infoMap; final int updatedAt; ... }每个智能相册配置包含相册 IDcollectionId、绑定的人物 ID 集合personIDs、以及按人物记录的增量进度infoMap。PersonInfo记录了两项关键数据updatedAt该人物聚类cgroup在本地实体库中的最后更新时间戳addedFiles已自动加入该相册的文件 ID 集合用于去重避免同一文件被反复加入。配置以 JSON 序列化后通过实体服务EntityType.smartAlbum存储实体 ID 采用sa_${userId}_$collectionId的命名规则见 smart_albums_service.dart保证每个用户在每张相册上的配置互不冲突并随端到端加密的实体同步机制在多端同步。同步流程syncSmartAlbums()的增量逻辑核心方法syncSmartAlbums()smart_albums_service.dart执行以下步骤检查机器学习开关未授权直接返回对应文档关闭 ML 自动添加暂停读取全部配置从本地实体库取回所有smartAlbum实体并解码逐相册处理跳过personIDs为空或当前用户无canAutoAdd权限的相册若相册已删除则清理该配置实体增量比对对每个绑定人物通过entityService.getUpdatedAts(EntityType.cgroup, personIDs)拿到人物聚类的更新时间与infoMap中记录的updatedAt比较——只有聚类有新变更的人物才进入本次同步过滤候选文件smart_albums_service.dartfinal fileIds (await SearchService.instance.getFilesForPersonID(personId, sortOnTime: false)) ..removeWhere( (e) e.uploadedFileID null || config.infoMap[personId]!.addedFiles.contains(e.uploadedFileID) || e.ownerID ! userId, );这里做了三重过滤剔除无上传 ID 的文件、剔除已在addedFiles中记录过的文件去重、剔除ownerID ! userId的文件——这正是文档Only photos you upload are auto-added; items uploaded by other contributors stay unchanged的源码级印证 6.写入相册将候选文件通过addOrCopyToCollection(collectionId, files, toCopy: false)加入相册非复制即建立集合关联而不产生额外存储占用 7.更新进度用config.addFiles(updatedAtMap, pendingSyncFiles)合并新增文件到infoMap并保存配置从而记录本轮的updatedAt与addedFiles为下一轮增量同步打点 8.事件通知整个过程中通过Bus广播SmartAlbumSyncingEventUI 据此展示同步中状态。也就是说同步是事件驱动的增量拉取每次人物聚类数据更新后服务会针对性地把该人物的新文件补进相册而不是全量扫描重算这也解释了为什么新上传的照片在人脸识别索引之后才流入相册——getFilesForPersonID依赖的是人脸索引的结果。配置的保存与加密同步saveConfig→_addOrUpdateEntity(EntityType.smartAlbum, ...)将配置写入本地实体库。从 machine-learning.md 可知机器学习索引数据包括人脸聚类、搜索索引都会加密后同步到其他设备智能相册配置作为其中的一部分同样遵循端到端加密Ente 服务器无法读取你的选人与文件关联信息。平台差异与已知限制依据官方文档与源码各端能力对比如下能力移动端iOS/Android桌面端Webphotos.ente.com配置自动添加✅ 支持❌ 暂不支持❌ 不支持无人脸识别查看/编辑已配置人物✅❌❌自动填充生效✅✅索引同步后❌值得注意的细节虽然配置只能在移动端完成但自动添加的执行syncSmartAlbums以及相册的查看并不局限于配置端——只要该客户端具备机器学习能力与canAutoAdd权限索引数据同步到哪个设备哪个设备就能继续维持相册更新参见 machine-learning.md 中索引跨设备同步一节。桌面端索引更快适合大图库先行索引索引结果会加密同步给移动端。常见问题与使用建议选人器中看不到某个人先到搜索页的 People 区确认该人物已命名。配置界面使用namedOnly: true过滤未命名聚类不会出现在候选列表。关闭机器学习后相册不更新这是预期行为syncSmartAlbums()在未授权 ML 时直接跳过。重新在Settings Machine learning开启后恢复。移除人物时误删了照片删除动作仅针对该人物addedFiles记录中自动加入的照片手动放入的照片不受影响若选择不删除则仅解除人物绑定。协作者上传的照片没有自动进入相册属于设计约束增量同步对候选文件强制ownerID userId只处理你自己上传的内容。建议的启用顺序若图库很大先在桌面端开启机器学习完成首次索引更快索引加密同步到移动端后再配置智能相册可显著缩短配置后回填的等待时间。更完整的人脸识别操作合并/拆分人物、封面、忽略人物等可参考 face-recognition.md机器学习索引与隐私说明见 machine-learning.md。相册的通用操作排序、置顶、描述、地图视图等参见 albums.md。结语智能相册是 Ente Photos 本地机器学习 端到端加密理念的典型应用人脸识别全部在设备端完成人物与相册的关联配置同样加密存储与同步服务器始终接触不到未加密的照片、人脸数据与关联关系。从本文的源码分析可以看到其增量同步机制updatedAt比对 addedFiles去重 ownerID过滤兼顾了效率、幂等与权限边界让指定人物自动归类这一体验既智能又可控。【免费下载链接】ente End-to-end encrypted cloud for everything.项目地址: https://gitcode.com/GitHub_Trending/en/ente创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表