Anropa IDENTIFIERINGS-API:et
Varning
Åtkomsten till ansiktstjänsten är begränsad baserat på berättigande- och användningskriterier för att stödja våra principer för ansvarsfull AI. Ansiktstjänsten är endast tillgänglig för Microsofts hanterade kunder och partner. Använd formuläret ansiktsigenkänning för att ansöka om åtkomst. Mer information finns på sidan ansiktsbegränsade åtkomst .
Varning
Microsoft har dragit tillbaka eller begränsade funktioner för ansiktsigenkänning som kan användas för att försöka härleda känslomässiga tillstånd och identitetsattribut som, om de missbrukas, kan utsätta människor för stereotyper, diskriminering eller orättvis överbelastning av tjänster. De pensionerade funktionerna är känslor och kön. De begränsade funktionerna är ålder, leende, ansiktshår, hår och smink. Skicka ett e-postmeddelande till Azure Face-teamet om du har ett ansvarsfullt användningsfall som kan dra nytta av någon av de begränsade funktionerna. Läs mer om det här beslutet här.
Den här guiden visar hur du använder API:et för ansiktsidentifiering för att extrahera attribut från en viss bild. Du får lära dig de olika sätten att konfigurera beteendet för det här API:et så att det uppfyller dina behov.
Kodfragmenten i den här guiden skrivs i C# med hjälp av Azure AI Face-klientbiblioteket. Samma funktioner är tillgängliga via REST-API:et.
Förutsättningar
- Den här guiden förutsätter att du redan har skapat ett FaceClient-objekt med namnet
faceClient
, med hjälp av en ansiktsnyckel och en slutpunkts-URL. Anvisningar om hur du konfigurerar den här funktionen finns i någon av snabbstarterna.
Skicka data till tjänsten
Om du vill hitta ansikten och hämta deras platser i en bild anropar du DetectAsync. Det tar antingen en URL-sträng eller den råa bildbinärfilen som indata.
var response = await faceClient.DetectAsync(new Uri(imageUrl), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false);
IReadOnlyList<FaceDetectionResult> faces = response.Value;
Tjänsten returnerar ett FaceDetectionResult-objekt , som du kan fråga efter olika typer av information, som anges nedan.
Information om hur du parsar ansiktets plats och dimensioner finns i FaceRectangle. Vanligtvis innehåller denna rektangel ögon, ögonbryn, näsa och mun. Toppen av huvud, öron och haka ingår inte nödvändigtvis. Om du vill använda ansiktsrektangeln för att beskära ett komplett huvud eller få ett stående mellanskott bör du expandera rektangeln i varje riktning.
Fastställa hur data ska bearbetas
Den här guiden fokuserar på detaljerna i identifieringsanropet, till exempel vilka argument du kan skicka och vad du kan göra med returnerade data. Vi rekommenderar att du bara frågar efter de funktioner du behöver. Varje åtgärd tar ytterligare tid att slutföra.
Hämta ansikts-ID
Om du anger parametern returnFaceId till true
(endast godkända kunder) kan du få det unika ID:t för varje ansikte, som du kan använda i senare ansiktsigenkänningsuppgifter.
foreach (var face in faces)
{
string id = face.FaceId.ToString();
FaceRectangle rect = face.FaceRectangle;
}
Den valfria parametern faceIdTimeToLive anger hur länge (i sekunder) ansikts-ID:t ska lagras på servern. När den här tiden har gått ut tas ansikts-ID:t bort. Standardvärdet är 86400 (24 timmar).
Hämta ansiktsmärken
Ansiktsmärken är en uppsättning lättanvända punkter i ett ansikte, till exempel eleverna eller nässpetsen. Om du vill hämta ansiktslandmärkesdata anger du parametern detectionModel till FaceDetectionModel.Detection03
och parametern returnFaceLandmarks till 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;
Hämta ansiktsattribut
Förutom ansiktsrektanglar och landmärken kan API:et för ansiktsigenkänning 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 FaceDetectionModel.Detection03
och parametern returnFaceAttributes till en lista över FaceAttributeType Enum-värden.
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;
Hämta resultat från tjänsten
Resultat av ansiktsigenkänning
Följande kod visar hur du kan hämta platsen för näsan och eleverna:
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 ansiktsdata för att exakt beräkna ansiktets riktning. Du kan till exempel definiera rotationen av ansiktet som en vektor från mitten av munnen 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(
(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;
}
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 upprätt.
Resultat av ansiktsattribut
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 blur = attributes.Blur;
var headPose = attributes.HeadPose;
var mask = attributes.Mask;
var qualityForRecognition = attributes.QualityForRecognition;
}
Mer information om vart och ett av attributen finns i konceptguiden ansiktsidentifiering och attribut .
Gå vidare
I den här guiden har du lärt dig hur du använder de olika funktionerna i ansiktsidentifiering och analys. Integrera sedan dessa funktioner i en app för att lägga till ansiktsdata från användare.