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 | |
1 | Desfoque alto | |
2 | Desfoque baixo | |
3 | BoundingBox | |
4 | Preto |
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"
}