Redacción de caras mediante Azure AI Video Indexer API
Puede usar Video Indexer de Azure AI para detectar e identificar caras en vídeo. Para modificar el vídeo para desenfocar (censurar) caras de personas específicas, puede usar la API.
Unos minutos de grabación que contienen varias caras pueden tardar horas en censurarse manualmente, pero mediante el uso de valores preestablecidos en Video Indexer API, el proceso de redacción facial requiere solo unos pocos pasos sencillos.
En este artículo se muestra cómo censurar caras mediante una API. Video Indexer API incluye un valor preestablecido face Redaction que ofrece detección de caras escalable y redacción (desenfoque) en la nube. En el artículo se muestra cada paso de cómo censurar caras mediante la API en detalle.
En el vídeo siguiente se muestra cómo censurar un vídeo mediante Video Indexer API de Azure AI.
Cumplimiento, privacidad y seguridad
Como recordatorio importante, debe cumplir todas las leyes aplicables en el uso de análisis o conclusiones que derive mediante Video Indexer.
El acceso al servicio Face se limita en función de los criterios de idoneidad y uso para admitir los principios de inteligencia artificial responsable de Microsoft. El servicio Face solo está disponible para los clientes y asociados administrados por Microsoft. Use el formulario de admisión de reconocimiento facial para solicitar acceso. Para obtener más información, consulte la página Acceso limitado de Face.
Terminología y jerarquía de la redacción facial
La redacción facial en Video Indexer se basa en la salida de los resultados existentes de detección de caras de Video Indexer que proporcionamos en nuestros valores preestablecidos de análisis avanzado y estándar de vídeo.
Para censurar un vídeo, primero debe cargar un vídeo en Video Indexer y completar un análisis mediante los valores preestablecidos de vídeo Estándar o Avanzado . Puede hacerlo mediante el sitio web o la API de Video Indexer de Azure AI. A continuación, puede usar face redaction API para hacer referencia a este vídeo mediante el videoId
valor . Creamos un nuevo vídeo en el que se redactan las caras indicadas. Tanto el análisis de vídeo como la redacción facial son trabajos facturables independientes. Para obtener más información, consulte nuestra página de precios.
Tipos de desenfoque
Puede elegir entre diferentes tipos de desenfoque en la redacción facial. Para seleccionar un tipo, use un nombre o un número representativo para el blurringKind
parámetro en el cuerpo de la solicitud:
número de blurringKind | nombre de blurringKind | Ejemplo |
---|---|---|
0 | MediumBlur | |
1 | HighBlur | |
2 | LowBlur | |
3 | BoundingBox | |
4 | Negro |
Puede especificar el tipo de desenfoque en el cuerpo de la solicitud mediante el blurringKind
parámetro .
Este es un ejemplo:
{
"faces": {
"blurringKind": "HighBlur"
}
}
O bien, use un número que represente el tipo de desenfoque que se describe en la tabla anterior:
{
"faces": {
"blurringKind": 1
}
}
Filters
Puede aplicar filtros para establecer los identificadores de caras que se desenfoquen. Puede especificar los identificadores de las caras en una matriz separada por comas en el cuerpo del archivo JSON. Use el scope
parámetro para excluir o incluir estas caras para la reacción. Al especificar identificadores, puede censurar todas las caras excepto los identificadores que indique o redacte solo esos identificadores. Vea ejemplos en las secciones siguientes.
Excluir ámbito
En el ejemplo siguiente, para censurar todas las caras excepto los identificadores de cara 1001 y 1016, use el Exclude
ámbito:
{
"faces": {
"blurringKind": "HighBlur",
"filter": {
"ids": [1001, 1016],
"scope": "Exclude"
}
}
}
Incluir ámbito
En el ejemplo siguiente, para censurar solo los identificadores de caras 1001 y 1016, use el Include
ámbito :
{
"faces": {
"blurringKind": "HighBlur",
"filter": {
"ids": [1001, 1016],
"scope": "Include"
}
}
}
Censurar todas las caras
Para censurar todas las caras, quite el filtro de ámbito:
{
"faces": {
"blurringKind": "HighBlur",
}
}
Para recuperar un identificador de cara, puede ir al vídeo indexado y recuperar el archivo de artefacto. El artefacto contiene un archivo faces.json y una miniatura .zip archivo que tiene todas las caras detectadas en el vídeo. Puede hacer coincidir la cara con el identificador y decidir qué identificadores de cara se van a censurar.
Creación de un trabajo de reacción
Para crear un trabajo de reacción, puede invocar la siguiente llamada API:
POST https://api.videoindexer.ai/{location}/Accounts/{accountId}/Videos/{videoId}/redact[?name][&priority][&privacy][&externalId][&streamingPreset][&callbackUrl][&accessToken]
Se requieren los siguientes valores:
NOMBRE | valor | Descripción |
---|---|---|
Accountid |
{accountId} |
Identificador de la cuenta de Video Indexer. |
Location |
{location} |
Región de Azure donde se encuentra la cuenta de Video Indexer. Por ejemplo, westus. |
AccessToken |
{token} |
Token que tiene derechos de colaborador de cuenta generados a través de la API REST de Azure Resource Manager . |
Videoid |
{videoId} |
Identificador de vídeo del vídeo de origen que se va a censurar. Puede recuperar el identificador de vídeo mediante List Video API. |
Name |
{name} |
Nombre del nuevo vídeo redactado. |
Este es un ejemplo de una solicitud:
https://api.videoindexer.ai/westeurope/Accounts/{id}/Videos/{id}/redact?priority=Low&name=testredaction&privacy=Private&streamingPreset=Default
Puede especificar el token como un encabezado de autorización que tenga un tipo de valor de clave de bearertoken:{token}
, o puede proporcionarlo como parámetro de consulta mediante ?token={token}
.
También debe agregar un cuerpo de solicitud en formato JSON con las opciones de trabajo de reacción que se van a aplicar. Este es un ejemplo:
{
"faces": {
"blurringKind": "HighBlur"
}
}
Cuando la solicitud se realiza correctamente, recibirá la respuesta HTTP 202 ACCEPTED
.
Supervisar el estado del trabajo
En la respuesta de la solicitud de creación de trabajos, recibirá un encabezado Location
HTTP que tenga una dirección URL para el trabajo. Puede usar el mismo token para realizar una solicitud GET a esta dirección URL para ver el estado del trabajo de reacción.
Esta es una dirección URL de ejemplo:
https://api.videoindexer.ai/westeurope/Accounts/<id>/Jobs/<id>
Este es un ejemplo de respuesta:
{
"creationTime": "2023-05-11T11:22:57.6114155Z",
"lastUpdateTime": "2023-05-11T11:23:01.7993563Z",
"progress": 20,
"jobType": "Redaction",
"state": "Processing"
}
Si llama a la misma dirección URL cuando se completa el trabajo de reacción, en el Location
encabezado, obtendrá una dirección URL de firma de acceso compartido (SAS) de almacenamiento al vídeo censurado. Por ejemplo:
https://api.videoindexer.ai/westeurope/Accounts/<id>/Videos/<id>/SourceFile/DownloadUrl
Esta dirección URL redirige al archivo .mp4 que se almacena en la cuenta de Azure Storage.
Preguntas más frecuentes
Pregunta | Respuesta |
---|---|
¿Puedo cargar un vídeo y redactar en una sola operación? | No. Primero debe cargar y analizar un vídeo mediante Video Indexer API. A continuación, haga referencia al vídeo indexado en el trabajo de reacción. |
¿Puedo usar el sitio web de Azure AI Video Indexer para censurar un vídeo? | No. Actualmente, solo puede usar la API para crear un trabajo de reacción. |
¿Puedo reproducir el vídeo censurado mediante el sitio web de Video Indexer? | Sí. El vídeo censurado está visible en el sitio web de Video Indexer como cualquier otro vídeo indexado, pero no contiene información detallada. |
Cómo eliminar un vídeo censurado? | Puede usar Delete Video API y proporcionar el Videoid valor del vídeo redactado. |
¿Necesito pasar la identificación facial para usar la redacción facial? | A menos que represente un departamento de policía en el Estados Unidos, no. Incluso si está cerrado, seguimos ofreciendo detección de caras. No ofrecemos identificación facial si está a la puerta. Sin embargo, puede censurar todas las caras de un vídeo usando solo la detección de caras. |
¿Se sobrescribirá la redacción de cara a mi vídeo original? | No. El trabajo de reacción facial crea un nuevo archivo de salida de vídeo. |
No todas las caras están redactadas correctamente. ¿Qué se puede hacer? | La redacción se basa en la salida inicial de detección y detección de la canalización de análisis. Aunque detectamos todas las caras la mayor parte del tiempo, hay circunstancias en las que no podemos detectar una cara. Factores como el ángulo de cara, el número de fotogramas que la cara está presente y la calidad del vídeo de origen afecta a la calidad de la redacción facial. Para obtener más información, consulte Face Insights. |
¿Puedo censurar objetos que no sean caras? | No. Actualmente, solo ofrecemos la redacción facial. Si necesita censurar otros objetos, puede proporcionar comentarios sobre nuestro producto en el canal azure User Voice . |
¿Cuánto tiempo es válida una dirección URL de SAS para descargar el vídeo censurado? | Para descargar el vídeo redactado después de que la dirección URL de SAS haya expirado, debe llamar a la dirección URL de estado del trabajo inicial. Es mejor mantener estas Jobstatus direcciones URL en una base de datos en el back-end para futuras referencias. |
Códigos de error
En las secciones siguientes se describen los errores que pueden producirse al usar la reacción facial.
Respuesta: 404 No encontrado
No se encontró la cuenta o no se encontró el vídeo.
Encabezados de respuesta
Nombre | Obligatorio | Type | Descripción |
---|---|---|---|
x-ms-request-id |
false | string | El servidor asigna un identificador único global (GUID) para la solicitud con fines de instrumentación. El servidor se asegura de que todos los registros asociados al control de la solicitud se pueden vincular al identificador de solicitud del servidor. Un cliente puede proporcionar este identificador de solicitud en una incidencia de soporte técnico para que los ingenieros de soporte técnico puedan encontrar los registros vinculados a esta solicitud específica. El servidor se asegura de que el identificador de solicitud es único para cada trabajo. |
Cuerpo de la respuesta
Nombre | Obligatorio | Tipo |
---|---|---|
ErrorType |
false | ErrorType |
Message |
false | string |
JSON predeterminado
{
"ErrorType": "GENERAL",
"Message": "string"
}
Respuesta: 400 solicitud incorrecta
La entrada no es válida o no puede censurar el vídeo porque se produjo un error en la carga original. Vuelva a cargar el vídeo.
Entrada no válida o no puede censurar el vídeo porque se produjo un error en la carga original. Vuelva a cargar el vídeo.
Encabezados de respuesta
Nombre | Obligatorio | Type | Descripción |
---|---|---|---|
x-ms-request-id |
false | string | El servidor asigna un GUID para la solicitud con fines de instrumentación. El servidor se asegura de que todos los registros asociados al control de la solicitud se pueden vincular al identificador de solicitud del servidor. Un cliente puede proporcionar este identificador de solicitud en una incidencia de soporte técnico para que los ingenieros de soporte técnico puedan encontrar los registros vinculados a esta solicitud específica. El servidor se asegura de que el identificador de solicitud es único para cada trabajo. |
Cuerpo de la respuesta
Nombre | Obligatorio | Tipo |
---|---|---|
ErrorType |
false | ErrorType |
Message |
false | string |
JSON predeterminado
{
"ErrorType": "GENERAL",
"Message": "string"
}
Respuesta: 409 Conflicto
El vídeo ya se está indexando.
Encabezados de respuesta
Nombre | Obligatorio | Type | Descripción |
---|---|---|---|
x-ms-request-id |
false | string | El servidor asigna un GUID para la solicitud con fines de instrumentación. El servidor se asegura de que todos los registros asociados al control de la solicitud se pueden vincular al identificador de solicitud del servidor. Un cliente puede proporcionar este identificador de solicitud en una incidencia de soporte técnico para que los ingenieros de soporte técnico puedan encontrar los registros vinculados a esta solicitud específica. El servidor se asegura de que el identificador de solicitud es único para cada trabajo. |
Cuerpo de la respuesta
Nombre | Obligatorio | Tipo |
---|---|---|
ErrorType |
false | ErrorType |
Message |
false | string |
JSON predeterminado
{
"ErrorType": "GENERAL",
"Message": "string"
}
Respuesta: 401 No autorizado
El token de acceso no está autorizado para acceder a la cuenta.
Encabezados de respuesta
Nombre | Obligatorio | Type | Descripción |
---|---|---|---|
x-ms-request-id |
false | string | El servidor asigna un GUID para la solicitud con fines de instrumentación. El servidor se asegura de que todos los registros asociados al control de la solicitud se pueden vincular al identificador de solicitud del servidor. Un cliente puede proporcionar este identificador de solicitud en una incidencia de soporte técnico para que los ingenieros de soporte técnico puedan encontrar los registros vinculados a esta solicitud específica. El servidor se asegura de que el identificador de solicitud es único para cada trabajo. |
Cuerpo de la respuesta
Nombre | Obligatorio | Tipo |
---|---|---|
ErrorType |
false | ErrorType |
Message |
false | string |
JSON predeterminado
{
"ErrorType": "USER_NOT_ALLOWED",
"Message": "Access token is not authorized to access account 'SampleAccountId'."
}
Respuesta: Error de servidor interno 500
Se produjo un error en el servidor.
Encabezados de respuesta
Nombre | Obligatorio | Type | Descripción |
---|---|---|---|
x-ms-request-id |
false | string | El servidor asigna un GUID para la solicitud con fines de instrumentación. El servidor se asegura de que todos los registros asociados al control de la solicitud se pueden vincular al identificador de solicitud del servidor. Un cliente puede proporcionar este identificador de solicitud en una incidencia de soporte técnico para que los ingenieros de soporte técnico puedan encontrar los registros vinculados a esta solicitud específica. El servidor se asegura de que el identificador de solicitud es único para cada trabajo. |
Cuerpo de la respuesta
Nombre | Obligatorio | Tipo |
---|---|---|
ErrorType |
false | ErrorType |
Message |
false | string |
JSON predeterminado
{
"ErrorType": "GENERAL",
"Message": "There was an error."
}
Respuesta: 429 Demasiadas solicitudes
Se enviaron demasiadas solicitudes. Use el encabezado de Retry-After
respuesta para decidir cuándo enviar la siguiente solicitud.
Encabezados de respuesta
Nombre | Obligatorio | Type | Descripción |
---|---|---|---|
Retry-After |
false | integer | Entero decimal no negativo que indica el número de segundos que se va a retrasar después de recibir la respuesta. |
Respuesta: Tiempo de espera de puerta de enlace 504
El servidor no respondió a la puerta de enlace en el tiempo esperado.
Encabezados de respuesta
Nombre | Obligatorio | Type | Descripción |
---|---|---|---|
x-ms-request-id |
false | string | El servidor asigna un GUID para la solicitud con fines de instrumentación. El servidor se asegura de que todos los registros asociados al control de la solicitud se pueden vincular al identificador de solicitud del servidor. Un cliente puede proporcionar este identificador de solicitud en una incidencia de soporte técnico para que los ingenieros de soporte técnico puedan encontrar los registros vinculados a esta solicitud específica. El servidor se asegura de que el identificador de solicitud es único para cada trabajo. |
JSON predeterminado
{
"ErrorType": "SERVER_TIMEOUT",
"Message": "Server did not respond to gateway within expected time"
}