Búsqueda y censura (desenfoque) de caras con el valor preestablecido de Face Detector

Logotipo de Media Services v3


¿Busca la documentación de Media Services, versión 2?

La API de Azure Media Services v3 incluye un valor preestablecido de Face Detector que ofrece la detección de caras escalable y la censura (desenfoque) en la nube. La censura de rostros le permite modificar un vídeo con el fin de difuminar las caras de personas seleccionadas. Puede usar el servicio de censura de rostros en escenarios de seguridad pública y de noticias en los medios de comunicación. Se puede tardar horas en censurar manualmente unos minutos de imágenes que contengan varias caras, pero con este valor preestablecido, el proceso de censura de caras requiere solamente unos pocos pasos sencillos.

En este artículo se proporcionan detalles sobre el Valor preestablecido de Face Detector y se muestra cómo se usa con el SDK de Media Services para .NET.

Cumplimiento, privacidad y seguridad

Como recordatorio importante, debe cumplir todas las leyes aplicables en el uso del análisis en Azure Media Services. No debe usar Azure Media Services ni ningún otro servicio de Azure de forma que infrinja los derechos de los demás. Antes de cargar vídeos que incluyan datos biométricos en el servicio Azure Media Services para procesarlos y almacenarlos, debe tener todos los derechos apropiados (por ejemplo, todos los consentimientos adecuados) de las personas del vídeo. Para información sobre el cumplimiento, la privacidad y la seguridad de Azure Media Services, consulte Términos de Azure Cognitive Services. En lo que respecta a las obligaciones de privacidad de Microsoft y al control de los datos, consulte la declaración de privacidad, los Términos de los Servicios en Línea (OST) y el anexo de procesamiento de datos ("DPA") de Microsoft. Puede encontrar información adicional sobre la privacidad, como la retención, eliminación o destrucción de los datos, en los términos de OST y aquí. Al usar Azure Media Services, acepta las obligaciones de los Términos de Cognitive Services, OST, DPA y la declaración de privacidad.

Modos de censura de rostros

La censura facial funciona detectando caras en cada fotograma de vídeo y realizando un seguimiento del objeto de cara tanto hacia delante como hacia atrás en el tiempo, para que la imagen de la misma persona pueda difuminarse también desde otros ángulos. El proceso de censura automatizado es complejo y no siempre se desenfocan todas las caras al 100 %. Por este motivo, el valor preestablecido se puede usar en modo de dos pasos para mejorar la calidad y la precisión del desenfoque a través de una fase de edición antes de enviar el archivo para el último paso de desenfoque.

Además de un modo Combinado totalmente automático, el flujo de trabajo de dos pasos le permite elegir las caras que quiere desenfocar (o no desenfocar) mediante una lista de id. de caras. Para realizar ajustes arbitrarios por fotograma, el valor preestablecido usa un archivo de metadatos en formato JSON como entrada para el segundo paso. Este flujo de trabajo se divide en los modos Analyze (Analizar) y Redact (Censurar).

Puede combinar los dos modos en un único paso que ejecuta ambas tareas en un trabajo; este modo se denomina Combinado. En este artículo, el código de ejemplo mostrará cómo usar el modo Combinado de paso único simplificado en un archivo de código fuente de ejemplo.

Modo combinado

Esto genera un archivo de vídeo MP4 censurado en un solo paso sin que sea necesario editar manualmente el archivo JSON. La salida de la carpeta de recursos para el trabajo será un único archivo .mp4 que contendrá caras desenfocadas con el efecto de desenfoque seleccionado. Use la propiedad de resolution establecida en SourceResolution para obtener los mejores resultados de censura.

Fase Nombre de archivo Notas
Recurso de entrada "ignite-sample.mp4" Vídeo en formato WMV, MOV o MP4
Configuración de valor preestablecido Configuración de Face Detector modo: FaceRedactorMode.Combined, blurType: BlurType.Med, resolución: AnalysisResolution.SourceResolution
Recurso de salida "ignite-redacted.mp4 Vídeo con efecto de desenfoque aplicado a caras

Modo Analyze (Análisis)

El paso Analizar del flujo de trabajo de dos pasos toma una entrada de vídeo y genera un archivo JSON con una lista de ubicaciones de caras, id. de caras e imágenes jpg de cada cara detectada. Tenga en cuenta que no está garantizado que los identificadores de las caras sean los mismos en las ejecuciones posteriores del paso de análisis.

Fase Nombre de archivo Notas
Recurso de entrada "ignite-sample.mp4" Vídeo en formato WMV, MOV o MP4
Configuración de valor preestablecido Configuración de Face Detector modo: FaceRedactorMode.Analyze, resolución: AnalysisResolution.SourceResolution
Recurso de salida ignite-sample_annotations.json Datos de anotación de ubicaciones de rostros en formato JSON. No está garantizado que los identificadores de las caras sean los mismos en las ejecuciones posteriores del paso de análisis. El usuario puede editarlo para modificar los rectángulos de selección para el difuminado. Vea el ejemplo a continuación.
Recurso de salida foo_thumb%06d.jpg [foo_thumb000001.jpg, foo_thumb000002.jpg] Un jpg recortado de cada rostro detectado, donde el número indica el identificador (labelId) de la cara

Ejemplo de salida

{
  "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

Modo de censura (desenfoque)

El segundo paso del flujo de trabajo tiene un mayor número de entradas que tienen que combinarse en un solo recurso.

Esto incluye una lista de identificadores para difuminar, el vídeo original y las anotaciones JSON. Este modo usa las anotaciones para aplicar difuminado en el vídeo de entrada.

El resultado de la fase de análisis no incluye el vídeo original. El vídeo tiene que estar cargado en el recurso de entrada para la tarea de modo Redact (Censurar) y seleccionado como el archivo principal.

Fase Nombre de archivo Notas
Recurso de entrada "ignite-sample.mp4" Vídeo en formato WMV, MOV o MP4. El mismo vídeo que en el paso 1.
Recurso de entrada "ignite-sample_annotations.json" Archivo de metadatos de anotaciones de la fase uno, con modificaciones opcionales si desea cambiar las caras desenfocadas. Debe editarse en una aplicación externa, código o editor de texto.
Recurso de entrada "ignite-sample_IDList.txt" (opcional) Nueva lista opcional separada por líneas de identificadores de rostro para censurar. Si se deja en blanco, se aplicará el desenfoque a todas las caras del origen. Puede usar la lista para elegir de manera selectiva no desenfocar caras específicas.
Valor preestablecido de Face Detector Configuración de valor preestablecido modo: FaceRedactorMode.Redact, blurType: BlurType.Med
Recurso de salida "ignite-sample-redacted.mp4" Vídeo con difuminado aplicado en base a las anotaciones

Salida de ejemplo

Este es el resultado de una lista de identificadores con un identificador seleccionado. No está garantizado que los identificadores de las caras sean los mismos en las ejecuciones posteriores del paso de análisis.

foo_IDList.txt de ejemplo

1
2
3

Tipos de desenfoque

En los modos Combinado o Redact (Censurar), hay cinco modos de desenfoque diferentes entre los que puede elegir en la configuración de la entrada JSON: Bajo, Medio, Alto, Box y Negro. Se usa Medio de forma predeterminada.

Puede encontrar ejemplos de los tipos de desenfoque a continuación.

Bajo

Ejemplo de configuración de desenfoque de resolución baja.

Medio

Ejemplo de configuración de desenfoque de resolución media.

Alto

Ejemplo de configuración de desenfoque de resolución alta.

Box

Modo Box para usar en la depuración de la salida.

Negro

El modo de caja negra cubre todas las caras con cajas negras.

Elementos del archivo JSON de salida

El procesador multimedia de censura proporciona detección de ubicación y seguimiento de rostros de alta precisión que puede detectar hasta 64 caras humanas en un fotograma de vídeo. Las caras de frente ofrecen los mejores resultados, mientras que las que se encuentran de lado y las caras pequeñas (inferiores o iguales a 24x24 píxeles) podrían no ser tan precisas.

El trabajo genera un archivo de salida JSON que contiene metadatos de los rostros detectados y de los que se ha realizado seguimiento. Los metadatos incluyen coordenadas que indican tanto la ubicación de los rostros como un número de identificación de rostro, que indica que se realiza un seguimiento de dicha persona. Los números de identificación de cara son propensos a restablecerse en circunstancias en las que la cara de frente se pierde o se superpone en el fotograma, lo que provoca que a algunas personas se les asigne varios identificadores.

La salida JSON incluye los siguientes elementos:

Elementos raíz JSON

Elemento Descripción
version Esto se refiere a la versión de la API de vídeo.
timescale "Tics" por segundo del vídeo.
offset Se trata de la diferencia de tiempo para las marcas de tiempo. En la versión 1.0 de las API de vídeo, será siempre 0. En los escenarios futuros que se admitan, este valor puede cambiar.
width, hight El alto y ancho del fotograma de vídeo de salida, en píxeles.
framerate Fotogramas por segundo del vídeo.
fragments Los metadatos se separan en diferentes segmentos denominados fragmentos. Cada fragmento contiene un inicio, una duración, un número de intervalo y eventos.

Elementos JSON de fragmentos

Elemento Descripción
start La hora de inicio del primer evento, en "tics".
duration La longitud del fragmento, en "tics".
índice (Se aplica solo a Azure Media Redactor) define el índice del marco del evento actual.
interval El intervalo de cada entrada de evento dentro del fragmento, en "tics".
events Cada evento contiene las caras detectadas y seguidas dentro de esa duración de tiempo. Es una matriz de eventos. La matriz externa representa un intervalo de tiempo. La matriz interna consta de 0 o más eventos que ocurrieron en ese momento en el tiempo. Un corchete vacío significa que no se detectaron caras.
id El identificador de la cara que se sigue. Este número puede cambiar inadvertidamente si una cara deja de detectarse. Una persona determinada debe tener el mismo identificador durante todo el vídeo, pero esto no se puede garantizar debido a las limitaciones en el algoritmo de detección (oclusión, etc.).
x, y Las coordenadas X e Y de la parte superior izquierda del cuadro de límite en una escala normalizada de 0,0 a 1,0.
-Las coordenadas X e Y son relativas siempre a la posición horizontal, por lo que si tiene un vídeo en vertical (o boca a abajo, en el caso de iOS), tendrá que transponer las coordenadas en consecuencia.
width, height El ancho y alto del cuadro de límite de la cara en una escala normalizada de 0,0 a 1,0.
facesDetected Este atributo se encuentra al final de los resultados JSON y resume el número de caras que el algoritmo detectó durante el vídeo. Dado que los identificadores pueden restablecerse inadvertidamente si una cara deja de detectarse (por ejemplo, la cara sale de la pantalla o aparta la vista), este número puede no ser siempre el número real de caras en el vídeo.

Código de ejemplo de .NET

En el programa siguiente se muestra cómo utilizar el modo de censura de un solo paso Combinado:

  • Crear un recurso y cargar un archivo multimedia en él.
  • Configure el valor preestablecido de Face Detector que usa la configuración de modo y blurType.
  • Creación de una nueva transformación mediante el valor preestablecido de Face Detector
  • Descargue el archivo de vídeo censurado de salida.

Descarga y configuración del ejemplo

Clone un repositorio GitHub que contenga el ejemplo de .NET en la máquina mediante el siguiente comando:

git clone https://github.com/Azure-Samples/media-services-v3-dotnet.git

El ejemplo se encuentra en la carpeta FaceRedactor. Abra appsettings.json en el proyecto que ha descargado. Sustituya los valores por las credenciales que obtuvo al acceder a las API.

Opcionalmente, puede copiar el archivo sample.env en la raíz del repositorio y rellenar los detalles allí y cambiar el nombre del archivo a .env (tenga en cuenta el punto de delante) para que se pueda usar en todos los proyectos de ejemplo del repositorio. Así se elimina la necesidad de tener que rellenar un archivo appsettings.json en cada ejemplo y también le protege en la comprobación de cualquier configuración en sus propios repositorios clonados de GitHub.

Ejemplos

Este código muestra cómo configurar FaceDetectorPreset para un desenfoque en el modo Combinado.


// Create a Face Detector preset and enable redaction/blurring of the faces.
Preset faceRedactionPreset = new FaceDetectorPreset(
    resolution: AnalysisResolution.SourceResolution,
    mode: FaceRedactorMode.Combined, // Use the Combined mode here. This is the single pass mode where detection and blurring happens as one pass - if you want to analyze and get JSON results first before blur, use Analyze mode, followed by Redact mode. 
    blurType: BlurType.Med // Sets the amount of blur. For debugging purposes you can set this to Box to just see the outlines of the faces.
);

// Ensure that you have the desired encoding Transform. This is really a one time setup operation.
// Once it is created, we won't delete it.
Transform videoAnalyzerTransform = await GetOrCreateTransformAsync(client, config.ResourceGroup, config.AccountName, FaceRedactorTransformName, faceRedactionPreset);

En este ejemplo de código se muestra cómo se pasa el valor preestablecido a un objeto de transformación durante la creación. Después de crear la transformación, los trabajos se pueden enviar directamente a ella.


// Start by defining the desired outputs.
TransformOutput[] outputs = new TransformOutput[]
{
    new TransformOutput(preset),
};

// Create the Transform with the output defined above
// Does a Transform already exist with the desired name? This method will just overwrite (update) the Transform if it exists already. 
// In production code, you may want to be cautious and try to avoid updates. It really depends on your scenario.
Transform transform = await client.Transforms.CreateOrUpdateAsync(resourceGroupName, accountName, transformName, outputs);

return transform;

Pasos siguientes

Media Services v3 (más reciente)

Eche un vistazo a la versión más reciente de Azure Media Services.

Media Services v2 (heredado)

Envío de comentarios

Emplee el foro UserVoice para proporcionar comentarios y realizar sugerencias sobre cómo mejorar Azure Media Services. También puede ir directamente a una de las siguientes categorías: