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.
Artigos relacionados
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários