Partilhar via


Chamar a API de deteção

Atenção

O acesso ao serviço presencial é limitado com base em critérios de elegibilidade e uso, a fim de apoiar nossos princípios de IA responsável. O serviço Face só está disponível para clientes e parceiros geridos pela Microsoft. Use o formulário de admissão de Reconhecimento Facial para solicitar acesso. Para obter mais informações, consulte a página Acesso limitado Face.

Atenção

A Microsoft aposentou os recursos de reconhecimento facial que podem ser usados para tentar inferir estados emocionais e atributos de identidade que, se usados indevidamente, podem sujeitar as pessoas a estereótipos, discriminação ou negação injusta de serviços. Estes incluem capacidades que predizem emoção, sexo, idade, sorriso, pelos faciais, cabelo e maquilhagem. Leia mais sobre esta decisão aqui.

Este guia demonstra como usar a API de deteção de rosto para extrair atributos de uma determinada imagem. Você aprenderá as diferentes maneiras de configurar o comportamento dessa API para atender às suas necessidades.

Os trechos de código neste guia são escritos em C# usando a biblioteca de cliente do Azure AI Face. A mesma funcionalidade está disponível através da API REST.

Configurar

Este guia pressupõe que você já construiu um objeto FaceClient , chamado faceClient, usando uma chave Face e uma URL de ponto de extremidade. Para obter instruções sobre como configurar esse recurso, siga um dos inícios rápidos.

Enviar dados ao serviço

Para encontrar rostos e obter suas localizações em uma imagem, chame o DetectAsync. Ele usa uma cadeia de caracteres de URL ou o binário de imagem bruta como entrada.

var response = await faceClient.DetectAsync(new Uri(imageUrl), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false);
IReadOnlyList<FaceDetectionResult> faces = response.Value;

O serviço retorna um objeto FaceDetectionResult , que você pode consultar para diferentes tipos de informações, especificadas abaixo.

Para obter informações sobre como analisar a localização e as dimensões do rosto, consulte FaceRectangle. Normalmente, este retângulo contém os olhos, sobrancelhas, nariz e boca. O topo da cabeça, orelhas e queixo não estão necessariamente incluídos. Para usar o retângulo facial para cortar uma cabeça completa ou obter um retrato no meio da foto, você deve expandir o retângulo em cada direção.

Determinar como processar os dados

Este guia se concentra nas especificidades da chamada Detetar, como quais argumentos você pode passar e o que pode fazer com os dados retornados. Recomendamos que você consulte apenas os recursos necessários. Cada operação leva mais tempo para ser concluída.

Obter ID facial

Se você definir o parâmetro returnFaceId como true (somente clientes aprovados), poderá obter o ID exclusivo para cada rosto, que poderá ser usado em tarefas posteriores de reconhecimento facial.

foreach (var face in faces)
{
    string id = face.FaceId.ToString();
    FaceRectangle rect = face.FaceRectangle;
}

O parâmetro opcional faceIdTimeToLive especifica por quanto tempo (em segundos) o face ID deve ser armazenado no servidor. Após este tempo expirar, o ID do rosto é removido. O valor padrão é 86400 (24 horas).

Obter pontos de referência de rosto

Pontos de referência faciais são um conjunto de pontos fáceis de encontrar em um rosto, como as pupilas ou a ponta do nariz. Para obter dados de pontos de referência faciais, defina o parâmetro detectionModel como FaceDetectionModel.Detection03 e o parâmetro returnFaceLandmarks como true.

// Note DetectionModel.Detection02 cannot be used with returnFaceLandmarks.
var response2 = await faceClient.DetectAsync(new Uri(imageUrl), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false, returnFaceLandmarks: true);
IReadOnlyList<FaceDetectionResult> faces2 = response2.Value;

Obter atributos de rosto

Além de retângulos faciais e pontos de referência, a API de deteção de rosto pode analisar vários atributos conceituais de um rosto. Para obter uma lista completa, consulte a seção conceitual Atributos do rosto.

Para analisar atributos de face, defina o parâmetro detectionModel como FaceDetectionModel.Detection03 e o parâmetro returnFaceAttributes como uma lista de valores Enum FaceAttributeType.

var requiredFaceAttributes = new FaceAttributeType[] {
    FaceAttributeType.Detection03.Blur,
    FaceAttributeType.Detection03.HeadPose,
    FaceAttributeType.Detection03.Mask,
    FaceAttributeType.Recognition04.QualityForRecognition
};
// Note DetectionModel.Detection02 cannot be used with returnFaceAttributes.
var response3 = await faceClient.DetectAsync(new Uri(imageUrl), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false, returnFaceAttributes: requiredFaceAttributes);
IReadOnlyList<FaceDetectionResult> faces3 = response3.Value;

Obter resultados do serviço

Resultados marcantes faciais

O código a seguir demonstra como você pode recuperar os locais do nariz e das pupilas:

foreach (var face in faces2)
{
    var landmarks = face.FaceLandmarks;

    double noseX = landmarks.NoseTip.X;
    double noseY = landmarks.NoseTip.Y;

    double leftPupilX = landmarks.PupilLeft.X;
    double leftPupilY = landmarks.PupilLeft.Y;

    double rightPupilX = landmarks.PupilRight.X;
    double rightPupilY = landmarks.PupilRight.Y;

Você também pode usar dados de marco facial para calcular com precisão a direção do rosto. Por exemplo, você pode definir a rotação do rosto como um vetor do centro da boca para o centro dos olhos. O código a seguir calcula esse vetor:

    var upperLipBottom = landmarks.UpperLipBottom;
    var underLipTop = landmarks.UnderLipTop;

    var centerOfMouth = new Point(
        (int)((upperLipBottom.X + underLipTop.X) / 2),
        (int)((upperLipBottom.Y + underLipTop.Y) / 2));

    var eyeLeftInner = landmarks.EyeLeftInner;
    var eyeRightInner = landmarks.EyeRightInner;

    var centerOfTwoEyes = new Point(
        (int)((eyeLeftInner.X + eyeRightInner.X) / 2),
        (int)((eyeLeftInner.Y + eyeRightInner.Y) / 2));

    var faceDirectionVectorX = centerOfTwoEyes.X - centerOfMouth.X;
    var faceDirectionVectorY = centerOfTwoEyes.Y - centerOfMouth.Y;
}

Quando você sabe a direção do rosto, você pode girar a moldura retangular do rosto para alinhá-lo mais corretamente. Para cortar rostos em uma imagem, você pode girá-la programaticamente para que os rostos sempre apareçam na vertical.

Resultados dos atributos faciais

O código a seguir mostra como você pode recuperar os dados do atributo face que você solicitou na chamada original.

foreach (var face in faces3)
{
    var attributes = face.FaceAttributes;
    var blur = attributes.Blur;
    var headPose = attributes.HeadPose;
    var mask = attributes.Mask;
    var qualityForRecognition = attributes.QualityForRecognition;
}

Para saber mais sobre cada um dos atributos, consulte o Guia conceitual de deteção de rosto e atributos .

Próximos passos

Neste guia, você aprendeu como usar as várias funcionalidades de deteção e análise facial. Em seguida, integre esses recursos em um aplicativo para adicionar dados faciais dos usuários.