Compartilhar via


Redigir rostos usando a API do Azure AI Video Indexer

Você pode usar o Azure AI Video Indexer para detectar e identificar rostos em vídeo. Para modificar seu vídeo para desfocar (redigir) rostos de indivíduos específicos, você pode usar a API.

Alguns minutos de gravação que contêm vários rostos podem levar horas para serem editados manualmente, mas usando predefinições na API do Video Indexer, o processo de edição de rosto requer apenas algumas etapas simples.

Este artigo mostra como redigir rostos usando uma API. A API do Video Indexer inclui uma predefinição de Redação de Detecção Facial que oferece detecção e redação de rosto escalonável (desfoque) na nuvem. O artigo demonstra cada etapa de como redigir rostos usando a API em detalhes.

O vídeo a seguir mostra como redigir um vídeo usando a API do Azure AI Video Indexer.

Conformidade, privacidade e segurança

Como um lembrete importante, você deve cumprir todas as leis aplicáveis no uso de análises ou insights obtidos usando o Video Indexer.

O acesso ao serviço facial é limitado com base nos critérios de qualificação e uso para dar suporte aos princípios da IA Responsável da Microsoft. O serviço de detecção facial está disponível apenas para clientes e parceiros gerenciados da Microsoft. Use o Formulário de admissão de reconhecimento facial para solicitar acesso. Para obter mais informações, consulte a página Acesso limitado facial.

Terminologia e hierarquia de redação facial

A redação facial no Video Indexer depende da saída dos resultados de detecção facial existentes do Video Indexer que fornecemos em nossas predefinições Padrão de Vídeo e Análise Avançada.

Para redigir um vídeo, você deve primeiro carregá-lo no Video Indexer e concluir uma análise usando as predefinições de vídeo Padrão ou Avançado . Você pode fazer isso usando o site ou a API do Azure AI Video Indexer. Em seguida, você pode usar a API de edição facial para fazer referência a esse vídeo usando o videoId valor. Criamos um novo vídeo no qual os rostos indicados são editados. Tanto a análise de vídeo quanto a redação facial são trabalhos faturáveis separados. Para obter mais informações, consulte nossa página de preços.

Tipos de desfoque

Você pode escolher entre diferentes tipos de desfoque na redação facial. Para selecionar um tipo, use um nome ou número representativo para o blurringKind parâmetro no corpo da solicitação:

desfocandoNúmero do tipo borrandoNome do tipo Exemplo
0 Desfoque médio Foto do desfoque médio do Azure AI Video Indexer.
1 Desfoque alto Foto do Azure AI Video Indexer de alto desfoque.
2 Desfoque baixo Foto do Azure AI Video Indexer desfoque baixo.
3 BoundingBox Foto das caixas delimitadoras do Azure AI Video Indexer.
4 Preto Foto do tipo de caixas pretas do Azure AI Video Indexer.

Você pode especificar o tipo de desfoque no corpo da solicitação usando o blurringKind parâmetro.

Veja um exemplo:

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

Ou use um número que represente o tipo de desfoque descrito na tabela anterior:

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

Filtros

Você pode aplicar filtros para definir quais IDs faciais desfocar. Você pode especificar as IDs dos rostos em uma matriz separada por vírgulas no corpo do arquivo JSON. Use o scope parâmetro para excluir ou incluir essas faces para redação. Ao especificar IDs, você pode redigir todas as faces , exceto as IDs indicadas, ou redigir apenas essas IDs. Veja exemplos nas próximas seções.

Excluir escopo

No exemplo a seguir, para redigir todas as faces, exceto as IDs faciais 1001 e 1016, use o Exclude escopo:

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

Incluir escopo

No exemplo a seguir, para redigir apenas as IDs faciais 1001 e 1016, use o Include escopo:

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

Redigir todas as faces

Para redigir todas as faces, remova o filtro de escopo:

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

Para recuperar um ID facial, você pode ir para o vídeo indexado e recuperar o arquivo de artefato. O artefato contém um arquivo faces.json e um arquivo de .zip miniatura que contém todos os rostos detectados no vídeo. Você pode corresponder o rosto ao ID e decidir quais IDs faciais redigir.

Criar um job de edição de dados

Para criar um trabalho de redação, você pode invocar a seguinte chamada de API:

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

Os seguintes valores são necessários:

