> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# 活体检测警告与错误代码

> Didit 活体检测模块发出的全部警告，涵盖人脸攻击、低分与质量触发器、黑名单匹配和重复人脸，并说明每种警告的原因与补救措施。

## 概述

活体检测报告中的警告会标记 Didit 在执行活体检测期间观察到的每项情况。它们会记录在 `liveness_checks[]` 每个项目的 `warnings[]` 数组中（参见[活体检测报告](https://docs.didit.me/zh/core-technology/liveness/report-liveness.md)），且 `feature` 设置为 `"LIVENESS"`。每个条目均遵循通用的[警告对象](https://docs.didit.me/zh/reference/data-models.md#警告对象)结构：`feature`、`risk`、`additional_data`、`log_type`、`short_description`、`long_description`、`node_id`。

每个警告包含三个层级：

1. **`risk` 代码**：供您在代码中进行匹配的稳定标识符（如下列代码所示）。
2. **`log_type`**：`information`、`warning` 或 `error` 之一。自动拒绝风险始终为 `error`。对于可配置风险，它派生自配置的操作：**无操作** → `information`，**审核** → `warning`，**拒绝** → `error`。对于基于阈值的风险（`LOW_LIVENESS_SCORE`、`LOW_FACE_QUALITY`），当数值跨过拒绝阈值时为 `error`，仅跨过审核阈值时为 `warning`。
3. **决策影响**：相同的路由机制决定了活体检测报告的 `status`：审核操作将其变更为 `In Review`，拒绝操作（或任何自动拒绝风险）将其变更为 `Declined`，无操作则保持不变。

某些风险仅在活体检测方式为 `PASSIVE` 时触发（多张人脸、质量和亮度检查）。下表列出了完整的活体检测风险代码及其严重程度，不存在其他活体检测风险代码。

## 自动拒绝条件

以下风险始终会将活体检测报告（以及会话）强制置为 `Declined`，且 `log_type: "error"`：

| 风险 | 触发条件 |
| - | - |
| `NO_FACE_DETECTED` | 活体捕获期间未定位到人脸，或用户耗尽了重试次数。 |
| `LIVENESS_FACE_ATTACK` | 模型检测到呈现攻击（面具、屏幕重放、深度伪造类欺骗攻击）。 |
| `FACE_IN_BLOCKLIST` | 人脸与应用的人脸黑名单中的条目匹配。 |
| `AGE_BELOW_MINIMUM` | 估算年龄低于配置的最小值。仅在自适应年龄验证工作流和 `AGE_ESTIMATION` 节点中触发。 |
| `AGE_NOT_DETECTED` | 无法估算年龄。仅在禁用了身份证件验证回退的年龄估算流程中触发。 |

当触发 `NO_FACE_DETECTED` 时，`LOW_LIVENESS_SCORE` 会被抑制（因为没有可评分的人脸）。

## 可配置的验证设置

在 Didit 控制台中，活体检测风险归类在以下工作流设置下：

| 分组 | 风险 | 配置 |
| - | - | - |
| **活体检测评分阈值** | `LOW_LIVENESS_SCORE` | 对 `score` 的审核阈值 + 拒绝阈值。等于或低于审核阈值 → `In Review`；等于或低于拒绝阈值 → `Declined`。 |
| **重复人脸操作** | `DUPLICATED_FACE`、`POSSIBLE_DUPLICATED_FACE` | 一项共享设置：无操作（默认）/ 审核 / 拒绝。当匹配的人脸位于您的人脸白名单中时完全跳过。 |
| **重复人脸身份不匹配** | `DUPLICATED_FACE_NAME_MISMATCH` | 独立设置（`face_liveness_duplicated_face_name_mismatch_action`）：无操作 / 审核（默认）/ 拒绝。仅在同时触发 `DUPLICATED_FACE` 时评估（详见下文）。 |
| **活体攻击人脸比对** | `FACE_MATCHES_LIVENESS_ATTACK` | 独立设置（`face_liveness_attack_face_match_action`）：无操作（默认）/ 审核。此处设置的“拒绝”虽被接受但会作为“审核”执行。亦可用于年龄估算节点。 |
| **疑似黑名单人脸** | `POSSIBLE_FACE_IN_BLOCKLIST` | 在工作流中不可配置，始终路由至审核（`log_type: "warning"`）。 |
| **多张人脸操作** *(仅限被动)* | `MULTIPLE_FACES_DETECTED` | 无操作（默认）/ 审核 / 拒绝。 |
| **人脸质量阈值** *(仅限被动)* | `LOW_FACE_QUALITY` | 审核阈值（默认 15）+ 拒绝阈值（默认 0，即禁用拒绝）。 |
| **面部亮度** *(仅限被动)* | `LOW_FACE_LUMINANCE`、`HIGH_FACE_LUMINANCE` | 最低/最高阈值（在 0–100 归一化刻度上默认为 20 / 80）+ 每个方向分别设置操作（默认审核）。 |
| **年龄阈值** *(自适应工作流 / `AGE_ESTIMATION` 节点)* | `AGE_BELOW_MINIMUM`、`AGE_NOT_DETECTED` | 最低与临界年龄阈值；两种风险均会自动拒绝活体检测步骤。若启用了身份证件验证回退，工作流会将用户路由至证件核查，而不是结束会话。 |

## 生成的警告

### 核心活体检测

| 风险 | 原因 | 严重程度 | 是否影响状态 | 处置建议 |
| - | - | - | - | - |
| `NO_FACE_DETECTED` | 采集过程中未检测到人脸，或用户已用尽重试次数（`MAX_ATTEMPTS_REACHED`）。 | `error` | **自动拒绝** | 在光线更充足的环境下重新采集；确保人脸居中。 |
| `LIVENESS_FACE_ATTACK` | 模型检测到呈现攻击。 | `error` | **自动拒绝** | 视为欺诈处理。会话将被自动拒绝。 |
| `LOW_LIVENESS_SCORE` | `score` 处于或低于工作流的审核阈值。当同时存在 `NO_FACE_DETECTED` 时会被隐藏。 | `warning`；当分数处于或低于拒绝阈值时升级为 `error` | 可配置（审核 / 拒绝阈值） | 重新采集；如果发现误报，请调整阈值。 |

### 采集通道完整性

客户端在采集时报告的注入攻击信号。与呈现攻击（在真实摄像头前放置伪造物）不同，这些信号描述的是摄像头视频流本身被替换或拦截的情况。

每项均可在工作流中单独配置，且默认为**无操作**，因此启用该功能后，在您主动配置之前不会改变任何决策。

| 风险 | 原因 | 配置键 | 默认值 |
| - | - | - | - |
| `VIRTUAL_CAMERA_DETECTED` | 采集设备被识别为软件虚拟摄像头（OBS、ManyCam、Snap Camera、DroidCam 等），而非物理摄像头。 | `virtual_camera_action` | `NO_ACTION` |
| `EXTERNAL_CAPTURE_DEVICE_DETECTED` | 采集设备为外部摄像头或采集卡，而非内置摄像头。 | `external_capture_device_action` | `NO_ACTION` |
| `FRAME_INJECTION_SUSPECTED` | 采集的帧显示出软件合成或注入到摄像头管道中的迹象，而非真实的实时采集，**或**采集是在模拟或虚拟化硬件（Android 模拟器或桌面虚拟机）上进行的，此类环境中不存在物理摄像头传感器，所有帧均由宿主机提供。 | `frame_injection_action` | `NO_ACTION` |
| `INJECTION_ATTACK_DETECTED` | 采集内容系注入而非通过设备自带摄像头采集：软件虚拟摄像头、由页面或浏览器自动化生成的摄像头画面、被挂钩的摄像头，或附加到应用的插桩工具。`additional_data.reasons` 仅列出能够证实这一点的具体原因。真实用户可能产生的信号绝不会触发该风险。在活体检测与人脸比对中，它遵循 `frame_injection_action`，因此自拍照决策不会改变。 | `frame_injection_action` | `NO_ACTION` |
| `SCREEN_CAPTURE_DURING_CAPTURE` | 在生物识别采集期间，设备上存在处于活动状态的屏幕录制或屏幕共享。 | `screen_capture_action` | `NO_ACTION` |

> [!NOTE]
>
> 浏览器不会向任何供应商公开操作系统级别的摄像头源证明，因此在 Web 端，这些信号属于辅助佐证而非确凿证据。在 Web 端，结论为 `null` 意味着**未确定**（在授予摄像头权限之前设备标签不可用），且绝不会触发风险。

虚拟摄像头是通过其设备名称进行识别的，因此操作系统以普通名称呈现的摄像头不会通过该方式被识别。在 Android 模拟器中，重映射的摄像头与任何内置摄像头的标记方式完全相同，这就是模拟硬件情况改由 `FRAME_INJECTION_SUSPECTED` 报告的原因：它是通过设备环境（即渲染栈和 User-Agent 中报告的设备型号）来检测的，而非依赖摄像头名称。从设备环境中发现的结果会带有 `additional_data.reason: "emulated_capture_device"`，以此与活体模型自身的帧分析结果区分开来。

> [!NOTE]
>
> 从浏览器检测设备环境属于辅助证据，而非确凿证明，坚决的攻击者可以对其进行干扰。原生移动端 SDK 能够报告浏览器无法感知的更强、更底层的操作系统级完整性信号（模拟器、已 Root 或越狱设备、运行时挂钩、附加调试器），在[设备与运行时完整性](https://docs.didit.me/zh/core-technology/ip-analysis/warnings-ip-analysis.md#设备与运行时完整性)下均有各自的可配置操作。这些信号显著提高了攻击者的成本，但仅凭它们自身并不能证明采集来自真实设备。设备完整性信号独立于活体检测方法，因此可与 Passive、3D Flash 或 3D Action & Flash 中的任意一种结合使用。

### 录制完整性取证

`LIVENESS_VIDEO_ANOMALY` 是**在服务端对存储的活体录像进行计算**的，独立于活体模型。它会检测在多个周期中重复出现的运动序列，这与循环播放的视频流特征相符。

| 风险 | 原因 | 配置键 | 默认值 |
| - | - | - | - |
| `LIVENESS_VIDEO_ANOMALY` | 录像中包含重复的运动序列。单纯的摄像头卡顿、重复静止帧、暗屏开场和帧传输缓慢不会触发该信号。 | `face_liveness_video_anomaly_action` | `NO_ACTION` |

请在您的活体检测或年龄估算节点上设置对应操作：`NO_ACTION` 会记录一条信息性发现，`REVIEW` 可将已得出决策的验证升级为审核中，而 `DECLINE` 可将其升级为已拒绝。该项检查为异步运行，因此升级结果可能会在初始结果之后产生。已有更严重的决策不会被降级，人工审核决策也会予以保留。

第 2 版的发现包含 `forensics_version: 2`、`repeated_sequence` 证据以及 `anomaly_reasons` 中的 `repeated_moving_sequence`。传输指标（如 `unique_frame_ratio`、`static_pair_ratio`、`decoded_fps_ratio` 和 `max_frame_gap_seconds`）仍仅作为诊断数据；它们本身不能作为重放攻击的确凿依据。较早的发现记录了当时使用的检测器版本，不会进行追溯性重新分类。

> [!NOTE]
>
> 这是一项保守的附加信号，并非对合成媒体或注入视频的完备检测。没有异常的录像并不能作为活体的充分证明。较短或模糊的采集，以及缺乏可用重放证据的采集，均不会被此项检查标记。缺失或无法读取的录像不会生成此项检查的发现；其他验证检查仍然适用。

### 跨会话人脸匹配

| 风险 | 原因 | 附加数据 | 严重程度 |
| - | - | - | - |
| `FACE_IN_BLOCKLIST` | 人脸与黑名单中的人脸匹配。 | `blocklisted_session_id`, `blocklisted_session_number`, `api_service` | `error` — **自动拒绝** |
| `POSSIBLE_FACE_IN_BLOCKLIST` | 人脸在较低置信度区间内与黑名单人脸匹配。 | `blocklisted_session_id`, `blocklisted_session_number`, `api_service` | `warning` — 在工作流中始终转入人工审核 |
| `FACE_IN_ALLOWLIST` | 人脸与白名单中的人脸匹配。 | `allowlisted_session_id`, `allowlisted_session_number`, `api_service` | `information` — 跳过重复人脸操作 |
| `POSSIBLE_FACE_IN_ALLOWLIST` | 人脸在较低置信度区间内与白名单人脸匹配。 | `allowlisted_session_id`, `allowlisted_session_number`, `api_service` | `information` — 跳过疑似重复人脸操作 |
| `DUPLICATED_FACE` | 人脸与另一用户已通过的人脸匹配（具有不同 `vendor_data` 的 `Approved` 会话，或导入到您的某一服务商用户下的人脸）。 | `duplicated_session_id`, `duplicated_session_number`, `api_service` | 可配置 — 默认为 `information` |
| `POSSIBLE_DUPLICATED_FACE` | 人脸在较低置信度区间内与另一张已通过或已导入的人脸匹配。 | `duplicated_session_id`, `duplicated_session_number`, `api_service` | 可配置 — 默认为 `information` |
| `DUPLICATED_FACE_NAME_MISMATCH` | 当匹配会话的身份与当前会话解析出的姓名（身份证件、`expected_details` 或关联的服务商用户）不匹配时，与 `DUPLICATED_FACE` 一同产生，使用与身份证件验证相同的姓名匹配评分和阈值。在不同姓名下重复使用的人脸比单纯的重复人脸更具欺诈嫌疑，因此拥有独立的可配置操作。 | `duplicated_session_id`, `duplicated_session_number`, `api_service`, `name_match_score` | 可配置 — 默认为 `warning`。绝不会放宽 `DUPLICATED_FACE` 自身配置的结果，只会将其升级。 |
| `DUPLICATED_FACE_DOCUMENT_MISMATCH` | 当匹配用户的身份证件所显示的出生日期与当前会话的证件不同时，与 `DUPLICATED_FACE` 一同产生。同一人出示不同证件（例如持身份证后再出示护照）或更换新证件不会被标记；来自同一国家/地区且共享相同证件号码的两个会话绝不会被标记。 | `duplicated_session_id`, `duplicated_session_number`, `api_service`, `mismatch_dimensions` | 可配置（`face_liveness_duplicated_face_document_mismatch_action`）- 默认为 `Review`。绝不会放宽 `DUPLICATED_FACE` 自身配置的结果，只会将其升级。 |
| `FACE_MATCHES_LIVENESS_ATTACK` | 人脸与该应用先前某一其他用户会话中的人脸匹配，且该会话自身的活体采集以高置信度被判定为攻击。此项供审核参考，并非直接证实存在攻击。 | `liveness_attack_session_id`, `liveness_attack_session_number`, `similarity_percentage`, `liveness_attack_sessions_count` | 可配置 - 默认为 `information`（无操作） |

对于与导入人脸或名单条目人脸（没有对应会话）的匹配，`additional_data` 中的 `*_session_id`、`*_session_number` 和 `api_service` 值为 `null`。

属于同一用户的人脸（相同的 `vendor_data`，或在可用时为相同的服务商用户）将从**整个**索引搜索中排除 — 包括重复检测和黑名单筛查。匹配优先级为：黑名单精确 → 白名单精确 → 重复精确 → 黑名单疑似 → 白名单疑似 → 重复疑似 — 这六个互斥代码中每次报告仅会出现一个。`DUPLICATED_FACE_NAME_MISMATCH` 不属于该优先级组：它是当身份检查同时未通过时，在 `DUPLICATED_FACE` **之上**额外产生的代码，绝不会替代它。`additional_data.name_match_score` 绝不会包含被比对的姓名 — 仅包含 ID 和分数，因此警告 payload 中不会出现个人身份信息（PII）。

在每份证件上使用不同文字系统书写的姓名（例如一份证件使用希伯来文，另一份使用拉丁文字），即使两个会话属于同一个人，得分也可能低于阈值。在这种特定情况下，当两个会话的身份证件在以下所有方面能够相互佐证时，将不会产生 `DUPLICATED_FACE_NAME_MISMATCH`：

* 两份证件带有相同的签发国/地区。
* 两份证件之间的标识符完全匹配。`document_number` 和 `personal_number` 可视为等效，因为根据证件类型不同，同一个国民号码可能位于任一字段中。
* 若两份证件均载有出生日期，则该日期相同。

如果姓名使用相同的文字系统、标识符或签发国/地区不同或缺失，或者出生日期相互矛盾，则仍会如上文所述产生该警告。

### 被动活体检测质量（仅在 `method = "PASSIVE"` 时）

| 风险 | 原因 | 严重程度 | 补救措施 |
| - | - | - | - |
| `MULTIPLE_FACES_DETECTED` | 采集过程中可见多张人脸。系统始终使用最大的人脸进行评分和匹配。 | 可配置 — 默认为 `information` | 单人重新采集。 |
| `LOW_FACE_QUALITY` | 人脸质量低于审核阈值（默认 15）。 | `warning`；低于拒绝阈值（默认 0 — 拒绝已禁用）时为 `error` | 改善对焦/减少遮挡/人脸居中。 |
| `LOW_FACE_LUMINANCE` | 归一化亮度低于最低阈值（默认 20）。 | 可配置 — 默认为 `warning`（操作默认为人工审核） | 改善光线。 |
| `HIGH_FACE_LUMINANCE` | 归一化亮度高于最高阈值（默认 80）。 | 可配置 — 默认为 `warning`（操作默认为人工审核） | 减少光照；避免背光。 |

`LOW_FACE_LUMINANCE` 与 `HIGH_FACE_LUMINANCE` 互斥 — 亮度要么低于最低值，要么高于最高值，绝不会同时出现。

### 年龄估算（自适应工作流和 `AGE_ESTIMATION` 节点）

| 风险 | 原因 | 严重程度 | 补救措施 |
| - | - | - | - |
| `AGE_BELOW_MINIMUM` | 估算年龄低于配置的最小值（或启用身份证件验证回退时的临界阈值）。 | `error` | 在配置了回退的情况下，工作流将回退到身份证件验证。 |
| `AGE_NOT_DETECTED` | 无法估算年龄且身份证件验证回退已禁用。 | `error` | 启用回退或重新采集。 |

## 精确描述字符串

API 会针对每项风险返回以下完全一致的 `short_description` 和 `long_description` 字符串：

| `risk` | `short_description` | `long_description` |
| - | - | - |
| `NO_FACE_DETECTED` | 活体检测中未检测到人脸 | 系统在活体检测期间无法识别人脸，这可能是由于图像质量差、摆放位置不当或技术问题导致的。 |
| `LIVENESS_FACE_ATTACK` | 活体人脸攻击 | 系统检测到绕过活体检测的潜在尝试。 |
| `LOW_LIVENESS_SCORE` | 活体检测分数低 | 活体检测得分较低，表明可能使用了非活体人脸呈现或低质量的生物特征数据。 |
| `LIVENESS_VIDEO_ANOMALY` | 活体视频流异常 | 录制的活体视频包含与循环播放源一致的重复移动序列。仅凭摄像头卡顿、重复静止帧和慢帧传输不会触发此信号。这是一项独立的录制检查，并非对采集是否为真人的完整评估。 |
| `FACE_IN_BLOCKLIST` | 人脸位于黑名单中 | 系统在黑名单中识别出该人脸，这意味着不允许验证该人脸。 |
| `POSSIBLE_FACE_IN_BLOCKLIST` | 疑似人脸位于黑名单中 | 系统在黑名单中识别出疑似匹配的人脸，这意味着不允许验证该人脸。 |
| `FACE_IN_ALLOWLIST` | 人脸位于白名单中 | 该人脸与应用的人脸白名单匹配，因此已对此信号跳过重复人脸操作。 |
| `POSSIBLE_FACE_IN_ALLOWLIST` | 疑似人脸位于白名单中 | 该人脸可能与应用的人脸白名单匹配，因此已对此信号跳过疑似重复人脸操作。 |
| `DUPLICATED_FACE` | 来自其他已通过会话的重复人脸 | 系统识别出与另一个已通过会话重复的人脸，需要进一步调查。 |
| `POSSIBLE_DUPLICATED_FACE` | 疑似来自其他已通过会话的重复人脸 | 系统识别出疑似与另一个已通过会话重复的人脸，需要进一步调查。 |
| `DUPLICATED_FACE_NAME_MISMATCH` | 不同姓名下的重复人脸 | 同一人脸已在另一个会话中通过，但使用的是不同姓名。该重复人脸背后的身份与本次会话声明的身份不符，这是身份欺诈的强烈迹象。 |
| `FACE_MATCHES_LIVENESS_ATTACK` | 人脸与活体攻击匹配 | 此活体采集中的人脸与该应用先前会话中的人脸相匹配，且活体检测引擎在另一用户的会话中以高置信度判定该人脸的采集为攻击。真实用户也可能被误拒，因此这是供审核的信号，并非攻击的确凿证据。 |
| `MULTIPLE_FACES_DETECTED` | 检测到多张人脸 | 在活体图像中检测到多张人脸。系统使用最大的人脸进行活体验证和人脸比对，但检测到多张人脸可能需要额外审核。 |
| `LOW_FACE_QUALITY` | 人脸质量低 | 人脸图像质量低于可接受的阈值，这可能会影响活体检测的可靠性。这可能是由于摄像头分辨率、对焦或压缩失真引起的。 |
| `LOW_FACE_LUMINANCE` | 人脸亮度低 | 人脸图像过暗，这可能会影响活体检测的准确性。建议改善光照条件。 |
| `HIGH_FACE_LUMINANCE` | 人脸亮度高 | 人脸图像过亮或曝光过度，这可能会影响活体检测的准确性。建议调暗光线或避免直射光。 |
| `AGE_BELOW_MINIMUM` | 年龄低于最小值 | 人脸的年龄低于该应用的最低年龄阈值。 |
| `AGE_NOT_DETECTED` | 未检测到年龄 | 系统无法识别该人脸的年龄，而这对于证件验证是必需的。 |

## 独立被动活体检测 API

独立 [活体检测 API](https://docs.didit.me/zh/standalone-apis/passive-liveness.md) 复用了相同的风险代码，但存在一些行为差异：

* `NO_FACE_DETECTED` 和 `LOW_LIVENESS_SCORE` 互斥，仅在检测到人脸时才会运行分数检查。`LOW_LIVENESS_SCORE` 会针对请求中的 `face_liveness_score_decline_threshold`（默认值为 30）触发，并且始终带有 `log_type: "error"`。
* `POSSIBLE_FACE_IN_BLOCKLIST` 会被视为拒绝（`log_type: "error"`），而不是人工审核。
* `MULTIPLE_FACES_DETECTED` 带有 `log_type: "warning"`，而重复人脸风险则保持为信息提示级别。只有 `error` 级别的警告才会将独立响应的 `status` 变为 `Declined`。
* 独立警告条目包含 `feature`，但不包含 `node_id`。

## 示例

### 检测到攻击时自动拒绝

```json theme={null}
"warnings": [
  {
    "feature": "LIVENESS",
    "risk": "LIVENESS_FACE_ATTACK",
    "additional_data": null,
    "log_type": "error",
    "short_description": "Liveness Face Attack",
    "long_description": "The system detected a potential attempt to bypass the liveness check.",
    "node_id": "liveness_primary"
  }
]
```

### 被动采集上的可配置警告

```json theme={null}
"warnings": [
  {
    "feature": "LIVENESS",
    "risk": "LOW_FACE_QUALITY",
    "additional_data": null,
    "log_type": "warning",
    "short_description": "Low face quality",
    "long_description": "The facial image quality is below the acceptable threshold, which may affect the reliability of liveness detection. This could be due to camera resolution, focus, or compression artifacts.",
    "node_id": "liveness_primary"
  },
  {
    "feature": "LIVENESS",
    "risk": "LOW_FACE_LUMINANCE",
    "additional_data": null,
    "log_type": "warning",
    "short_description": "Low face luminance",
    "long_description": "The facial image is too dark, which may affect the accuracy of liveness detection. Better lighting conditions are recommended.",
    "node_id": "liveness_primary"
  },
  {
    "feature": "LIVENESS",
    "risk": "MULTIPLE_FACES_DETECTED",
    "additional_data": null,
    "log_type": "information",
    "short_description": "Multiple faces detected",
    "long_description": "Multiple faces were detected in the liveness image. The system uses the largest face for liveness verification and face comparison, but the presence of multiple faces may require additional review.",
    "node_id": "liveness_primary"
  }
]
```

### 包含 payload 的重复人脸

```json theme={null}
"warnings": [
  {
    "feature": "LIVENESS",
    "risk": "DUPLICATED_FACE",
    "additional_data": {
      "duplicated_session_id": "8d2f1c4e-6b7a-4c8d-9e0f-1a2b3c4d5e6f",
      "duplicated_session_number": 123,
      "api_service": null
    },
    "log_type": "warning",
    "short_description": "Duplicated face from other approved session",
    "long_description": "The system identified a duplicated face from another approved session, requiring further investigation.",
    "node_id": "liveness_primary"
  }
]
```

在此处，重复人脸操作设置为审核（Review），因此该警告包含 `log_type: "warning"`，且活体检测报告的状态为 `In Review`。若使用默认设置（无操作），它将改为包含 `log_type: "information"`。`api_service` 为 `null`，因为匹配到的人脸来自工作流会话，而非独立的 API 调用。

### 不同姓名下的重复人脸

```json theme={null}
"warnings": [
  {
    "feature": "LIVENESS",
    "risk": "DUPLICATED_FACE",
    "additional_data": {
      "duplicated_session_id": "8d2f1c4e-6b7a-4c8d-9e0f-1a2b3c4d5e6f",
      "duplicated_session_number": 123,
      "api_service": null
    },
    "log_type": "information",
    "short_description": "Duplicated face from other approved session",
    "long_description": "The system identified a duplicated face from another approved session, requiring further investigation.",
    "node_id": "liveness_primary"
  },
  {
    "feature": "LIVENESS",
    "risk": "DUPLICATED_FACE_NAME_MISMATCH",
    "additional_data": {
      "duplicated_session_id": "8d2f1c4e-6b7a-4c8d-9e0f-1a2b3c4d5e6f",
      "duplicated_session_number": 123,
      "api_service": null,
      "name_match_score": 42.5
    },
    "log_type": "warning",
    "short_description": "Duplicated face under a different name",
    "long_description": "The same face was already approved on another session, but under a different name. The identity behind the duplicate does not match the identity declared on this session, which is a strong indicator of identity fraud.",
    "node_id": "liveness_primary"
  }
]
```

`DUPLICATED_FACE` 保持其自身配置的操作（此处为无操作 - `log_type: "information"`），而 `DUPLICATED_FACE_NAME_MISMATCH` 则使用其自身的操作，默认设为审核（`log_type: "warning"`）。活体检测报告的状态取决于两者中更严重的一个：此处为 `In Review`，即使仅凭普通重复人脸设置本身并不会对其进行标记。

### 带有测量数据的录像完整性异常

```json theme={null}
"warnings": [
  {
    "feature": "LIVENESS",
    "risk": "LIVENESS_VIDEO_ANOMALY",
    "additional_data": {
      "forensics_version": 2,
      "duration_seconds": 6.0,
      "repeated_sequence": {
        "period_frames": 6,
        "cycles": 3,
        "matched_pairs": 12
      },
      "anomaly_reasons": ["repeated_moving_sequence"]
    },
    "log_type": "information",
    "short_description": "Liveness video stream anomaly",
    "long_description": "The recorded liveness video contains a repeated moving sequence consistent with a looped feed. Camera stalls, repeated still frames and slow frame delivery alone do not raise this signal. This is an independent recording check, not a complete assessment of whether the capture is live.",
    "node_id": "liveness_primary"
  }
]
```

此示例展示了包含动态序列三个副本的录像重放证据。`log_type` 为 `information`，因为配置的操作为 `NO_ACTION`。为简明起见从本示例中省略的帧投递诊断信息并未触发该检测结果。

## 警告类型

根据您的应用配置，系统会为每项风险分配一个严重程度级别。三种级别分别为：

## 相关内容

* [活体检测报告](https://docs.didit.me/zh/core-technology/liveness/report-liveness.md) - 完整的报告架构及状态。
* [人脸比对警告](https://docs.didit.me/zh/core-technology/face-match/warnings-face-match.md) - 配套的 1:1 人脸比对警告。
* [Webhook](https://docs.didit.me/zh/integration/webhooks.md) - 活体检测步骤完成后，`session.status.updated` 会立即携带这些警告。
* [数据模型 - 活体检测](https://docs.didit.me/zh/reference/data-models.md#活体检测) - 包含所有字段的规范架构。
* [数据模型 - 警告对象](https://docs.didit.me/zh/reference/data-models.md#警告对象) - `warnings[]` 中每个条目的结构。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.