Поделиться через


Распознавание лиц с помощью API индексатора видео Azure AI

Индексатор видео Azure AI можно использовать для обнаружения и идентификации лиц в видео. Чтобы изменить видео на размытие (редактировать) лица конкретных лиц, можно использовать API.

Несколько минут видеоматериала, содержащего несколько лиц, может занять несколько часов для удаления вручную, но использование настроек в API индексатора видео позволяет сократить процесс удаления лиц до нескольких простых шагов.

В этой статье показано, как анонимизировать лица с помощью API. API индексатора видео включает предустановку редактирования лиц, которая предлагает масштабируемое обнаружение и удаление лиц (размытие) в облаке. В статье подробно показаны все этапы скрытия лиц с использованием API.

В следующем видео показано, как отредактировать видео с помощью API индексатора видео Azure.

Соблюдение нормативных требований, конфиденциальность и безопасность

Как важное напоминание, вы должны соблюдать все применимые законы при использовании аналитики или аналитических данных, получаемых с помощью Video Indexer.

Доступ к службе распознавания лиц ограничен на основе критериев соответствия требованиям и использованию для поддержки принципов ответственного искусственного интеллекта Майкрософт. Служба распознавания лиц доступна только для управляемых корпорацией Майкрософт клиентов и партнеров. Используйте форму подачи заявки на распознавание лиц для получения доступа. Дополнительные сведения см. на странице с ограниченным доступом для лиц.

Терминология и иерархия редактирования лиц

Редактирование лиц в Индексаторе видео зависит от выходных данных существующих результатов обнаружения лиц индексатора видео, которые мы предоставляем в предустановках "Стандартный видео" и "Расширенный анализ".

Чтобы редактировать видео, необходимо сначала загрузить видео в Индексатор видео и завершить анализ с помощью стандартных или расширенных предустановок видео. Это можно сделать с помощью веб-сайта или API Индексатора видео Azure. Затем вы можете использовать API сокрытия лиц для ссылки на это видео, используя значение videoId. Мы создадим новое видео, в котором отредактированы указанные лица. Анализ видео и редактирование лиц являются отдельными оплачиваемыми заданиями. Дополнительные сведения см. на странице с ценами.

Типы размытия

Вы можете выбрать разные типы размытия при редактировании лиц. Чтобы выбрать тип, используйте имя или представительный номер параметра blurringKind в тексте запроса:

тип размытия числа размытое имяKind Пример
0 MediumBlur Фотография с индексатором видео Azure AI в средней степени размытия.
1 HighBlur Фотография индексатора видео Azure AI с высоким размытием.
2 LowBlur Фотография индексатора видео Azure AI с низким размытием.
3 BoundingBox Фотография ограничивающих прямоугольников индексатора видео Azure AI.
4 Чёрный Фотография черных ящиков индексатора видео Azure AI.

Тип размытия в тексте запроса можно указать с помощью blurringKind параметра.

Ниже приведен пример:

{
    "faces": {
        "blurringKind": "HighBlur"
    }
}

Или используйте число, представляющее тип размытия, как описано в предыдущей таблице:

{
    "faces": {
        "blurringKind": 1
    }
}

Фильтры

Можно применять фильтры, чтобы настроить, какие идентификаторы лиц будут размыты. Идентификаторы лиц можно указать в массиве, разделенном запятыми, в тексте JSON-файла. scope Параметр позволяет исключить или включить эти лица для редактирования. Указав идентификаторы, вы можете скрыть все лица, кроме тех, что вы указали, или скрыть только эти идентификаторы. Примеры см. в следующих разделах.

Исключить область

В следующем примере, чтобы скрыть все лица, кроме лиц с идентификаторами 1001 и 1016, используйте область Exclude:

{
    "faces": {
        "blurringKind": "HighBlur",
        "filter": {
            "ids": [1001, 1016],
            "scope": "Exclude"
        }
    }
}

Включить объём

В следующем примере, чтобы редактировать только идентификаторы лиц 1001 и 1016, используйте область Include.

{
    "faces": {
        "blurringKind": "HighBlur",
        "filter": {
            "ids": [1001, 1016],
            "scope": "Include"
        }
    }
}

Замажьте все лица

Чтобы замаскировать все лица, удалите фильтр области.

{
    "faces": {
        "blurringKind": "HighBlur",
    }
}

Чтобы получить идентификатор лица, можно перейти к индексированным видеофайлам и извлечь файл артефакта. Артефакт содержит файл faces.json и файл миниатюры .zip, который включает все лица, обнаруженные в видео. Вы можете сопоставить лицо с идентификатором и решить, какие идентификаторы лиц нужно скрыть.

Создание задачи редактирования

Чтобы создать задание редактирования, можно вызвать следующий вызов API:

POST https://api.videoindexer.ai/{location}/Accounts/{accountId}/Videos/{videoId}/redact[?name][&priority][&privacy][&externalId][&streamingPreset][&callbackUrl][&accessToken]

Требуются следующие значения:

Имя Ценность Описание
Accountid {accountId} Идентификатор учетной записи индексатора видео.
Location {location} Регион Azure, в котором находится учетная запись Индексатора видео. Например, westus.
AccessToken {token} Маркер, имеющий права участника учетной записи, созданный с помощью REST API Azure Resource Manager .
Videoid {videoId} Идентификатор исходного видео для редактирования. Вы можете получить идентификатор видео с помощью API перечисления видео .
Name {name} Имя нового, отредактированного видео.

Ниже приведен пример запроса:

https://api.videoindexer.ai/westeurope/Accounts/{id}/Videos/{id}/redact?priority=Low&name=testredaction&privacy=Private&streamingPreset=Default 

Маркер можно указать в качестве заголовка авторизации с типом значения ключа bearertoken:{token}, или указать его как параметр запроса, используя ?token={token}.

Кроме того, необходимо добавить тело запроса в формате JSON с параметрами задания редактирования для применения. Ниже приведен пример:

{
    "faces": {
        "blurringKind": "HighBlur"
    }
}

При успешном выполнении запроса вы получите ответ HTTP 202 ACCEPTED.

Отслеживать состояние задания

В ответе запроса на создание задания вы получите заголовок Location HTTP с URL-адресом задания. Вы можете использовать тот же маркер для отправки запроса GET к этому URL-адресу, чтобы просмотреть состояние задания редактирования.

Ниже приведен пример URL-адреса:

https://api.videoindexer.ai/westeurope/Accounts/<id>/Jobs/<id>

Ниже приведен пример ответа:

{
    "creationTime": "2023-05-11T11:22:57.6114155Z",
    "lastUpdateTime": "2023-05-11T11:23:01.7993563Z",
    "progress": 20,
    "jobType": "Redaction",
    "state": "Processing"
}

Если вы вызываете тот же URL-адрес после завершения задания по редакции, в заголовке Location вы получите подписанный URL-адрес общего доступа к хранилищу (SAS) к отредактированному видео. Рассмотрим пример.

https://api.videoindexer.ai/westeurope/Accounts/<id>/Videos/<id>/SourceFile/DownloadUrl 

Этот URL-адрес перенаправляется в файл .mp4, который хранится в учетной записи хранения Azure.

Вопросы и ответы

Вопрос Ответ
Можно ли загрузить видео и отредактировать его в одной операции? Нет. Сначала необходимо отправить и проанализировать видео с помощью API индексатора видео. Затем наведите ссылку на индексированные видео в задании редактирования.
Можно ли использовать веб-сайт Индексатора видео Azure для редактирования видео? Нет. В настоящее время для создания задания редактирования можно использовать только API.
Можно ли воспроизвести отредактированного видео с помощью веб-сайта Индексатора видео? Да. Отредактированное видео отображается на веб-сайте Video Indexer как любое другое индексированное видео, но оно не содержит инсайтов.
Как удалить редактированное видео? Вы можете использовать запрос API удаления видео и указать Videoid значение для редактированного видео.
Необходимо пройти проверку личности через распознавание лица, чтобы использовать скрытие лиц? Если вы не представляете департамент полиции в Соединенных Штатах, нет. Даже если у вас ограничен доступ, мы продолжаем предлагать обнаружение лиц. Если ваш доступ ограничен, мы не предлагаем идентификацию лиц. Однако вы можете заретушировать все лица на видео, используя только детекцию лиц.
Заменяет ли скрытие лиц мое оригинальное видео? Нет. Задание редактирования лиц создает новый выходной файл видео.
Не все лица правильно редактируются. Что я могу сделать? Редактирование опирается на начальное обнаружение лица и выходные данные аналитического потока. Хотя мы обнаруживаем все лица большую часть времени, есть обстоятельства, в которых мы не можем обнаружить лицо. Факторы, такие как угол лица, количество кадров, где лицо присутствует, и качество исходного видео, влияют на качество редактирования лица. Дополнительные сведения см. в статье "Аналитика лиц".
Можно ли удалить объекты, отличные от лиц? Нет. В настоящее время мы предлагаем только скрытие лиц. Если у вас есть необходимость редактировать другие объекты, вы можете предоставить отзыв о нашем продукте в канале "Голосовая связь Azure".
Сколько времени url-адрес SAS действителен для скачивания редактированного видео? Чтобы скачать отредактированное видео после истечения срока действия URL-адреса SAS, необходимо обратиться к URL-адресу состояния начального задания. Рекомендуется сохранить эти Jobstatus URL-адреса в базе данных в серверной части для последующей ссылки.

Коды ошибок

В следующих разделах описываются ошибки, которые могут возникать при использовании редактирования лиц.

Ответ: 404 не найдено

Учетная запись не найдена или видео не найдено.

Заголовки ответа

Имя Обязательно Тип Описание
x-ms-request-id неправда струна Глобальный уникальный идентификатор (GUID) для запроса назначается сервером с целью инструментального контроля. Сервер гарантирует, что все журналы, связанные с обработкой запроса, могут быть связаны с идентификатором запроса сервера. Клиент может указать этот идентификатор запроса в запросе в службу поддержки, чтобы инженеры поддержки могли найти журналы, связанные с этим конкретным запросом. Сервер гарантирует, что идентификатор запроса является уникальным для каждого задания.

