Anropa identifierings-API:et
Den här guiden visar hur du använder ansiktsavkännings-API:et för att extrahera attribut som ålder, känsla eller huvudställning från en viss bild. Du lär dig olika sätt att konfigurera beteendet för det här API:et för att uppfylla dina behov.
Kodfragmenten i den här guiden skrivs i C# med hjälp Azure Cognitive Services klientbiblioteket för ansiktsdrag. Samma funktioner är tillgängliga via REST API.
Installation
Den här guiden förutsätter att du redan har konstruerat ett FaceClient-objekt med namnet faceClient , med en ansiktsprenumerationsnyckel och slutpunkts-URL. Följ någon av snabbstarterna för instruktioner om hur du ställer in den här funktionen.
Skicka data till tjänsten
Om du vill hitta ansikten och hämta deras platser i en bild anropar du metoden DetectWithUrlAsync eller DetectWithStreamAsync. DetectWithUrlAsync tar en URL-sträng som indata och DetectWithStreamAsync tar den råa byteströmmen för en bild som indata.
IList<DetectedFace> faces = await faceClient.Face.DetectWithUrlAsync(url: imageUrl, returnFaceId: true, detectionModel: DetectionModel.Detection03);
Du kan fråga de returnerade DetectedFace-objekten efter deras unika ID och en rektangel som ger ansiktets pixelkoordinater. På så sätt kan du se vilket ansikts-ID som mappar till vilket ansikte i den ursprungliga bilden.
foreach (var face in faces)
{
string id = face.FaceId.ToString();
FaceRectangle rect = face.FaceRectangle;
}
Information om hur du parsar ansiktets plats och dimensioner finns i FaceRectangle. Den här rektangeln innehåller vanligtvis ögon, näsa, näsa och mun. Toppen av huvudet, nosen och hakan ingår inte nödvändigtvis. Om du vill använda ansiktsrektangeln för att beskära ett fullständigt huvud eller få ett stående stående ansikte bör du expandera rektangeln i varje riktning.
Bestämma hur data ska bearbetas
Den här guiden fokuserar på identifierings-anropet, till exempel vilka argument du kan skicka och vad du kan göra med returnerade data. Vi rekommenderar att du endast frågar efter de funktioner du behöver. Varje åtgärd tar längre tid att slutföra.
Hämta ansiktsmärken
Ansiktsmärken är en uppsättning lätt att hitta punkter i ett ansikte, till exempel pupiller eller näsa. Om du vill hämta ansiktslandmärkesdata anger du parametern detectionModel till DetectionModel.Detection01 och parametern returnFaceLandmarks till true .
// Note DetectionModel.Detection02 cannot be used with returnFaceLandmarks.
IList<DetectedFace> faces2 = await faceClient.Face.DetectWithUrlAsync(url: imageUrl, returnFaceId: true, returnFaceLandmarks: true, detectionModel: DetectionModel.Detection01);
Hämta ansiktsattribut
Förutom ansiktsrektanglar och landmärken kan ansiktsavkännings-API:et analysera flera konceptuella attribut för ett ansikte. En fullständig lista finns i avsnittet Konceptuella ansiktsattribut.
Om du vill analysera ansiktsattribut anger du parametern detectionModel till och DetectionModel.Detection01 parametern returnFaceAttributes till en lista över FaceAttributeType Enum-värden.
var requiredFaceAttributes = new FaceAttributeType?[] {
FaceAttributeType.Age,
FaceAttributeType.Gender,
FaceAttributeType.Smile,
FaceAttributeType.FacialHair,
FaceAttributeType.HeadPose,
FaceAttributeType.Glasses,
FaceAttributeType.Emotion
};
// Note DetectionModel.Detection02 cannot be used with returnFaceAttributes.
var faces3 = await faceClient.Face.DetectWithUrlAsync(url: imageUrl, returnFaceId: true, returnFaceAttributes: requiredFaceAttributes, detectionModel: DetectionModel.Detection01);
Hämta resultat från tjänsten
Resultat från ansikts landmärke
Följande kod visar hur du kan hämta platserna för näsa och pupiller:
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;
Du kan också använda ansikts landmärkesdata för att korrekt beräkna ansiktets riktning. Du kan till exempel definiera rotationen av ansiktet som en vektor från mitten av ögonen till mitten av ögonen. Följande kod beräknar den här vektorn:
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);
}
När du känner till ansiktets riktning kan du rotera den rektangulära ansiktsramen för att justera den mer korrekt. Om du vill beskära ansikten i en bild kan du programmatiskt rotera bilden så att ansiktena alltid visas som stående.
Ansiktsattributresultat
Följande kod visar hur du kan hämta ansiktsattributdata som du begärde i det ursprungliga anropet.
foreach (var face in faces3)
{
var attributes = face.FaceAttributes;
var age = attributes.Age;
var gender = attributes.Gender;
var smile = attributes.Smile;
var facialHair = attributes.FacialHair;
var headPose = attributes.HeadPose;
var glasses = attributes.Glasses;
var emotion = attributes.Emotion;
}
Mer information om vart och ett av attributen finns i konceptuell guide för ansiktsavkänning och attribut.
Nästa steg
I den här guiden har du lärt dig hur du använder de olika funktionerna för ansiktsavkänning och analys. Integrera sedan dessa funktioner i en app för att lägga till ansiktsdata från användare.