Deface, potente herramienta para censurar rostros en videos y fotos

[h]Deface, potente herramienta para censurar rostros en videos y fotos [/h]
¡Muy buenas a tod@s!

Hoy les voy a hablar de deface, una herramienta escrita en python, que difumina automáticamente las caras en las imágenes y los videos .
No estoy al tanto de los detalles legales pero sé cómo todo el mundo que cada uno tiene “derecho de autores” sobre su imagen y que la recién legislación europea para la protección de los datos privados reafirma este principio en la via publica y en la web.
El uso de filtros para desenfocar automáticamente las caras de las personas en las fotos de google streets confirma que no hacerlo supone un riesgo jurídico.

Más allá de las consideraciones legales hay miles de situaciones que generan dilemas éticos,
Tomando un ejemplo muy concreto, personalmente no pondría en mi Facebook. Instagram etc… fotos o videos con las caras de mis hij@s.
Consideraría que son ell@s quienes deben elegir cuándo y cómo se expondrán en la redes (si quieren).
Cuál sea nuestro motivo, Deface está aquí para sacar sencillamente la espina que tenemos clavada.
[h]Instalación[/h]
Siguiendo la instrucciones del repositorio github de deface se recomienda emplear el gestor de paquetes de pỳthon: pip.

python3 -m pip install deface

Tendremos en un sistema “vanilla” a esta advertencia

WARNING: The scripts imageio_download_bin and imageio_remove_bin are installed in '/home/kcdtv/.local/bin' which is not on PATH. Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location. WARNING: The scripts lsm2bin, tiff2fsspec, tiffcomment and tifffile are installed in '/home/kcdtv/.local/bin' which is not on PATH. Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location. WARNING: The script skivi is installed in '/home/kcdtv/.local/bin' which is not on PATH. Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location. WARNING: The script tqdm is installed in '/home/kcdtv/.local/bin' which is not on PATH. Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location. WARNING: The script deface is installed in '/home/kcdtv/.local/bin' which is not on PATH. Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Para probar el programa sin tocar la configuración del sistema debemos simplemente situar la consola en la ruta indicada.

cd /home/kcdtv/.local/bin

[h]Uso[/h]
Para mirar las opciones hacemos

deface -h

[code]usage: deface --output O] --thresh T] --scale WxH] --preview] --boxes]
–draw-scores] --mask-scale M]
–replacewith {blur,solid,none}]
–ffmpeg-config FFMPEG_CONFIG] --backend {auto,onnxrt,opencv}]
–version] --help]
[input [input …]]

Video anonymization by face detection

positional arguments:
input File path(s) or camera device name. It is possible to
pass multiple paths by separating them by spaces or by
using shell expansion (e.g. $ deface vids/*.mp4). If
a camera is installed, a live webcam demo can be
started by running $ deface cam (which is a shortcut
for $ deface -p '<video0>'.

optional arguments:
–output O, -o O Output file name. Defaults to input path + postfix
“_anonymized”.
–thresh T, -t T Detection threshold (tune this to trade off between
false positive and false negative rate). Default: 0.2.
–scale WxH, -s WxH Downscale images for network inference to this size
(format: WxH, example: --scale 640x360).
–preview, -p Enable live preview GUI (can decrease performance).
–boxes Use boxes instead of ellipse masks.
–draw-scores Draw detection scores onto outputs.
–mask-scale M Scale factor for face masks, to make sure that masks
cover the complete face. Default: 1.3.
–replacewith {blur,solid,none}
Anonymization filter mode for face regions. “blur”
applies a strong gaussian blurring, “solid” draws a
solid black box and “none” does leaves the input
unchanged. Default: “blur”.
–ffmpeg-config FFMPEG_CONFIG
FFMPEG config arguments for encoding output videos.
This argument is expected in JSON notation. For a list
of possible options, refer to the ffmpeg-imageio docs.
Default: ‘{“codec”: “libx264”}’.
–backend {auto,onnxrt,opencv}
Backend for ONNX model execution. Default: “auto”
(prefer onnxrt if available).
–version Print version number and exit.
–help, -h Show this help message and exit.
[/code]
Tenemos a una opción “preview” que viene bien para probar las opciones.
Me saco un selfi para probar deface a palos secos:

./deface --preview '/ruta/selfi.jpg'

Se abre una ventana emergente con el resultado:

Cerramos con la tecla Q o Esc
Para hacer por ejemplo cuadrados negros en lugar de círculos difuminados sería así:

 ./deface --preview --boxes --replacewith solid '/ruta/Imágen.jpg'


El algoritmo para reconocer los rosotros funciona de maravilla.:plus_un:
Además podemos parametrizar el algoritmo de detección mirando el indice de cada zona censurada haciendo uso de la opción ** --thresh** (valor por defecto 0.2).

./deface --preview --draw-scores '/ruta/foto.jpg' 


En este caso se han detectado correctamente todas las caras, la zona censurada es un poco gorda,podemos reducirla con la opción ** --mask-scale**
El valor por defecto es 1.3, a mi me basta con 0.9 y prefiero la forma cuadrada

 ./deface --preview --mask-scale 0.9  --boxes  '/home/kcdtv/Imágenes/índice2.jpeg' 


[h]Censurar videos[/h]
Si no estás familiarizado con la edición de videos debes saber que consume recursos por un tubo.
Con lo cuál es interesante destacar que deface permite el uso de la aceleración mediante hardware GPU compatbiles con CUDA
Hay que instalar (mediante pip) onnx y deface usará estos recursos extras de forma automática.

 python3 -m pip install onnx onnxruntime-gpu

Otro punto a tomar en cuenta es la calidad del video.
Si es superior a 720p el algoritmo de detección puede fallar y el gasto de recursos será máximo.
Para obtener un buen resultado y reducir el consumo de recursos tenemos a la opción** --scale**
Para un video en ratio 16:9 con alta definición podríamos probar en resolución 360p con

--scale 640x360

La bueno es que no afectará la cualidad, se trabaja en 360p para censurar y se vuelve a 720p o más para el resultado final.

La precisión de la detección de rostros es bastante impresionante con los parámetros por defecto.
Podéis ver a continuación el resultado puesto en formato gif de un video de alta definición en una manifestación

¡No deja pasar ni un solo rostro! :cool:

fuentes

  1. Deface by ORB-HD @ Github/*]
  2. Journal Deface: flouter simplement et automatiquement les visages dans une vidéo by Élafru @ linuxfr/*]
  3. Comment flouter les visages facilement ? by Korben/*]