Sdílet prostřednictvím


Volání rozhraní DETECT API

Upozornění

Přístup ke službě Rozpoznávání tváře je omezený na základě kritérií způsobilosti a použití, aby bylo možné podporovat naše zásady zodpovědné umělé inteligence. Služba Rozpoznávání tváře je dostupná jenom pro zákazníky a partnery spravované Microsoftem. Pro přístup použijte formulář pro příjem rozpoznávání tváře. Další informace najdete na stránce s omezeným přístupem k tváři.

Upozornění

Společnost Microsoft vyřadila nebo omezila možnosti rozpoznávání obličeje, které se dají použít k odvozování emocionálních stavů a atributů identity, které mohou v případě zneužití podléhat stereotypům, diskriminaci nebo nespravedlivému odepření služeb. Vyřazené funkce jsou emoce a pohlaví. Omezené schopnosti jsou věk, úsměv, obličejové vlasy, vlasy a make-up. Pokud máte zodpovědný případ použití, který by pro vás mohl využívat některou z omezených funkcí, pošlete e-mailem rozhraní API pro rozpoznávání tváře Azure. Další informace o tomto rozhodnutí najdete tady.

Tato příručka ukazuje, jak pomocí rozhraní API pro rozpoznávání tváře extrahovat atributy z daného obrázku. Naučíte se různé způsoby konfigurace chování tohoto rozhraní API tak, 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 AI Face. Stejné funkce jsou dostupné prostřednictvím rozhraní REST API.

Nastavení

V této příručce se předpokládá, že jste už vytvořili objekt FaceClient s názvem faceClient, pomocí klíče tváře a adresy URL koncového bodu. Pokyny k nastavení této funkce najdete v jednom z rychlých startů.

Odeslání dat do služby

Pokud chcete najít tváře a získat jejich umístění na obrázku, zavolejte DetectAsync. Jako vstup přebírá buď řetězec adresy URL, nebo binární soubor nezpracovaného obrázku.

var response = await faceClient.DetectAsync(new Uri(imageUrl), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false);
IReadOnlyList<FaceDetectionResult> faces = response.Value;

Služba vrátí FaceDetectionResult objekt, který můžete dotazovat na různé druhy informací zadaných níže.

Informace o tom, jak analyzovat umístění a rozměry tváře, najdete v tématu FaceRectangle. Tento obdélník obvykle obsahuje oči, obočí, nos a ústa. Horní část hlavy, uší a brady nemusí nutně obsahovat. Pokud chcete obdélník tváře použít k oříznutí celé hlavy nebo získání střední fotografie na výšku, měli byste obdélník rozbalit v každém směru.

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

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

Získání ID tváře

Pokud nastavíte parametr returnFaceId na true (jenom schválené zákazníky), můžete získat jedinečné ID pro každou tvář, kterou můžete použít v pozdějších úlohách rozpoznávání tváře.

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

Volitelný parametr faceIdTimeToLive určuje, jak dlouho (v sekundách) má být ID tváře uloženo na serveru. Po uplynutí této doby se ID tváře odebere. Výchozí hodnota je 86400 (24 hodin).

Získání orientačních bodů tváře

Orientační body tváře jsou sadou snadno najítelné body na obličeji, jako jsou žáky nebo špička nosu. Chcete-li získat data orientačních bodů tváře, nastavte parametr detectionModel na FaceDetectionModel.Detection03 a returnFaceLandmarks parametr na 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;

Získání atributů tváře

Kromě obdélníků tváře a orientačních bodů může rozhraní API pro rozpoznávání tváře analyzovat několik koncepčních atributů tváře. Úplný seznam najdete v koncepční části Atributy tváře.

Pokud chcete analyzovat atributy tváře, nastavte parametr detectionModel na FaceDetectionModel.Detection03 a returnFaceAttributes parametr na seznam hodnot FaceAttributeType Enum .

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;

Získání výsledků ze služby

Výsledky orientačních bodů tváře

Následující kód ukazuje, jak můžete načíst umístění nosu 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ů tváře můžete také přesně vypočítat směr tváře. Můžete například definovat otočení tváře jako vektor ze středu úst do středu očí. Následující kód vypočítá tento vektor:

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

Pokud znáte směr tváře, můžete otočit obdélníkový rámeček tváře, aby byl správně zarovnaný. Pokud chcete oříznout tváře na obrázku, můžete obrázek otočit prostřednictvím kódu programu, aby se tváře vždy zobrazovaly vzpřímeně.

Výsledky atributů tváře

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

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

Další informace o jednotlivých atributech najdete v koncepčním průvodci rozpoznáváním tváře a atributy .

Další kroky

V této příručce jste se naučili používat různé funkce detekce a analýzy tváří. Dále tyto funkce integrujte do aplikace, abyste mohli přidávat data o tvářích od uživatelů.