Explorando o novo parâmetro “faces” na detecção facial em imagens

Já faz um tempo desde que o Robot /image/facedetect
apareceu em um post do blog. E não há momento melhor para falar dele do que com sua versão mais
recente, o parâmetro faces.
O Robot /image/facedetect identifica automaticamente onde estão os rostos em uma imagem, retorna as coordenadas, recorta em torno de um grupo ou cria imagens totalmente novas de cada rosto encontrado.

Apresentando os recursos do novo parâmetro
Antes desta atualização, o Robot /image/facedetect recortava todos os rostos encontrados. Então, se você tivesse uma imagem com cinco rostos, acabaria com cinco imagens menores, cada uma contendo um único rosto.
Embora essa opção continue disponível e tenha se mostrado bastante útil, há outras situações em que
ela não é suficiente. Para compensar as limitações do Robot, o novo parâmetro
faces entra em cena com a capacidade de controlar qual rosto é usado no recorte, com base
em determinados atributos da imagem usada.
A demonstração a seguir usa uma imagem gratuita encontrada no Unsplash.
Conhecendo os novos valores do parâmetro
Veja o script que criei em Python para testar o novo 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
No programa acima, usamos a seguinte imagem de entrada:

Não se esqueça de substituir YOUR_TRANSLOADIT_KEY e YOUR_TRANSLOADIT_SECRET pelas chaves reais da sua
conta. Você pode encontrá-las nas Configurações da API da sua conta.
Nos exemplos abaixo, mostrarei apenas a parte do código que foi alterada com um novo valor para o
parâmetro faces, ou seja, a linha 8.
Valor: "group"
Este é um recurso totalmente novo. group funciona determinando onde estão os rostos em uma
imagem e agrupando-os.
assembly.add_step("face-detect", "/image/facedetect", { "crop": True, "faces": "group"} )
Com isso, podemos ver os seguintes resultados:

Valor: "each"
Este é o modo de operação original e o padrão. "each" é usado para retornar cada rosto
individualmente. Isso pode ser útil para extrair vários avatares de uma única foto escolar ou,
talvez, para descobrir facilmente quantos rostos aparecem em uma imagem.
assembly.add_step("face-detect", "/image/facedetect", { "crop": True, "faces": "each"} )
Com isso, podemos ver os seguintes resultados:

Valor: "max-confidence"
Em terceiro lugar, veremos o que acontece quando você define faces com o valor "max-confidence". Você
verá que ele pega a imagem e gera o único rosto com o maior valor de confiança. Esse valor é
definido por uma rede neural nos bastidores, que nos fornece um valor de confiança indicando o grau
de certeza de que a parte detectada realmente contém um rosto. Isso é útil para recortar um avatar
automaticamente.
assembly.add_step("face-detect", "/image/facedetect", { "crop": True, "faces": "max-confidence"} )
Com isso, podemos ver os seguintes resultados:

Valor: "max-size"
O quarto valor analisado é "max-size". Esse valor calcula qual dos rostos encontrados tem a
maior área e gera o resultado. Isso extrai o rosto dominante de uma imagem, mas não necessariamente
aquele com o maior valor de confiança.
assembly.add_step("face-detect", "/image/facedetect", { "crop": True, "faces": "max-size"} )
Com isso, podemos ver os seguintes resultados:

Valor: inteiro
O quinto e último valor analisado é, bem, qualquer número inteiro. Esse valor escolhe um rosto da
imagem usando um índice, em que cada rosto da imagem é ordenado a partir do canto superior esquerdo.
Isso é útil se você quiser que um usuário final escolha um rosto em duas etapas. Ou talvez você
queira escolher a segunda pessoa a partir da esquerda em uma foto; nesse caso, você especificaria
1, já que esse número é indexado a partir de zero.
assembly.add_step("face-detect", "/image/facedetect", { "crop": True, "faces": 1} )
Com isso, podemos ver os seguintes resultados:

Isso encerra nossa visão geral do novo parâmetro do Robot
/image/facedetect, chamado faces.
Estamos ansiosos para ver o que você vai criar com esses novos recursos em combinação com
todos os outros Robots/recursos à sua disposição.