使用 Azure 媒体分析进行面部修订

媒体服务徽标


警告

请在 2024 年 2 月 29 日之前将 Azure 媒体服务 REST API 和 SDK 更新到 v3。 版本 3 的 Azure 媒体服务 REST API 与适用于 .NET 和 Java 的客户端 SDK 提供了比版本 2 更多的功能。 我们即将停用版本 2 的 Azure 媒体服务 REST API 与适用于 .NET 和 Java 的客户端 SDK。

必需的操作:若要最大程度地减少工作负载的中断,请参阅迁移指南,在 2024 年 2 月 29 日之前将代码从版本 2 的 API 和 SDK 转换为版本 3 的 API 和 SDK。 2024 年 2 月 29 日之后,Azure 媒体服务将不再接受来自版本 2 REST API、ARM 帐户管理 API 版本 2015-10-01 或版本 2 的 .NET 客户端 SDK 的流量。这其中包括可以调用版本 2 API 的任何第三方开源客户端 SDK。从媒体服务 v3 概述开始了解最新版本。

概述

Azure 媒体修订器是一种 Azure 媒体分析媒体处理器 (MP),可用于在云中进行可缩放的面部修订。 使用面部修订,可对视频进行修改,使所选个人的面部模糊显示。 用户可能想要在公共安全和新闻媒体场景中使用面部修订服务。 对于时长仅几分钟但包含多张面孔的镜头,进行手动面部修订可能需要几个小时,但使用此服务仅需几个简单步骤即可完成该过程。

本文提供有关 Azure 媒体编修器的详细信息,并演示如何通过适用于 .NET 的媒体服务 SDK 使用它。

面部修订模式

面部修订的工作方式是:检测每一帧视频中的面部,并跟踪之前和之后的面部对象,以便同一个人在其他角度也模糊显示。 自动编修过程很复杂,并且无法始终生成 100% 符合要求的输出,因此,媒体分析提供了几种修改最终输出的方式。

除了完全自动模式外,还可使用双步工作流通过 ID 列表选择/取消选择找到的面部。 此外,为了对每一帧进行任意调整,MP 使用 JSON 格式的元数据文件。 此工作流拆分为“分析”和“修订”模式。 可将这两个模式组合为在一个作业中运行两项任务的单个过程;此模式称为“组合”

组合模式

这会自动生成经过编修的 mp4,而无需任何手动输入。

阶段 文件名 说明
输入资产 foo.bar WMV、MOV 或 MP4 格式的视频
输入配置 作业配置预设 {'version':'1.0', 'options': {'mode':'combined'}}
输出资产 foo_redacted.mp4 进行了模糊处理的视频

分析模式

双步工作流的分析步骤使用视频输入,并生成表示面部位置的 JSON 文件,以及显示每个检测到的面部 jpg 图像。

阶段 文件名 说明
输入资产 foo.bar WMV、MPV 或 MP4 格式的视频
输入配置 作业配置预设 {'version':'1.0', 'options': {'mode':'analyze'}}
输出资产 foo_annotations.json JSON 格式的面部位置批注数据。 用户可编辑此数据,以修改模糊边界框。 请查看以下示例。
输出资产 foo_thumb%06d.jpg [foo_thumb000001.jpg, foo_thumb000002.jpg] 裁剪后的 jpg 文件,显示每个检测到的面部,其中的数字指示面部的标签 ID

输出示例

