Explorando el nuevo parámetro «faces» en la detección facial de imágenes

Ha pasado un tiempo desde que el Robot
/image/facedetect apareció en un blog. Y no hay mejor momento para
hablar de él que con su iteración más reciente, el parámetro faces.
El Robot /image/facedetect localiza automáticamente dónde están los rostros en una imagen, devuelve las coordenadas, recorta alrededor de un grupo o crea imágenes completamente nuevas de cada rostro encontrado.

Presentación de las funciones del nuevo parámetro
Antes de esta actualización, el Robot /image/facedetect recortaba cada rostro encontrado. Así que, si tenías una imagen con cinco rostros, terminabas con cinco imágenes más pequeñas que contenían un solo rostro cada una.
Si bien esta opción sigue presente y ha resultado bastante útil, hay otras circunstancias en las que
no es suficiente. Para compensar las carencias del Robot,
entra en juego el nuevo parámetro faces, con su capacidad de controlar qué
rostro se usa para el recorte según ciertos atributos de la imagen utilizada.
La siguiente demostración utiliza una imagen gratuita encontrada en Unsplash.
Conociendo los valores del nuevo parámetro
Este es el script que hice en Python para probar el nuevo parámetro:
# pip install pytransloadit
from transloadit import client
tl = client.Transloadit('YOUR_TRANSLOADIT_KEY', 'YOUR_TRANSLOADIT_SECRET')
assembly = tl.new_assembly()
assembly.add_file(open("test.jpg", "rb"))
assembly.add_step("face-detect", "/image/facedetect", { "crop": True, "faces": "each"} )
# Start the Assembly
response = assembly.create(wait=True)
result_url = response.data.get('results').get('face-detect')
print("Your result:", result_url) #returns a url containing the result of the program
En el programa anterior, usamos la siguiente imagen de entrada:

Asegúrate de reemplazar YOUR_TRANSLOADIT_KEY y YOUR_TRANSLOADIT_SECRET por las
claves reales de tu cuenta. Puedes encontrarlas en la Configuración de API
de tu cuenta.
En los ejemplos siguientes, solo mostraré la parte del código que cambia con un nuevo valor para el
parámetro faces, es decir, la línea 8.
Valor: "group"
Esta es una función completamente nueva. group funciona determinando dónde
están los rostros dentro de una imagen y agrupándolos.
assembly.add_step("face-detect", "/image/facedetect", { "crop": True, "faces": "group"} )
A partir de esto, podemos ver los siguientes resultados:

Valor: "each"
Este es el modo de funcionamiento original y el predeterminado.
"each" se usa para devolver cada rostro individualmente. Esto puede resultar
útil para extraer muchos avatares de una sola foto escolar o quizá para averiguar fácilmente cuántos
rostros aparecen en una imagen.
assembly.add_step("face-detect", "/image/facedetect", { "crop": True, "faces": "each"} )
A partir de esto, podemos ver los siguientes resultados:

Valor: "max-confidence"
En tercer lugar, veremos qué ocurre cuando estableces faces en el valor
"max-confidence". Verás que toma la imagen y produce el único rostro con el valor de
confianza más alto. Este valor lo establece una red neuronal en segundo plano, que nos brinda un
valor de confianza que indica el grado de certeza de que la parte detectada realmente contiene un
rostro. Esto es útil para recortar un avatar automáticamente.
assembly.add_step("face-detect", "/image/facedetect", { "crop": True, "faces": "max-confidence"} )
A partir de esto, podemos ver los siguientes resultados:

Valor: "max-size"
El cuarto valor que veremos es "max-size". Este valor calcula cuál de los
rostros encontrados tiene la mayor superficie y produce ese resultado. Esto extraerá el rostro
dominante de una imagen, pero no necesariamente el que tenga el valor de confianza más alto.
assembly.add_step("face-detect", "/image/facedetect", { "crop": True, "faces": "max-size"} )
A partir de esto, podemos ver los siguientes resultados:

Valor: entero
El quinto y último valor que veremos es, bueno, cualquier entero. Este valor elige un rostro de la
imagen mediante un índice, donde cada rostro de la imagen se ordena desde la esquina superior
izquierda. Esto es útil si quieres que un usuario final elija un rostro en dos pasadas. O quizá
quieras elegir a la segunda persona empezando por la izquierda de una foto, en cuyo caso
especificarías 1, ya que este número empieza a contar desde cero.
assembly.add_step("face-detect", "/image/facedetect", { "crop": True, "faces": 1} )
A partir de esto, podemos ver los siguientes resultados:

Con esto llegamos al final de nuestro repaso del
Robot /image/facedetect y su
nuevo parámetro faces. Esperamos ver lo que construirás con estas nuevas
funciones en combinación con todos los demás Robots/funciones a tu
disposición.