Especificar um modelo de detecção facial

Este guia mostra como especificar um modelo de detecção facial para o serviço de Detecção Facial da IA do Azure.

O serviço de Detecção Facial usa modelos de machine learning para executar operações em rostos humanos em imagens. Continuamos aprimorando a precisão de nossos modelos com base no feedback do cliente e nos avanços na pesquisa e oferecemos esses aprimoramentos como atualizações de modelo. Os desenvolvedores podem especificar qual versão do modelo de detecção facial gostaria de usar, eles podem escolher o modelo que melhor se adapta ao caso de uso deles.

Continue lendo para saber como especificar o modelo de detecção facial em determinadas operações de detecção facial. O serviço de Detecção Facial usa a detecção facial sempre que converte uma imagem de um rosto em alguma outra forma de dados.

Se você não tiver certeza se deve usar o modelo mais recente, vá para a seção Avaliar diversos modelos para avaliar o novo modelo e comparar os resultados usando seu conjunto de dados atual.

Pré-requisitos

Você deve estar familiarizado com o conceito de detecção facial de IA. Se não estiver, confira o guia conceitual de detecção facial ou o guia de instruções:

Avaliar diversos modelos

Os diferentes modelos de detecção facial são otimizados para tarefas diferentes. Confira a tabela a seguir para obter uma visão geral das diferenças.

Modelar Descrição Observações sobre desempenho Pontos de referência
detection_01 Opção padrão para todas as operações de detecção facial. Não otimizado para rostos pequenos, de visão lateral ou desfocados. Retorna os pontos de referência do rosto se eles forem especificados na chamada de detecção.
detection_02 Lançado em maio de 2019 e disponível opcionalmente em todas as operações de detecção facial. Precisão aprimorada em rostos pequenos, de visão lateral e desfocados. Não retorna pontos de referência do rosto.
detection_03 Lançado em fevereiro de 2021 e disponível opcionalmente em todas as operações de detecção facial. Maior precisão aprimorada, incluindo em rostos menores (64 x 64 pixels) e orientações de rosto giradas. Retorna os pontos de referência do rosto se eles forem especificados na chamada de detecção.

Atributos são um conjunto de recursos que poderão ser opcionalmente detectados se foram especificados na chamada de detecção:

Modelar acessórios desfoque exposição óculos headPose mask noise occlusion qualityForRecognition
detection_01 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ (para recognition_03 ou 04)
detection_02
detection_03 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ (para recognition_03 ou 04)

A melhor maneira de comparar o desempenho dos modelos de detecção é usá-los em um conjunto de dados de exemplo. Recomendamos chamar a API Detectar em uma variedade de imagens, especialmente imagens de muitos rostos ou de rostos difíceis de ver, usando cada modelo de detecção. Preste atenção ao número de rostos que cada modelo retorna.

Detectar rostos com o modelo especificado

A detecção facial localiza os locais da caixa delimitadora de rostos humanos e identifica seus pontos de referência visuais. Ela extrai as características do rosto e as armazena para uso posterior em operações de reconhecimento.

Quando você usa a API Detectar API, você pode atribuir a versão do modelo com o parâmetro detectionModel. Os valores disponíveis são:

  • detection_01
  • detection_02
  • detection_03

Uma URL de solicitação para a API REST Detectar terá a seguinte aparência:

https://westus.api.cognitive.microsoft.com/face/v1.0/detect?detectionModel={detectionModel}&recognitionModel={recognitionModel}&returnFaceId={returnFaceId}&returnFaceAttributes={returnFaceAttributes}&returnFaceLandmarks={returnFaceLandmarks}&returnRecognitionModel={returnRecognitionModel}&faceIdTimeToLive={faceIdTimeToLive}

Se você estiver usando a biblioteca de clientes, poderá atribuir o valor para detectionModel passando uma cadeia de caracteres apropriada. Se você o deixar sem atribuição, a API usará a versão de modelo padrão (detection_01). Confira o exemplo de código a seguir para a biblioteca de cliente .NET.

string imageUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/detection1.jpg";
var response = await faceClient.DetectAsync(new Uri(imageUrl), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false, returnFaceLandmarks: false);
var faces = response.Value;

Adicionar rostos a Person com o modelo especificado

O serviço de Detecção Facial pode extrair dados de rosto de uma imagem e associá-los a um objeto Pessoa por meio da API Adicionar Rosto de Pessoa ao Grupo de Pessoas. Nessa chamada de API, você pode especificar o modelo de detecção da mesma forma que em Detectar.

Confira o seguinte exemplo de código do .NET.

// Create a PersonGroup and add a person with face detected by "detection_03" model
string personGroupId = "mypersongroupid";
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["name"] = "My Person Group Name", ["recognitionModel"] = "recognition_04" }))))
{
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    await httpClient.PutAsync($"{ENDPOINT}/face/v1.0/persongroups/{personGroupId}", content);
}

string? personId = null;
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["name"] = "My Person Name" }))))
{
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    using (var response = await httpClient.PostAsync($"{ENDPOINT}/face/v1.0/persongroups/{personGroupId}/persons", content))
    {
        string contentString = await response.Content.ReadAsStringAsync();
        personId = (string?)(JsonConvert.DeserializeObject<Dictionary<string, object>>(contentString)?["personId"]);
    }
}

string imageUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/detection1.jpg";
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["url"] = imageUrl }))))
{
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    await httpClient.PostAsync($"{ENDPOINT}/face/v1.0/persongroups/{personGroupId}/persons/{personId}/persistedfaces?detectionModel=detection_03", content);
}

Esse código cria um PersonGroup com ID mypersongroupid e adiciona um Person a ele. Em seguida, ele adiciona um rosto a essa Person usando o modelo detection_03. Se você não especificar o parâmetro detectionModel, a API usará o modelo padrão, detection_01.

Observação

Não é necessário usar o mesmo modelo de detecção para todos os rostos em um objeto Pessoa e não é necessário usar o mesmo modelo de detecção ao detectar novos rostos para comparar com um objeto Pessoa (na API Identificar a partir de um Grupo de Pessoas, por exemplo).

Adicionar rosto à FaceList com o modelo especificado

Você também pode especificar um modelo de detecção ao adicionar um rosto a um objeto FaceList existente. Confira o seguinte exemplo de código do .NET.

using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["name"] = "My face collection", ["recognitionModel"] = "recognition_04" }))))
{
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    await httpClient.PutAsync($"{ENDPOINT}/face/v1.0/facelists/{faceListId}", content);
}

string imageUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/detection1.jpg";
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["url"] = imageUrl }))))
{
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    await httpClient.PostAsync($"{ENDPOINT}/face/v1.0/facelists/{faceListId}/persistedfaces?detectionModel=detection_03", content);
}

Esse código cria uma FaceList chamada My face collection e adiciona um rosto a ela com o modelo detection_03. Se você não especificar o parâmetro detectionModel, a API usará o modelo padrão, detection_01.

Observação

Você não precisa usar o mesmo modelo de detecção para todas os rostos em um objeto FaceList e não precisa usar o mesmo modelo de detecção ao detectar novos rostos para comparar com um objeto FaceList.

Próximas etapas

Neste artigo, você aprendeu a especificar o modelo de detecção para usar com diferentes APIs de Detecção Facial. Em seguida, siga um guia de início rápido para começar a usar a detecção facial e a análise.