{
  "version": 1,
  "timescale": 24000,
  "offset": 0,
  "framerate": 23.976,
  "width": 1280,
  "height": 720,
  "fragments": [
    {
      "start": 0,
      "duration": 48048,
      "interval": 1001,
      "events": [
        [],
        [],
        [],
        [],
        [],
        [],
        [],
        [],
        [],
        [],
        [],
        [],
        [],
        [
          {
            "index": 13,
            "id": 1138,
            "x": 0.29537,
            "y": -0.18987,
            "width": 0.36239,
            "height": 0.80335
          },
          {
            "index": 13,
            "id": 2028,
            "x": 0.60427,
            "y": 0.16098,
            "width": 0.26958,
            "height": 0.57943
          }
        ],

    ... truncated

修订模式

工作流的第二步使用更大数量的输入,这些输入必须合并为单个资产。

这包括要模糊处理的 ID 的列表、原始视频和批注 JSON。 此模式使用批注来对输入视频进行模糊处理。

“分析”步骤的输出不包括原始视频。 需要将该视频上传到“修订”模式任务的输入资产中,并将其选作主文件。

阶段 文件名 说明
输入资产 foo.bar WMV、MPV 或 MP4 格式的视频。 与步骤 1 中相同的视频。
输入资产 foo_annotations.json 第一阶段中的批注元数据文件,包含可选的修改。
输入资产 foo_IDList.txt(可选) 要进行修订的可选面部 ID 列表,以新行进行分隔。 如果留空,则模糊所有面部。
输入配置 作业配置预设 {'version':'1.0', 'options': {'mode':'redact'}}
输出资产 foo_redacted.mp4 基于批注进行了模糊处理的视频

示例输出

这是来自选择了一个 ID 的 ID 列表的输出。

示例 foo_IDList.txt

1
2
3

模糊类型

在“组合”或“修订”模式下,可通过 JSON 输入配置在 5 种不同的模糊模式中选择:“低”、“中”、“高”、“框”和“黑色”。 默认情况下使用“中”

可以查找以下模糊类型的示例。

示例 JSON

{
    'version':'1.0',
    'options': {
        'Mode': 'Combined',
        'BlurType': 'High'
    }
}

低

中

高

Box

Box

黑色

黑色

输出 JSON 文件中的元素

修订 MP 提供高精确度的面部位置检测和跟踪功能,可在一个视频帧中检测到最多 64 张人脸。 正面的面部可提供最佳效果,而检测和跟踪侧面的面部和较小的面部(小于或等于 24x24 像素)可能具有一定难度。

作业将生成一个 JSON 输出文件,其中包含有关检测到的和跟踪的面部的元数据。 元数据包括指示面部位置的坐标,以及指示正在跟踪该人员的面部 ID 编号。 在正面面部长时间于帧中消失或重叠的情况下,面部 ID 编号很容易重置,导致某些人员被分配多个 ID。

输出 JSON 包含以下元素:

根 JSON 元素

元素 说明
版本 这是指视频 API 的版本。
时间刻度 视频每秒的“刻度”数。
offset 这是时间戳的时间偏移量。 在版本 1.0 的视频 API 中,此属性始终为 0。 在我们将来支持的方案中,此值可能会更改。
宽度、高度 输出视频帧的宽度和高度,以像素为单位。
帧速率 视频的每秒帧数。

片段 JSON 元素

元素 说明
start 第一个事件的开始时间(以“刻度”为单位)。
duration 片段的长度,以“时钟周期”为单位。
索引 (仅适用于 Azure 媒体编修器)定义当前事件的帧索引。
interval 片段中每个事件条目的间隔(以“时钟周期”为单位)。
活动 每个事件包含在该持续时间内检测到并跟踪的面部。 它是事件的数组。 外部数组代表一个时间间隔。 内部数组包含在该时间点发生的 0 个或多个事件。 空括号 [] 代表没有检测到人脸。
ID 正在跟踪的面部的 ID。 如果某个面部后来未被检测到,此编号可能会意外更改。 给定人员在整个视频中应该拥有相同的 ID,但由于检测算法的限制(例如受到阻挡等情况),我们无法保证这一点。
x, y 规范化 0.0 到 1.0 比例中面部边框左上角的 X 和 Y 坐标。
-X 和 Y 坐标总是相对于横向方向,因此如果视频是纵向(或使用 iOS 时上下颠倒),便需要相应地变换坐标。
宽度、高度 规范化 0.0 到 1.0 比例中面部边框的宽度和高度。
facesDetected 位于 JSON 结果的末尾,汇总在生成视频期间算法所检测到的面部数。 由于 ID 可能在面部无法检测时(例如面部离开屏幕、转向别处)意外重置,此数字并不一定与视频中的实际面部数相同。