Detect API'sini çağırma

Dikkat

Yüz tanıma hizmeti erişimi, Sorumlu yapay zeka ilkelerimizi desteklemek için uygunluk ve kullanım ölçütlerine göre sınırlıdır. Yüz tanıma hizmeti yalnızca Microsoft tarafından yönetilen müşteriler ve iş ortakları tarafından kullanılabilir. Erişim için başvurmak için Yüz Tanıma giriş formunu kullanın. Daha fazla bilgi için Yüz sınırlı erişim sayfasına bakın.

Dikkat

Microsoft' un kullanımdan kaldırılan yüz tanıma özellikleri, yanlış kullanıldığında insanları stereotipleme, ayrımcılık veya haksız hizmet reddine maruz kalabilecek duygusal durumları ve kimlik özniteliklerini çıkarsamak için kullanılabilir. Bunlar duygu, cinsiyet, yaş, gülümseme, yüz kılları, saç ve makyajı tahmin eden özellikleri içerir. Bu karar hakkında daha fazla bilgiyi burada bulabilirsiniz.

Bu kılavuzda, belirli bir görüntüden öznitelikleri ayıklamak için yüz algılama API'sinin nasıl kullanılacağı gösterilmektedir. Bu API'nin davranışını gereksinimlerinizi karşılayacak şekilde yapılandırmanın farklı yollarını öğreneceksiniz.

Bu kılavuzdaki kod parçacıkları, Azure AI Yüz Tanıma istemci kitaplığı kullanılarak C# dilinde yazılmıştır. Aynı işlev REST API aracılığıyla da kullanılabilir.

Ayarlama

Bu kılavuzda, yüz anahtarı ve uç nokta URL'si kullanarak adlı faceClientbir FaceClient nesnesi oluşturduğunuz varsayılır. Bu özelliği ayarlama yönergeleri için hızlı başlangıçlardan birini izleyin.

Hizmete veri gönderme

Yüzleri bulmak ve görüntüdeki konumlarını almak için DetectWithUrlAsync veya DetectWithStreamAsync yöntemini çağırın. DetectWithUrlAsync giriş olarak bir URL dizesi alır ve DetectWithStreamAsync bir görüntünün ham bayt akışını giriş olarak alır.

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

Hizmet, aşağıda belirtilen farklı bilgi türleri için sorgulayabileceğiniz bir DetectedFace nesnesi döndürür.

Yüzün konumunu ve boyutlarını ayrıştırma hakkında bilgi için bkz . FaceRectangle. Bu dikdörtgen genellikle gözleri, kaşları, burnu ve ağzı içerir. Başın, kulakların ve çenenin üstü mutlaka dahil değildir. Yüz dikdörtgenini kullanarak tam bir başı kırpmak veya orta çekim bir dikey resim almak için dikdörtgeni her yönde genişletmeniz gerekir.

Verilerin nasıl işleneceğini belirleme

Bu kılavuz, hangi bağımsız değişkenleri geçirebileceğiniz ve döndürülen verilerle neler yapabileceğiniz gibi Detect çağrısının özelliklerine odaklanır. Yalnızca ihtiyacınız olan özellikleri sorgulamanızı öneririz. Her işlemin tamamlanması daha uzun sürer.

Yüz kimliğini alma

returnFaceIdtrue parametresini (yalnızca onaylı müşteriler) olarak ayarlarsanız, her yüz için benzersiz kimliği alabilirsiniz ve bu kimliği daha sonraki yüz tanıma görevlerinde kullanabilirsiniz.

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

İsteğe bağlı faceIdTimeToLive parametresi, yüz kimliğinin sunucuda ne kadar süre (saniye) depolanması gerektiğini belirtir. Bu süre dolduktan sonra yüz kimliği kaldırılır. Varsayılan değer 86400'dür (24 saat).

Yüz tanıma yer işaretlerini alma

Yüz yer işaretleri, göz bebekleri veya burnun ucu gibi bir yüz üzerinde bulunması kolay noktalar kümesidir. Yüz tanıma yer işareti verilerini almak için detectionModel parametresini olarakDetectionModel.Detection01, returnFaceLandmarks parametresini olarak trueayarlayın.

// Note DetectionModel.Detection02 cannot be used with returnFaceLandmarks.
IList<DetectedFace> faces2 = await faceClient.Face.DetectWithUrlAsync(url: imageUrl, returnFaceId: false, returnFaceLandmarks: true, detectionModel: DetectionModel.Detection01);

Yüz özniteliklerini alma

Yüz dikdörtgenlerinin ve yer işaretlerinin yanı sıra, yüz algılama API'si yüzün çeşitli kavramsal özniteliklerini analiz edebilir. Tam liste için Yüz öznitelikleri kavramsal bölümüne bakın.

Yüz özniteliklerini analiz etmek için detectionModel parametresini DetectionModel.Detection01 ve returnFaceAttributes parametresini FaceAttributeType Enum değerlerinin listesine ayarlayın.

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

Hizmetten sonuç alma

Yüz tanıma yer işareti sonuçları

Aşağıdaki kod, burun ve göz bebeklerinin konumlarını nasıl alabileceğinizi gösterir:

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;

Yüzün yönünü doğru şekilde hesaplamak için yüz işareti verilerini de kullanabilirsiniz. Örneğin, yüzün dönüşünü ağzın ortasından gözlerin ortasına bir vektör olarak tanımlayabilirsiniz. Aşağıdaki kod bu vektöri hesaplar:

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

Yüzün yönünü bildiğinizde dikdörtgen yüz çerçevesini daha düzgün hizalamak için döndürebilirsiniz. Bir görüntüdeki yüzleri kırpmak için, görüntüyü program aracılığıyla döndürerek yüzlerin her zaman dik görünmesini sağlayabilirsiniz.

Yüz özniteliği sonuçları

Aşağıdaki kod, özgün çağrıda istediğiniz yüz özniteliği verilerini nasıl alabileceğinizi gösterir.

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

Özniteliklerin her biri hakkında daha fazla bilgi edinmek için Yüz algılama ve öznitelikler kavramsal kılavuzuna bakın.

Sonraki adımlar

Bu kılavuzda, yüz algılama ve analizinin çeşitli işlevlerini kullanmayı öğrendiniz. Ardından, kullanıcılardan yüz verileri eklemek için bu özellikleri bir uygulamayla tümleştirin.