Búsqueda y censura (desenfoque) de caras con el valor preestablecido de Face Detector
¿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

Medio

Alto

Box

Negro

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: