菜单

人物与面部识别

相关源文件

本文档介绍了 Immich 的人脸识别系统,该系统自动识别照片中的人脸并将其分组为“人物”实体。它解释了系统如何检测人脸、跨多张照片识别个体,并提供了用户管理和组织其照片集中人物的界面。

有关相册管理和共享的信息,请参阅相册与共享。有关包括基于人物的搜索在内的搜索功能,请参阅搜索与发现

1. 概述

Immich 的人脸识别系统自动检测上传照片中的人脸,生成人脸嵌入(人脸的数学表示),并将相似的人脸分组。这使用户能够按人物浏览照片、为人脸命名,并根据图像中出现的人物来组织其收藏。

该系统由以下几个组件组成

  • 人脸检测,用于定位图像中的人脸
  • 人脸识别,用于识别独一无二的个体
  • 人员管理界面,用于组织已检测到的人物
  • 合并、隐藏和收藏人物的功能

系统架构

以下是人脸识别系统如何融入 Immich 架构的高级概览图

来源:web/src/routes/(user)/people/+page.sveltemachine-learning/Dockerfile

2. 人脸检测与识别过程

处理管道

来源:machine-learning/Dockerfiledocs/docs/install/environment-variables.md

人脸检测与识别技术细节

人脸识别系统采用两步法

  1. 人脸检测:识别图像中人脸的位置
  2. 人脸识别:为每张人脸生成独特的嵌入,以识别个体

机器学习服务支持多种硬件加速选项,以提高性能,包括

  • CUDA (NVIDIA)
  • OpenVINO (Intel)
  • ArmNN (ARM)
  • ROCm (AMD)
  • RKNN (瑞芯微)

这些可以通过环境变量进行配置,以根据您的硬件优化性能。

来源:machine-learning/Dockerfile:15-117docs/docs/install/environment-variables.md:152-174

3. 人员管理界面

网页界面提供了所有已检测到人物的全面视图以及管理它们的工具。

人员页面

主人员页面(/people)显示了照片中检测到的人物网格。每个人物都由一张卡片表示,显示

  • 个人资料图片(最佳人脸缩略图)
  • 他们的名字(如果已分配)
  • 管理人物的选项

用户可以

  • 命名人物
  • 将人物标记为收藏
  • 隐藏人物
  • 设置出生日期
  • 合并相似人物
  • 按名称搜索人物

来源:web/src/routes/(user)/people/+page.svelteweb/src/lib/components/faces-page/people-card.svelteweb/src/lib/components/faces-page/people-infinite-scroll.svelte

人物卡片组件

每个人物都显示为一张带有其个人资料图片的卡片。该卡片包含通过上下文菜单管理人物的选项

  • 隐藏人物
  • 设置出生日期
  • 与其他人合并
  • 标记为收藏/取消收藏

来源:web/src/lib/components/faces-page/people-card.svelte:15-85

4. 人脸合并与管理

合并相似人物

当系统检测到同一人物有多个条目,或者用户希望合并单独的人物条目时,他们可以使用合并功能

当尝试将人物重命名为已存在的名称时,系统还会提供合并建议,有助于维护一个清晰的人物数据库。

来源:web/src/lib/components/faces-page/merge-face-selector.svelteweb/src/lib/components/faces-page/merge-suggestion-modal.svelte

管理人物可见性

用户可以使用可见性管理功能控制界面中哪些人物可见

  • 显示所有人
  • 隐藏未命名人物
  • 隐藏特定人物
  • 重置可见性设置

这对于管理包含许多不重要或未识别人脸的大型收藏尤其有用。

来源:web/src/lib/components/faces-page/manage-people-visibility.svelte:10-164

5. 数据模型

数据模型展示了系统中人物、人脸和资产之间的关系。每个人物可以有多张人脸,每个资产(照片)可以包含多张人脸。

来源:web/src/routes/(user)/people/+page.svelte:45-273

6. 配置选项

环境变量

人脸识别系统可以通过多个环境变量进行配置

可变描述默认
MACHINE_LEARNING_MODEL_TTL模型卸载前的非活动时间300
MACHINE_LEARNING_CACHE_FOLDER下载模型的目录/cache
MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION__RECOGNITION要预加载的识别模型-
MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION__DETECTION要预加载的检测模型-
MACHINE_LEARNING_MAX_BATCH_SIZE__FACIAL_RECOGNITION一次处理的最大人脸数量可变
MACHINE_LEARNING_ANN启用 ARM-NN 硬件加速True
MACHINE_LEARNING_RKNN启用 RKNN 硬件加速True
MACHINE_LEARNING_DEVICE_IDS多 GPU 环境的设备 ID0

来源:docs/docs/install/environment-variables.md:150-174

硬件加速

机器学习服务支持多种硬件加速选项,以提高人脸检测和识别性能

  • CUDA:适用于 NVIDIA GPU
  • OpenVINO:适用于 Intel 处理器
  • ArmNN:适用于 ARM 处理器
  • ROCm:适用于 AMD GPU
  • RKNN:适用于瑞芯微处理器

每个选项都需要特定的配置,并且可能具有不同的性能特征。应根据您的硬件环境选择合适的选项。

来源:machine-learning/Dockerfile:1-18docs/docs/install/environment-variables.md:166-174

7. 性能考量

模型缓存与内存管理

人脸识别模型可能很大且内存密集。系统包含多种机制来管理内存使用

  • 模型 TTL:模型在一段时间不活动后会被卸载(可配置)
  • 预加载:可以预加载重要模型以提高响应时间
  • 硬件加速:不同的加速选项针对特定硬件进行优化

对于内存有限的系统,请考虑

  • 不预加载模型(它们将在需要时加载)
  • 设置更短的模型 TTL
  • 使用适合您系统的硬件加速

批处理

人脸识别可以批量进行以提高吞吐量。MACHINE_LEARNING_MAX_BATCH_SIZE__FACIAL_RECOGNITION 环境变量控制同时处理的最大人脸数量。

来源:docs/docs/install/environment-variables.md:170-171

8. 故障排除

常见问题

  1. 遗漏的人脸:有些面部可能无法被检测到,如果它们是

    • 在图像中过小
    • 处于极端角度
    • 被严重遮挡或光线不足
  2. 分组错误:系统有时可能会将不同的人分组在一起,或者将同一个人拆分为多个条目。这可以使用合并功能进行纠正。

  3. 性能问题:人脸识别是计算密集型任务。如果性能缓慢

    • 确保硬件加速已正确配置
    • 调整模型 TTL 以平衡内存使用和性能
    • 考虑预加载常用模型

提高识别准确性

  1. 添加更多照片:系统会随着每个人物更多示例的提供而变得更准确
  2. 合并相似人脸:使用合并功能整合被拆分的人物
  3. 配置硬件加速:为您的硬件启用适当的加速