Основная часть ответа

Имя Обязательно Тип
ErrorType неправда ErrorType
Message неправда струна

JSON по умолчанию

{
    "ErrorType": "GENERAL",
    "Message": "string"
}

Ответ: 400 Недопустимый запрос

Недопустимые входные данные или невозможно редактировать видео, поскольку его первоначальная загрузка завершилась неудачей. Отправьте видео еще раз.

Неверные входные данные или невозможно отредактировать видео, поскольку исходная загрузка не удалась. Отправьте видео еще раз.

Заголовки ответа

Имя Обязательно Тип Описание
x-ms-request-id неправда струна ИДЕНТИФИКАТОР GUID для запроса назначается сервером в целях инструментирования. Сервер гарантирует, что все журналы, связанные с обработкой запроса, могут быть связаны с идентификатором запроса сервера. Клиент может указать этот идентификатор запроса в запросе в службу поддержки, чтобы инженеры поддержки могли найти журналы, связанные с этим конкретным запросом. Сервер гарантирует, что идентификатор запроса является уникальным для каждого задания.

Основная часть ответа

Имя Обязательно Тип
ErrorType неправда ErrorType
Message неправда струна

JSON по умолчанию

{
    "ErrorType": "GENERAL",
    "Message": "string"
}

Ответ: конфликт 409

Видео уже индексируется.

Заголовки ответа

Имя Обязательно Тип Описание
x-ms-request-id неправда струна ИДЕНТИФИКАТОР GUID для запроса назначается сервером в целях инструментирования. Сервер гарантирует, что все журналы, связанные с обработкой запроса, могут быть связаны с идентификатором запроса сервера. Клиент может указать этот идентификатор запроса в запросе в службу поддержки, чтобы инженеры поддержки могли найти журналы, связанные с этим конкретным запросом. Сервер гарантирует, что идентификатор запроса является уникальным для каждого задания.

Основная часть ответа

Имя Обязательно Тип
ErrorType неправда ErrorType
Message неправда струна

JSON по умолчанию

{
    "ErrorType": "GENERAL",
    "Message": "string"
}

Ответ: 401 Неавторизованный

Маркер доступа не авторизован для доступа к учетной записи.

Заголовки ответа

Имя Обязательно Тип Описание
x-ms-request-id неправда струна ИДЕНТИФИКАТОР GUID для запроса назначается сервером в целях инструментирования. Сервер гарантирует, что все журналы, связанные с обработкой запроса, могут быть связаны с идентификатором запроса сервера. Клиент может указать этот идентификатор запроса в запросе в службу поддержки, чтобы инженеры поддержки могли найти журналы, связанные с этим конкретным запросом. Сервер гарантирует, что идентификатор запроса является уникальным для каждого задания.

Основная часть ответа

Имя Обязательно Тип
ErrorType неправда ErrorType
Message неправда струна

JSON по умолчанию

{
    "ErrorType": "USER_NOT_ALLOWED",
    "Message": "Access token is not authorized to access account 'SampleAccountId'."
}

Ответ: ошибка внутреннего сервера 500

На сервере произошла ошибка.

Заголовки ответа

Имя Обязательно Тип Описание
x-ms-request-id неправда струна ИДЕНТИФИКАТОР GUID для запроса назначается сервером в целях инструментирования. Сервер гарантирует, что все журналы, связанные с обработкой запроса, могут быть связаны с идентификатором запроса сервера. Клиент может указать этот идентификатор запроса в запросе в службу поддержки, чтобы инженеры поддержки могли найти журналы, связанные с этим конкретным запросом. Сервер гарантирует, что идентификатор запроса является уникальным для каждого задания.

Основная часть ответа

Имя Обязательно Тип
ErrorType неправда ErrorType
Message неправда струна

JSON по умолчанию

{
    "ErrorType": "GENERAL",
    "Message": "There was an error."
}

Ответ: 429 Слишком много запросов

Было отправлено слишком много запросов. Retry-After Используйте заголовок ответа, чтобы решить, когда отправить следующий запрос.

Заголовки ответа

Имя Обязательно Тип Описание
Retry-After неправда целое число Неотрицательное целое десятичное число, указывающее количество секунд задержки после получения ответа.

Ответ: 504 Ошибка таймаут шлюза

Сервер не ответил на шлюз в течение ожидаемого времени.

Заголовки ответа

Имя Обязательно Тип Описание
x-ms-request-id неправда струна ИДЕНТИФИКАТОР GUID для запроса назначается сервером в целях инструментирования. Сервер гарантирует, что все журналы, связанные с обработкой запроса, могут быть связаны с идентификатором запроса сервера. Клиент может указать этот идентификатор запроса в запросе в службу поддержки, чтобы инженеры поддержки могли найти журналы, связанные с этим конкретным запросом. Сервер гарантирует, что идентификатор запроса является уникальным для каждого задания.

JSON по умолчанию

{
    "ErrorType": "SERVER_TIMEOUT",
    "Message": "Server did not respond to gateway within expected time"
}