NVIDIA AR SDK permite el modelado y seguimiento en tiempo real de rostros humanos a partir de video.

NVIDIA AR SDK

En esta oportunidad vamos a estar analizando los nuevos operadores FaceTracking SOP/CHOP, los cuales utilizan la tecnología RTX Nvidia’s Face Tracking AR SDK. 
El AR SDK permite el seguimiento 3D en tiempo real del rostro de una persona mediante una cámara web estándar.

Esta tecnología puede obtener 126 puntos faciales de referencia, para su detección y seguimiento: predice y rastrea las ubicaciones de referencias faciales humanas, también puede rastrear el movimiento de la cabeza sobre los ejes XYZ en imágenes o videos.

Además de las marcas tradicionales Multi-PIE de 68 puntos, detecta y rastrea más rasgos faciales, como líneas de risa, globos oculares, contornos de cejas, a ~ 800 FPS en una GeForce RTX 2060.

Utilizando las herramientas que ofrece Touchdesigner, podemos desarrollar diversos proyectos aprovechando al máximo esta nueva tecnología de trackeo facial.


NVIDIA AR SDK utiliza Tensor Cores en las GPU NVIDIA RTX para permitir un seguimiento rápido y de alta calidad a través de una red de inteligencia artificial. Esta red puede ofrecer un seguimiento facial preciso; seguimiento de los puntos de referencia del rostro de la forma del rostro, labios, ojos, cejas y nariz con 3 grados de libertad; y una malla facial avanzada (una reconstrucción en 3D de un rostro humano y una postura de la cabeza) con 6 grados de libertad.

Tuve que instalar la actualización de los drivers en mi placa, ya que tenia una versión mas baja a la requerida, estoy utilizando la versión 465.89, se puede descargar del siguiente link

Recuerde tener instalado los drivers Nvidia AR SDK Link

 

 

TOUCHDESIGNER

Con el lanzamiento de la actualización  2021.12380   se incorporan los operadores Face Track Chop y Face Track Sop,

FaceTrack Chop

  • Proporciona seguimiento facial de alto rendimiento a través del SDK AR de seguimiento facial de Nvidia. Requiere Windows y Nvidia RTX GPU.
  • Este operador utiliza Nvidia Brodcast Engine , la imagen de entrada se toma desde un Op Top proporcionado, el cual puede ser una cámara en vivo, un video o imagen estática.
  • Si hay varios rostros presentes en una imagen, el CHOP intentará rastrear el más grande detectado.
    FaceTrack Sop
  • Genera una malla de la caras detectadas a partir del Op Face Track CHOP que se menciona de arriba.
  • Puede cargarse directamente a la GPU para renderizar o pasar a otros SOP para modificaciones adicionales.
  • Las posiciones x, y son iguales a las posiciones u, v de la imagen.
  • La malla aún se puede alinear con la imagen usando los canales tx, ty, rx, etc. de Face Track CHOP

Nota: Para utilizar esta función, deberá proporcionar un archivo de malla de caras transformable en 3D, compatible con el formato Nvidia ‘nvf’, se coloca en el parámetro ‘Archivo de malla’ de Face Track CHOP .


Este archivo no se incluye con TouchDesigner, pero se puede generar utilizando proyectos disponibles en línea, los cuales veremos a continuación.

Para crear el archivo:

1. Descargue los archivos de Surrey Face Model del proyecto eos en GitHub :

  • sfm_shape_3448.bin
  • expression_blendshapes_3448.bin
  • sfm_3448_edge_topology.json
  • sfm_model_contours.json
  • ibug_to_sfm.txt

2. Descargue la herramienta de conversión de malla ConvertSurreyFaceModel.exe desde la página Nvidia AR SDK en GitHub

3. Ejecute la herramienta de conversión para generar el archivo nvf. La ‘ruta’ solo es necesaria si los archivos del modelo están en una carpeta diferente a la de la herramienta de conversión.

 

ConvertSurreyFaceModel.exe --shape=path/sfm_shape_3448.bin --blend_shape=path/expression_blendshapes_3448.bin --topology=path/sfm_3448_edge_topology.json --contours=path/sfm_model_contours.json --ibug=path/ibug_to_sfm.txt --out=output-path/face_model0.nvf

Código:

ConvertSurreyFaceModel.exe –shape=path/sfm_shape_3448.bin –blend_shape=path/expression_blendshapes_3448.bin –topology=path/sfm_3448_edge_topology.json –contours=path/sfm_model_contours.json –ibug=path/ibug_to_sfm.txt –out=output-path/face_model0.nvf