Nome Valor Descrição
Accountid {accountId} A ID da sua conta do Video Indexer.
Location {location} A região do Azure em que sua conta do Video Indexer está localizada. Por exemplo, westus.
AccessToken {token} O token que tem direitos de Colaborador de Conta gerados por meio da API REST do Azure Resource Manager .
Videoid {videoId} O ID do vídeo de origem a ser editado. Você pode recuperar a ID do vídeo usando a API List Video .
Name {name} O nome do novo vídeo editado.

Aqui está um exemplo de uma solicitação:

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

Você pode especificar o token como um cabeçalho de autorização que tem um tipo de valor de chave de , ou pode fornecê-lo como parâmetro de bearertoken:{token}consulta usando ?token={token}.

Você também precisa adicionar um corpo de solicitação no formato JSON com as opções de trabalho de redação a serem aplicadas. Veja um exemplo:

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

Quando a solicitação for bem-sucedida, você receberá a resposta HTTP 202 ACCEPTED.

Monitorar o status do trabalho

Na resposta da solicitação de criação de trabalho, você recebe um cabeçalho Location HTTP que tem uma URL para o trabalho. Você pode usar o mesmo token para fazer uma solicitação GET para essa URL para ver o status do trabalho de redação.

Aqui está um exemplo de URL:

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

Eis uma resposta de exemplo:

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

Se você chamar a mesma URL quando o trabalho de redação for concluído, no Location cabeçalho, obterá uma URL de SAS (assinatura de acesso compartilhado) de armazenamento para o vídeo editado. Por exemplo:

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

Essa URL redireciona para o arquivo .mp4 armazenado na conta de Armazenamento do Azure.

Perguntas frequentes

Pergunta Resposta
Posso enviar um vídeo e redigir em uma operação? Não. Primeiro, você precisa carregar e analisar um vídeo usando a API do Video Indexer. Em seguida, faça referência ao vídeo indexado em seu trabalho de redação.
Posso usar o site do Azure AI Video Indexer para redigir um vídeo? Não. Atualmente, você pode usar apenas a API para criar um trabalho de redação.
Posso reproduzir o vídeo editado usando o site do Video Indexer? Sim. O vídeo editado é visível no site do Video Indexer como qualquer outro vídeo indexado, mas não contém insights.
Como faço para excluir um vídeo editado? Você pode usar a API Delete Video e fornecer o Videoid valor para o vídeo editado.
Preciso passar pelo bloqueio de identificação facial para usar a redação facial? A menos que você represente um departamento de polícia nos Estados Unidos, não. Mesmo se você estiver fechado, continuamos a oferecer detecção de rosto. Não oferecemos identificação facial se você estiver fechado. No entanto, você pode editar todos os rostos em um vídeo usando apenas a detecção de rosto.
A redação do rosto substituirá meu vídeo original? Não. O trabalho de edição facial cria um novo arquivo de saída de vídeo.
Nem todos os rostos são devidamente redigidos. O que posso fazer? A redação depende da detecção inicial de face e da saída de detecção do pipeline de análise. Embora detectemos todos os rostos na maioria das vezes, há circunstâncias em que não podemos detectar um rosto. Fatores como o ângulo do rosto, o número de quadros em que o rosto está presente e a qualidade do vídeo de origem afetam a qualidade da redação do rosto. Para obter mais informações, consulte Insights de rosto.
Posso redigir objetos que não sejam rostos? Não. Atualmente, oferecemos apenas redação facial. Se você precisar redigir outros objetos, poderá fornecer comentários sobre nosso produto no canal do Azure User Voice .
Por quanto tempo um URL SAS é válido para baixar o vídeo editado? Para baixar o vídeo editado depois que a URL SAS expirar, você precisa chamar a URL de status do trabalho inicial. É melhor manter esses Jobstatus URLs em um banco de dados em seu back-end para referência futura.

Códigos do Erro

As seções a seguir descrevem erros que podem ocorrer quando você usa a supressão facial.

Resposta: 404 Não encontrado

A conta não foi encontrada ou o vídeo não foi encontrado.

Cabeçalhos de resposta

Nome Obrigatória Type Descrição
x-ms-request-id false string Um identificador global exclusivo (GUID) para a solicitação é atribuído pelo servidor para fins de instrumentação. O servidor garante que todos os logs associados ao tratamento da solicitação possam ser vinculados à ID da solicitação do servidor. Um cliente pode fornecer essa ID de solicitação em um tíquete de suporte para que os engenheiros de suporte possam encontrar os logs vinculados a essa solicitação específica. O servidor garante que o ID da solicitação seja exclusivo para cada trabalho.

Corpo da resposta

Nome Obrigatória Tipo
ErrorType false ErrorType
Message false string

JSON padrão

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

Resposta: 400 Solicitação Incorreta

Entrada inválida ou não é possível editar o vídeo, pois o upload original falhou. Por favor, envie o vídeo novamente.

Entrada inválida ou não é possível editar o vídeo porque o upload original falhou. Carregue o vídeo novamente.

Cabeçalhos de resposta

Nome Obrigatória Type Descrição
x-ms-request-id false string Um GUID para a solicitação é atribuído pelo servidor para fins de instrumentação. O servidor garante que todos os logs associados ao tratamento da solicitação possam ser vinculados à ID da solicitação do servidor. Um cliente pode fornecer essa ID de solicitação em um tíquete de suporte para que os engenheiros de suporte possam encontrar os logs vinculados a essa solicitação específica. O servidor garante que o ID da solicitação seja exclusivo para cada trabalho.

Corpo da resposta

Nome Obrigatória Tipo
ErrorType false ErrorType
Message false string

JSON padrão

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

Resposta: 409 Conflito

O vídeo já está sendo indexado.

Cabeçalhos de resposta

Nome Obrigatória Type Descrição
x-ms-request-id false string Um GUID para a solicitação é atribuído pelo servidor para fins de instrumentação. O servidor garante que todos os logs associados ao tratamento da solicitação possam ser vinculados à ID da solicitação do servidor. Um cliente pode fornecer essa ID de solicitação em um tíquete de suporte para que os engenheiros de suporte possam encontrar os logs vinculados a essa solicitação específica. O servidor garante que o ID da solicitação seja exclusivo para cada trabalho.

Corpo da resposta

Nome Obrigatória Tipo
ErrorType false ErrorType
Message false string

JSON padrão

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

Resposta: 401 Não autorizado

O token de acesso não está autorizado a acessar a conta.

Cabeçalhos de resposta

Nome Obrigatória Type Descrição
x-ms-request-id false string Um GUID para a solicitação é atribuído pelo servidor para fins de instrumentação. O servidor garante que todos os logs associados ao tratamento da solicitação possam ser vinculados à ID da solicitação do servidor. Um cliente pode fornecer essa ID de solicitação em um tíquete de suporte para que os engenheiros de suporte possam encontrar os logs vinculados a essa solicitação específica. O servidor garante que o ID da solicitação seja exclusivo para cada trabalho.

Corpo da resposta

Nome Obrigatória Tipo
ErrorType false ErrorType
Message false string

JSON padrão

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

Resposta: 500 Erro interno do servidor

Ocorreu um erro no servidor.

Cabeçalhos de resposta

Nome Obrigatória Type Descrição
x-ms-request-id false string Um GUID para a solicitação é atribuído pelo servidor para fins de instrumentação. O servidor garante que todos os logs associados ao tratamento da solicitação possam ser vinculados à ID da solicitação do servidor. Um cliente pode fornecer essa ID de solicitação em um tíquete de suporte para que os engenheiros de suporte possam encontrar os logs vinculados a essa solicitação específica. O servidor garante que o ID da solicitação seja exclusivo para cada trabalho.

Corpo da resposta

Nome Obrigatória Tipo
ErrorType false ErrorType
Message false string

JSON padrão

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

Resposta: 429 Muitos pedidos

Muitos pedidos foram enviados. Use o cabeçalho de Retry-After resposta para decidir quando enviar a próxima solicitação.

Cabeçalhos de resposta

Nome Obrigatória Type Descrição
Retry-After false Número inteiro Um inteiro decimal não negativo que indica o número de segundos de atraso após o recebimento da resposta.

Resposta: 504 Tempo limite do gateway

O servidor não respondeu ao gateway dentro do tempo esperado.

Cabeçalhos de resposta

Nome Obrigatória Type Descrição
x-ms-request-id false string Um GUID para a solicitação é atribuído pelo servidor para fins de instrumentação. O servidor garante que todos os logs associados ao tratamento da solicitação possam ser vinculados à ID da solicitação do servidor. Um cliente pode fornecer essa ID de solicitação em um tíquete de suporte para que os engenheiros de suporte possam encontrar os logs vinculados a essa solicitação específica. O servidor garante que o ID da solicitação seja exclusivo para cada trabalho.

JSON padrão

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