Az Detect API meghívása

Figyelem

A Face Service hozzáférése a jogosultsági és használati feltételek alapján korlátozott a felelős AI-alapelvek támogatása érdekében. A Face service csak a Microsoft által felügyelt ügyfelek és partnerek számára érhető el. A Hozzáférés igényléséhez használja a Face Recognition beviteli űrlapot . További információt a Face korlátozott hozzáférésű oldalán talál.

Figyelem

A Microsoft kivezette az arcfelismerési képességeket, amelyekkel megpróbálhatja kikövetkeztetni az érzelmi állapotokat és identitástulajdonságokat, amelyek visszaélve sztereotípiáknak, hátrányos megkülönböztetésnek vagy a szolgáltatások tisztességtelen megtagadásának tehetik ki az embereket. Ezek közé tartoznak az érzelmeket, a nemet, az életkort, a mosolyt, az arcszőrzetet, a hajat és a sminket előrejelző képességek. Erről a döntésről itt olvashat bővebben.

Ez az útmutató bemutatja, hogyan nyerhet ki attribútumokat egy adott képből az arcfelismerési API használatával. Megtudhatja, hogyan konfigurálhatja az API viselkedését az igényeinek megfelelően.

Az útmutatóban szereplő kódrészletek C# nyelven vannak megírva az Azure AI Face ügyfélkódtár használatával. Ugyanez a funkció a REST API-val érhető el.

Beállítás

Ez az útmutató feltételezi, hogy már létrehozott egy FaceClient-objektumotfaceClientegy Face-kulcs és egy végpont URL-cím használatával. A funkció beállításával kapcsolatos útmutatásért kövesse az egyik rövid útmutatót.

Adatok küldése a szolgáltatásba

Arcok kereséséhez és helyük képben való lekéréséhez hívja meg a DetectWithUrlAsync vagy DetectWithStreamAsync metódust. A DetectWithUrlAsync bemenetként egy URL-sztringet, a DetectWithStreamAsync pedig a kép nyers bájtfolyamát veszi bemenetként.

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

A szolgáltatás egy DetectedFace objektumot ad vissza, amelyet az alábbiakban megadott különböző típusú információkhoz kérdezhet le.

Az arc helyének és méreteinek elemzésével kapcsolatos információkért lásd : FaceRectangle. Ez a téglalap általában a szemet, a szemöldököt, az orrot és a szájat tartalmazza. A fej, a fül és az áll tetején nem feltétlenül szerepel. Ha az arc téglalapját szeretné használni egy teljes fej körülvágásához vagy egy középre lőtt álló képhez, minden irányban ki kell bontani a téglalapot.

Az adatok feldolgozásának meghatározása

Ez az útmutató a hívás észlelésének jellemzőire összpontosít, például hogy milyen argumentumokat adhat át, és mit tehet a visszaadott adatokkal. Javasoljuk, hogy csak a szükséges funkciókat kérdezi le. Minden művelet végrehajtása több időt vesz igénybe.

Arcazonosító lekérése

Ha a returnFaceIdtrue paramétert (csak jóváhagyott ügyfeleknek) állítja be, minden archoz lekérheti az egyedi azonosítót, amelyet a későbbi arcfelismerési feladatokhoz használhat.

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

Az opcionális faceIdTimeToLive paraméter megadja, hogy mennyi ideig (másodpercben) tárolja az arcazonosítót a kiszolgálón. Az idő lejárta után a rendszer eltávolítja az arcazonosítót. Az alapértelmezett érték 86400 (24 óra).

Arcfelismerési pontok lekérése

Az arc tájékozódási pontjai könnyen megtalálható pontok az arcon, például a pupillák vagy az orr csúcsa. A face landmark adatok lekéréséhez állítsa be az detectionModel paramétert DetectionModel.Detection01 , a returnFaceLandmarks paramétert pedig a következőre 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);

Arcattribútumok lekérése

Az arcészlelési API az arc téglalapjai és a tájékozódási pontok mellett az arc számos fogalmi attribútumát is képes elemezni. A teljes listát a Face attribútumok fogalmi szakaszában találja.

Az arcattribútumok elemzéséhez állítsa az detectionModel paramétert DetectionModel.Detection01 a FaceAttributeType Enum értékek listájára, és a returnFaceAttributes paramétert.

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

Eredmények lekérése a szolgáltatásból

Arcfelismerési eredmények

Az alábbi kód bemutatja, hogyan kérdezheti le az orr és a pupilla helyét:

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;

Az arc irányának pontos kiszámításához az arc tájékozódási adatait is használhatja. Megadhatja például az arc forgását vektorként a száj közepétől a szem közepéig. A következő kód kiszámítja ezt a vektort:

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

Ha ismeri az arc irányát, elforgathatja a téglalap alakú arckeretet, hogy jobban igazítsa. A képeken lévő arcok körülvágásához programozott módon elforgathatja a képet, hogy az arcok mindig függőlegesen jelenjenek meg.

Face attribútum eredményei

Az alábbi kód bemutatja, hogyan kérheti le az eredeti hívásban kért face attribútum adatait.

foreach (var face in faces3)
{
    var attributes = face.FaceAttributes;
    var headPose = attributes.HeadPose;
    var glasses = attributes.Glasses;
    var qualityForRecognition = attributes.QualityForRecognition;
}

Az egyes attribútumokról az Arcfelismerés és az attribútumok fogalmi útmutatójában olvashat bővebben.

Következő lépések

Ebben az útmutatóban megtanulta, hogyan használhatja az arcészlelés és -elemzés különböző funkcióit. Ezután integrálhatja ezeket a funkciókat egy alkalmazásba, hogy személyes adatokat adjon hozzá a felhasználóktól.