frigate/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/face_recognition.md

142 lines
7.3 KiB
Markdown
Raw Normal View History

2025-04-29 16:20:14 +03:00
---
id: face_recognition
title: 人脸识别
---
人脸识别功能通过将检测到的人脸与预先学习的人脸数据进行匹配,来识别已知个体。当识别出已知人员时,他们的姓名将作为`sub_label`添加。这些信息会显示在UI界面、过滤器中也会包含在通知中。
## 模型要求
### 人脸检测
2025-04-29 16:58:32 +03:00
当运行Frigate+模型(或任何原生支持人脸检测的自定义模型)时,应确保在[跟踪对象列表](../plus/#可用标签类型)中添加`face`标签,可以是全局设置或针对特定摄像头。这将允许人脸检测与物体检测同时运行,提高效率。
2025-04-29 16:20:14 +03:00
当运行默认的COCO模型或其他不包含`face`作为可检测标签的模型时人脸检测将通过CV2使用运行在CPU上的轻量级DNN模型进行。在这种情况下您不应在跟踪对象列表中定义`face`。
### 人脸识别
Frigate支持两种人脸识别模型类型
- **small(小型)**: Frigate将运行FaceNet嵌入模型进行人脸识别该模型在CPU上本地运行。此模型针对效率进行了优化但准确性较低。
- **large(大型)**: Frigate将运行大型ArcFace嵌入模型该模型针对准确性进行了优化。建议仅在拥有集成或独立显卡时使用。
在这两种情况下,都会使用轻量级的人脸关键点检测模型在运行识别前对齐人脸。
## 最低系统要求
`small`模型针对效率进行了优化可在CPU上运行大多数CPU都能高效运行该模型。
`large`模型针对准确性进行了优化强烈建议使用集成或独立GPU。
## 配置
人脸识别默认禁用必须在UI界面或配置文件中启用后才能使用。人脸识别是全局配置设置。
```yaml
face_recognition:
enabled: true
```
## 高级配置
可通过以下可选参数微调人脸识别:
### 检测
- `detection_threshold`: 运行识别前所需的人脸检测置信度分数:
- 默认值: `0.7`
- 注意: 此字段仅适用于独立的人脸检测模型,对于内置人脸检测的模型应使用`min_score`进行过滤。
- `min_area`: 定义运行识别前人脸的最小尺寸(以像素为单位)。
- 默认值: `500`像素。
- 根据摄像头`detect`流的分辨率,可以增加此值以忽略过小或过远的人脸。
### 识别
- `model_size`: 使用的模型大小,可选`small`或`large`
- `unknown_score`: 将人员标记为潜在匹配的最低分数,低于此分数的匹配将被标记为未知。
- 默认值: `0.8`
- `recognition_threshold`: 将人脸添加为对象子标签所需的识别置信度分数。
- 默认值: `0.9`
- `save_attempts`: 保存用于训练的已识别人脸图像数量。
- 默认值: `100`
- `blur_confidence_filter`: 启用计算人脸模糊程度并据此调整置信度的过滤器。
- 默认值: `True`
## 创建完备的训练集
人脸识别所需的足够训练集图像数量取决于多个因素:
- 数据集的多样性:包含光照、姿态和面部表情变化的多样化数据集,每个人所需的图像数量会比多样性较低的数据集少。
- 期望的准确性:期望的准确性越高,通常需要的图像越多。
以下是一些通用指导原则:
- 最低要求对于基本人脸识别任务通常建议每人至少5-10张图像。
- 推荐对于更健壮和准确的系统每人20-30张图像是一个良好的起点。
- 理想情况为了获得最佳性能特别是在具有挑战性的条件下每人50-100张图像会更有益。
人脸识别的准确性很大程度上取决于训练数据的质量。建议分阶段构建人脸训练库。
:::tip
选择包含在人脸训练集中的图像时,建议始终遵循以下建议:
- 如果难以辨认人物面部的细节,则对训练没有帮助。
- 避免曝光过度/不足的图像。
- 避免模糊/像素化的图像。
- 避免使用红外线(灰度)图像进行训练。模型是在彩色图像上训练的,能够从灰度图像中提取特征。
- 使用戴帽子/太阳镜的人物图像可能会混淆模型。
- 不要一次性上传过多相似的图像建议每人训练不超过4-6张相似图像以避免过拟合。
:::
### 第一步 - 建立坚实基础
首次启用人脸识别时建立高质量的图像基础非常重要。建议首先为每个人上传1-5张"肖像"照片。确保照片中人物的面部是正面的,没有侧转,这将提供一个良好的起点。
然后建议使用Frigate中的`Face Library`选项卡,在检测到每个人时选择和训练图像。在建立坚实基础时,强烈建议仅训练正面图像。忽略从识别侧面人脸的摄像头获取的图像。
目标是平衡图像质量的同时,也要包含各种条件(白天/夜晚、不同天气、不同时间段等)的图像,以确保每个人的训练图像具有多样性,避免过拟合。
当一个人物在正面图像上能够被持续正确识别时,就可以进入下一步。
### 第二步 - 扩展数据集
当正面图像的识别表现良好后,开始选择稍微有角度的图像进行训练。重要的是仍然选择那些能看到足够面部细节以识别某人的图像。
## 常见问题
### 为什么不能批量上传照片?
有方法地添加照片到库中非常重要,批量导入照片(特别是来自普通照片库)会导致特定场景下的过拟合,降低识别性能。
### 为什么不能批量重新处理人脸?
人脸嵌入模型的工作原理是将人脸分解为不同的特征。这意味着当重新处理图像时,只有角度相似的图像才会影响其分数。
### 为什么未知人员的分数与已知人员相似?
这可能由几个不同原因引起,但通常表明训练集需要改进。这通常与过拟合有关:
- 如果每个人只训练少量图像,特别是这些图像非常相似时,识别模型会过度专门化于这些特定图像。
- 当提供不同姿态、光照和表情的图像时,算法会提取这些变化中一致的特征。
- 通过在多样化的图像集上训练,算法对输入图像中的微小变化和噪声变得不那么敏感。
### 在训练选项卡中看到分数超过阈值,但没有分配子标签?
Frigate会考虑每个人物对象的所有识别尝试的分数。分数会根据人脸区域持续加权只有当一个人物被持续自信地识别时才会为其分配子标签。这避免了单次高置信度识别影响结果的情况。
### 可以同时使用其他人脸识别软件(如DoubleTake)和内置的人脸识别吗?
不可以使用其他人脸识别服务会干扰Frigate内置的人脸识别。当使用double-take时如果还希望使用内置的人脸识别功能必须禁用sub_label功能。
### 人脸识别会在录制流上运行吗?
人脸识别不会在录制流上运行,这有很多不利原因:
1. 访问录制的延迟意味着通知中不会包含已识别人员的姓名,因为识别要到之后才能完成。
2. 使用的嵌入模型在固定图像尺寸上运行,因此较大的图像会被缩小以匹配。
3. 运动清晰度比额外像素重要得多,过度压缩和运动模糊对结果的影响比分辨率更大。
### 直接用iPhone拍照时出现未知错误
默认情况下iOS设备会使用HEIC(高效图像容器)格式存储图像,但此格式不支持上传。选择`large`格式而非`original`将使用JPG格式这样可以正常工作。