De detectie-API aanroepen
In deze handleiding wordt gedemonstreerd hoe u de API voor gezichtsdetectie gebruikt om kenmerken zoals leeftijd, emotie of hoofdhouding uit een bepaalde afbeelding te extraheren. U leert de verschillende manieren om het gedrag van deze API te configureren om aan uw behoeften te voldoen.
De codefragmenten in deze handleiding zijn geschreven in C# met behulp van de Azure Cognitive Services Face-clientbibliotheek. Dezelfde functionaliteit is beschikbaar via de REST API.
Instellen
In deze handleiding wordt ervan uitgenomen dat u al een FaceClient-object met de naam faceClient hebt gemaakt met een Face-abonnementssleutel en eindpunt-URL. Volg een van de quickstarts voor instructies over het instellen van deze functie.
Gegevens verzenden naar de service
Als u gezichten wilt zoeken en hun locaties in een afbeelding wilt op halen, roept u de methode DetectWithUrlAsync of DetectWithStreamAsync aan. DetectWithUrlAsync gebruikt een URL-tekenreeks als invoer en DetectWithStreamAsync neemt de onbewerkte bytestroom van een afbeelding als invoer.
IList<DetectedFace> faces = await faceClient.Face.DetectWithUrlAsync(url: imageUrl, returnFaceId: true, detectionModel: DetectionModel.Detection03);
U kunt de geretourneerde DetectedFace-objecten opvragen voor hun unieke ID's en een rechthoek die de pixelcoördinaten van het gezicht geeft. Op deze manier kunt u zien aan welke face-id het gezicht in de oorspronkelijke afbeelding is toe te staan.
foreach (var face in faces)
{
string id = face.FaceId.ToString();
FaceRectangle rect = face.FaceRectangle;
}
Zie FaceRectanglevoor meer informatie over het parseren van de locatie en dimensies van het gezicht. Normaal gesproken bevat deze rechthoek de ogen, neus en mond. De bovenkant van het hoofd, de oren en de oren zijn niet noodzakelijkerwijs opgenomen. Als u de gezichtrechthoek wilt gebruiken om een volledige kop bij te snijden of om een staande foto te maken, vouwt u de rechthoek in elke richting uit.
Bepalen hoe de gegevens moeten worden verwerkt
Deze handleiding is gericht op de details van de detectie-aanroep, zoals welke argumenten u kunt doorgeven en wat u met de geretourneerde gegevens kunt doen. U wordt aangeraden alleen een query uit te voeren voor de functies die u nodig hebt. Het voltooien van elke bewerking kost meer tijd.
Gezichtsherkenningspunten krijgen
Gezichtsherkenningspunten zijn een set eenvoudig te vinden punten op een gezicht, zoals de pupillen of de punt van de neus. Als u oriëntatiepuntgegevens voor gezichten wilt zien, stelt u de parameter detectionModel in op DetectionModel.Detection01 en de parameter returnFaceLandmarks op 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);
Gezichtskenmerken ophalen
Naast gezichtrechthoeken en oriëntatiepunten kan de API voor gezichtsdetectie verschillende conceptuele kenmerken van een gezicht analyseren. Zie de conceptuele sectie Gezichtskenmerken voor een volledige lijst.
Als u gezichtskenmerken wilt analyseren, stelt u de parameter detectionModel in op en de parameter returnFaceAttributes op een lijst met DetectionModel.Detection01 FaceAttributeType Enum-waarden.
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);
Resultaten van de service krijgen
Resultaten van gezichtsherkenning
De volgende code laat zien hoe u de locaties van de neus en pupillen kunt ophalen:
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;
U kunt ook gezichtsherkenningsgegevens gebruiken om de richting van het gezicht nauwkeurig te berekenen. U kunt bijvoorbeeld de rotatie van het gezicht definiëren als een vector van het midden van de mond naar het midden van de ogen. Met de volgende code wordt deze vector berekend:
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);
}
Wanneer u de richting van het gezicht weet, kunt u het rechthoekige gezichtsframe draaien om het beter uit te lijnen. Als u gezichten in een afbeelding wilt bijsnijden, kunt u de afbeelding programmatisch draaien, zodat de gezichten altijd weer niet goed worden weergegeven.
Resultaten van gezichtskenmerken
De volgende code laat zien hoe u de kenmerkgegevens voor het gezicht kunt ophalen die u hebt aangevraagd in de oorspronkelijke aanroep.
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;
}
Zie de conceptuele handleiding Gezichtsdetectie en -kenmerken voor meer informatie over elk van de kenmerken.
Volgende stappen
In deze handleiding hebt u geleerd hoe u de verschillende functies van gezichtsdetectie en -analyse gebruikt. Integreer vervolgens deze functies in een app om gezichtsgegevens van gebruikers toe te voegen.