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 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. Dessa inkluderar funktioner som förutsäger känslor, kön, ålder, leende, ansiktshår, hår och smink. 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.

Ställ in

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 metoden DetectWithUrlAsync eller DetectWithStreamAsync . DetectWithUrlAsync tar en URL-sträng som indata och DetectWithStreamAsync tar rå byteströmmen för en bild som indata.

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

Tjänsten returnerar ett DetectedFace-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 längre 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 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: false, returnFaceLandmarks: true, detectionModel: DetectionModel.Detection01);

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 DetectionModel.Detection01 och parametern returnFaceAttributes till en lista över FaceAttributeType Enum-värden.

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);

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(
        (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 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 headPose = attributes.HeadPose;
    var glasses = attributes.Glasses;
    var qualityForRecognition = attributes.QualityForRecognition;
}

Mer information om vart och ett av attributen finns i konceptguiden ansiktsidentifiering och attribut .

Nästa steg

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.