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 método DetectWithUrlAsync ou DetectWithStreamAsync. DetectWithUrlAsync usa uma cadeia de caracteres de URL como entrada e DetectWithStreamAsync usa o fluxo de bytes brutos de uma imagem como entrada.

IList<DetectedFace> faces = await faceClient.Face.DetectWithUrlAsync(url: imageUrl, returnFaceId: false, detectionModel: DetectionModel.Detection03);

O serviço retorna um objeto DetectedFace , 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 e o parâmetro returnFaceLandmarks como DetectionModel.Detection01true.

// Note DetectionModel.Detection02 cannot be used with returnFaceLandmarks.
IList<DetectedFace> faces2 = await faceClient.Face.DetectWithUrlAsync(url: imageUrl, returnFaceId: false, returnFaceLandmarks: true, detectionModel: DetectionModel.Detection01);

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 e o parâmetro returnFaceAttributes como DetectionModel.Detection01 uma lista de valores Enum FaceAttributeType.

var requiredFaceAttributes = new FaceAttributeType[] {
    FaceAttributeType.HeadPose,
    FaceAttributeType.Glasses,
    FaceAttributeType.QualityForRecognition
};
// Note DetectionModel.Detection02 cannot be used with returnFaceAttributes.
var faces3 = await faceClient.Face.DetectWithUrlAsync(url: imageUrl, returnFaceId: false, returnFaceAttributes: requiredFaceAttributes, detectionModel: DetectionModel.Detection01, recognitionModel: RecognitionModel.Recognition04);

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(
        (upperLipBottom.X + underLipTop.X) / 2,
        (upperLipBottom.Y + underLipTop.Y) / 2);

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

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

    Vector faceDirection = new Vector(
        centerOfTwoEyes.X - centerOfMouth.X,
        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 headPose = attributes.HeadPose;
    var glasses = attributes.Glasses;
    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.