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 üzere Yüz Tanıma başvuru formunu kullanın. Daha fazla bilgi için Kısıtlı Erişim sayfasına bakın.

Dikkat

Microsoft' un kullanımdan kaldırılmış veya sınırlı yüz tanıma özellikleri vardır. Bu özellikler, kötü amaçlı kullanımda olduğu takdirde insanları stereotipleme, ayrımcılık veya haksız hizmet reddine maruz kalabilecek duygusal durumları ve kimlik özniteliklerini çıkarsamak için kullanılabilir. Kullanımdan kaldırılan özellikler duygu ve cinsiyettir. Sınırlı yetenekler yaş, gülümseme, yüz kılları, saç ve makyajdır. Sınırlı özelliklerden herhangi birinin kullanımından yararlanabilecek sorumlu bir kullanım örneğine sahipseniz Azure Yüz Tanıma ekibine e-posta gönderin. 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 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.

Önkoşullar

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

Hizmete veri gönderme

Yüzleri bulmak ve görüntüdeki konumlarını almak için DetectAsync'i çağırın. Giriş olarak bir URL dizesi veya ham görüntü ikili dosyası alır.

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

Hizmet, aşağıda belirtilen farklı bilgi türleri için sorgulayabileceğiniz bir FaceDetectionResult 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 yüzü kırpmak veya orta çekim bir portre 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ı ek zaman alır.

Yüz kimliğini alma

returnFaceId(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 işaretlerini al

Yüz yer işaretleri, göz bebekleri veya burnun ucu gibi bir yüz üzerinde bulunması kolay noktalar kümesidir. Yüz yer işareti verilerini almak için detectionModel parametresini ve FaceDetectionModel.Detection03 parametresini olarak ayarlayın.

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

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 ve FaceDetectionModel.Detection03 parametresini FaceAttributeType Enum değerlerinin listesine ayarlayın.

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;

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

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 faceDirectionVectorX = centerOfTwoEyes.X - centerOfMouth.X;
    var faceDirectionVectorY = 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 blur = attributes.Blur;
    var headPose = attributes.HeadPose;
    var mask = attributes.Mask;
    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ım

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.