Para este ejemplo cree un carpeta en escritorio de windows, la cual llame temp, dentro coloque los archivos descargados del punto 1. y los coloque en sus respectivas carpetas como muestra el código.
Notamos en el código que hace referencia a la carpeta path «=path/» , creamos esa carpeta y colocamos dentro los archivos, luego creamos la carpeta output-path, en esta carpeta se genera el archivo nfv que necesitamos para continuar.

Para ejecutar el código estoy utilizando Anaconda. (pueden utilizar la consola CMD de Windows)

Abrimos la consola de comandos, y hacemos referencia a la carpeta donde se encuentran estos archivos.


Para mi ruta de carpeta el comando utilizando es: cd C:\Users\tolch\Desktop\temp\output-path

Luego ejecutamos la herramienta de conversión para generar el archivo nvf:


Ahora que tenemos nuestro archivo de masha, podemos continuar dentro de Touchdesigner.

Cuando colocamos los operadores en nuestro sistema, podemos notar que aparecen advertencias de error.


Esto se debe a que el operador FaceTrack Chop, necesita del archivo masha nvf que creamos en el paso anterior, y también un operador TOP de referencia, el cual puede ser un Op VideoDeviceIn si queremos usar una cámara en tiempo real, o un Op MovieFileIn si se quiere utilizar un video o imagen estática, donde aparezca algún rostro humano.

Una configuración básica de los operadores es la siguiente:

En el operador FaceTrack Chop, necesita activar la corrección de aspecto.

Podemos generar un sistema un poco mas complejo, haciendo unos ajustes en los componentes de cámara y geometría, sincronizamos el mesh 3D con nuestra cara, capturada por la webcam.

Para alinear una representacion 3D de los puntos, con la imagen de entrada TOP, el componente de cámara tendrá que ser adaptado, modificando los parámetros.
Projection = Orthographic
Ortho Origin = Buttom-Left
Ortho Width = 1

Descargar ejemplo: Archivo Toe.

En este ejemplo que les comparto, pueden ajustar los parámetros para que la coincidencia de posición sea mas precisa, deben ajustar los valores de los operadores componentes.
Es probable que haya mejores formas de hacer la sincronización entre los elementos, esta es una primera prueba, iré actualizando con mas información el post.

68 Puntos , Multi-PIE


El sistema nos proporciona una buena cantidad de puntos faciales, de esta forma podemos asignar esas coordenadas a diferentes objetos o acciones dentro de TD.
Un ejemplo simple es posicionar circulas en esos puntos de referencia.

Activamos la opción en el parámetro Number of Landmarks , del operador FaceTrack Chop.

Seleccionamos los canales que vamos a usar, face1:rz y face1/pt*  (*) hace referencia a todos los valores numéricos de /pt

Suavizamos los valores utilizando el operador Filter Chop

Generamos una cadena con los  chops Shuffle, Shift, Rename y Math , establecemos los parámetros que se muestran a continuación.

Shuffle: Secuenciamos todos los canales que obtenemos de FaceTracker Chop, utilizando 2 valores, en este caso serán las coordenadas u v

Shift: Determinamos los parámetros de inicio y final en absoluto, para que comience desde 0

Rename: Cambiamos el nombre de las variables por X Y

Math: Ajustamos los valores en el eje Y , para una mejor calibración de los puntos.

 

Ahora podemos hacer un merge de las variables X Y Z y sus nuevos rangos de valores.

Dentro de nuestra geometría debemos colocar un pequeño circulo.

Estos datos se usan para generar las instancias en nuestro componente Geo

De esta manera obtendremos la representación del rostro a través de circulas.


Espero que les sea útil esta información, es probable que arme un video tutorial mas extenso para seguir avanzando en esta área de Face Tracking, la cual aporta muchas nuevas posibilidades para desarrollar proyectos.

Si tiene algún problema de compatibilidad recuerde instalar Nvidia Brodcast Engine , que nos proporciona los drivers necesarios, junto a la  SDK , y a la actualización de los drivers gráficos

Se reportaron algunos casos de error «Failed to load feature: The file could not be found»
en la serie de placas RTX 30xx.

Referencia de instanciado : Greg Hermanovic 

Wiki TD:
Face_Track_CHOP
Face_Track_SOP

NVIDIA AR SDK: API Source Code and Sample Applications

 

 

Share this: