Volání rozhraní API detekce

V této příručce se dozvíte, jak pomocí rozhraní API pro rozpoznávání tváře extrahovat z daného obrázku atributy typu věk, emoce nebo pozice. Seznámíte se s různými způsoby, jak nakonfigurovat chování tohoto rozhraní API, aby vyhovovalo vašim potřebám.

Fragmenty kódu v této příručce jsou napsané v jazyce C# pomocí klientské knihovny Azure Cognitive Services Face. Stejné funkce jsou k dispozici prostřednictvím REST API.

Nastavení

V tomto průvodci se předpokládá, že už jste nastavili objekt FaceClient s názvem s faceClient klíčovým předplatným a adresou URL koncového bodu. Pokyny, jak tuto funkci nastavit, najdete v některém z rychlých startů.

Odeslat data do služby

Chcete-li najít plošky a získat jejich umístění na obrázku, zavolejte metodu DetectWithUrlAsync nebo DetectWithStreamAsync . DetectWithUrlAsync přebírá řetězec adresy URL jako vstup a DetectWithStreamAsync přebírá nezpracovaný datový proud obrázku jako vstup.

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

Můžete zadat dotaz na vrácené objekty DetectedFace pro jejich jedinečná ID a obdélník, který dává souřadnici v pixelech na ploše. Tímto způsobem můžete určit, které ID obličeje se namapuje na to, které plošky se nacházejí v původní imagi.

foreach (var face in faces)
{
    string id = face.FaceId.ToString();
    FaceRectangle rect = face.FaceRectangle;
}

Informace o tom, jak analyzovat umístění a rozměry obličeje, najdete v tématu FaceRectangle. Tento obdélník obvykle obsahuje oči, eyebrows, nos a pusu. Horní okraje hlav, EARS a Chin nejsou nutně zahrnuté. Chcete-li použít řez obličeje pro oříznutí celé hlavy nebo získat střední snímek na výšku, měli byste obdélník v každém směru rozbalovat.

Určení způsobu zpracování dat

Tato příručka se zaměřuje na konkrétní volání detekce, například jaké argumenty můžete předat a co můžete s vrácenými daty dělat. Doporučujeme zadat dotaz jenom na funkce, které potřebujete. Dokončení každé operace trvá déle.

Získat orientační vzhledy

Přední orientační body jsou sada snadno hledaných bodů na plošku, jako jsou žákům nebo špička v nos. Pokud chcete získat data orientačních bodů, nastavte parametr detectionModel na DetectionModel.Detection01 a parametr returnFaceLandmarks na 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);

Získat atributy obličeje

Kromě obdélníků a orientačních bodů může rozhraní API pro detekci obličeje analyzovat několik koncepčních atributů plošky. Úplný seznam najdete v části koncepční atributy Face .

Chcete-li analyzovat atributy tváře, nastavte parametr detectionModel na DetectionModel.Detection01 a parametr ReturnFaceAttributes na seznam hodnot FaceAttributeType enum .

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

Získat výsledky ze služby

Výsledky orientačního vzhledu

Následující kód ukazuje, jak můžete načíst umístění nos a žáků:

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;

Pomocí dat orientačních bodů můžete také přesně vypočítat směr plochy. Například můžete definovat rotaci obličeje jako vektor od středu úst až po střed oči. Následující kód vypočítá tento vektor:

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

Když znáte směr plochy, můžete obdélníkový rám otočit tak, aby byl lépe zarovnaný. Pokud chcete oříznout plošky v obrázku, můžete obrázek programově otočit, aby se tváře vždy zobrazovaly vzhůru.

Výsledky atributu Face

Následující kód ukazuje, jak můžete načíst data atributu Face, která jste požadovali v původním volání.

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

Další informace o jednotlivých atributech najdete v koncepční příručce pro rozpoznávání tváře a atributy .

Další kroky

V této příručce jste zjistili, jak používat různé funkce detekce a analýzy tváře. V dalším kroku Integrujte tyto funkce do aplikace, aby se přidala data ze strany uživatelů.