Öğretici: Yüzlerdeki canlılığı algılama

Yüz Canlılığı algılama, giriş video akışındaki bir yüzün gerçek mi (canlı) yoksa sahte mi (sahte) olduğunu belirlemek için kullanılır. Bu, bir fotoğraf, video, maske veya başka bir kişinin kimliğine bürünmek için başka bir araç kullanarak sahtekarların sisteme erişim kazanmasını önlemek için biyometrik kimlik doğrulama sistemindeki önemli bir yapı taşıdır.

Canlılık algılamanın amacı, sistemin kimlik doğrulaması sırasında fiziksel olarak mevcut ve canlı bir kişiyle etkileşimde bulunduğundan emin olmaktır. Dijital finans, uzaktan erişim denetimi ve çevrimiçi kimlik doğrulama süreçlerinin artmasıyla birlikte bu sistemler giderek daha da öneme sahiptir.

Azure AI Yüz Tanıma canlılığı algılama çözümü, kağıt çıktılar, 2B/3B maskeler ve telefon ve dizüstü bilgisayarlardaki sahte sunulardan oluşan çeşitli kimlik sahtekarlığı türlerine karşı başarıyla savunma sağlar. Canlılık algılama, giderek daha karmaşık hale gelen kimlik sahtekarlığı saldırılarına karşı sürekli iyileştirmeler yapılan aktif bir araştırma alanıdır. Genel çözüm yeni saldırı türlerine karşı daha sağlam hale geldikçe istemciye ve hizmet bileşenlerine zaman içinde sürekli iyileştirmeler sunulur.

Önemli

Canlılık için Yüz Tanıma istemcisi SDK'ları geçitli bir özelliktir. Yüz Tanıma giriş formunu doldurarak canlılık özelliğine erişim istemeniz gerekir. Azure aboneliğinize erişim verildiğinde Yüz Tanıma canlılığı SDK'sını indirebilirsiniz.

Giriş

Canlılık çözümü tümleştirmesi iki ayrı bileşenden oluşur: ön uç mobil/web uygulaması ve uygulama sunucusu/düzenleyici.

Azure Yapay Zeka Yüz Tanıma'daki canlılık iş akışının diyagramı.

  • Ön uç uygulaması: Ön uç uygulaması, canlılık algılamayı başlatmak için uygulama sunucusundan yetkilendirme alır. Birincil amacı, canlılık algılama işlemi boyunca kamerayı etkinleştirmek ve son kullanıcılara doğru yol göstermektir.
  • Uygulama sunucusu: Uygulama sunucusu, canlılık algılama oturumları oluşturmak ve belirli bir oturum için Yüz Tanıma hizmetinden yetkilendirme belirteci almak için bir arka uç sunucusu görevi görür. Bu belirteç, ön uç uygulamasına canlılık algılaması gerçekleştirme yetkisi sağlar. Uygulama sunucusunun hedefleri oturumları yönetmek, ön uç uygulaması için yetkilendirme vermek ve canlılık algılama işleminin sonuçlarını görüntülemektir.

Ayrıca, kişinin belirttiğiniz belirli bir kişi olup olmadığını doğrulamak için yüz doğrulamayı canlılık algılama ile birleştiririz. Aşağıdaki tabloda canlılık algılama özelliklerinin ayrıntıları açıklanmaktadır:

Özellik Açıklama
Canlılık algılama Bir girişin gerçek veya sahte olduğunu belirleyin ve yalnızca uygulama sunucusunun canlılık denetimini başlatma ve sonucu sorgulama yetkisi vardır.
Yüz doğrulama ile canlılık algılama Bir girişin gerçek veya sahte olduğunu belirleyin ve sağladığınız bir başvuru görüntüsüne göre kişinin kimliğini doğrulayın. Uygulama sunucusu veya ön uç uygulaması bir başvuru görüntüsü sağlayabilir. Yalnızca uygulama sunucusu canlılık denetimini başlatma ve sonucu sorgulama yetkisine sahiptir.

Bu öğreticide, çeşitli dil SDK'larında yüz doğrulama ile canlılık algılama ve canlılık algılama gerçekleştirmek için bir ön uç uygulamasının ve uygulama sunucusunun nasıl çalıştırıldığı gösterilmektedir.

Önkoşullar

  • Azure aboneliği - Ücretsiz olarak oluşturun
  • Sorumlu yapay zeka koşullarını kabul edebilmeniz ve bir kaynak oluşturabilmeniz için Azure hesabınızın atanmış bir Bilişsel Hizmetler Katkıda Bulunanı rolü olması gerekir. Bu rolün hesabınıza atanmasını sağlamak için Rol atama belgelerindeki adımları izleyin veya yöneticinize başvurun.
  • Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında bir Yüz Tanıma kaynağı oluşturun. Dağıtıldıktan sonra Kaynağa git'i seçin.
    • Uygulamanızı Yüz Tanıma hizmetine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız vardır.
    • Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (F0) kullanabilirsiniz.
  • Mobil cihazlar (IOS ve Android) ve web için Azure AI Vision Yüz Tanıma İstemci SDK'sına erişim. Başlamak için SDK'ya erişim elde etmek için Yüz Tanıma Sınırlı Erişim özelliklerine başvurmanız gerekir. Daha fazla bilgi için Yüz Tanıma Sınırlı Erişim sayfasına bakın.

Canlılık algılaması gerçekleştirmek için ön uç uygulamaları ve uygulama sunucularını ayarlama

Ön uç uygulamaları ve uygulama sunucuları için farklı dillerde SDK'lar sağlıyoruz. Ön uç uygulamalarınızı ve uygulama sunucularınızı ayarlamak için aşağıdaki yönergelere bakın.

Ön uç uygulaması için SDK'sını indirme

SDK'ya erişiminiz olduğunda, kullanıcı arabirimini ve kodu yerel mobil uygulamanızla tümleştirmek için azure-ai-vision-sdk GitHub deposundaki yönergeleri izleyin. Canlılık SDK'sı, Android mobil uygulamaları için Java/Kotlin, iOS mobil uygulamaları için Swift ve web uygulamaları için JavaScript'i destekler:

Kodu uygulamanıza ekledikten sonra SDK kamerayı başlatır ve son kullanıcıya konumunu ayarlama, canlılık yükünü oluşturma ve canlılık yükünü işlemek için Azure AI Yüz Tanıma bulut hizmetini çağırma konusunda yol gösterir.

Uygulama sunucusu için Azure AI Yüz Tanıma istemci kitaplığını indirme

Uygulama sunucusu/düzenleyici, canlılık oturumunun yaşam döngüsünü denetlemekle sorumludur. Uygulama sunucusunun canlılık algılaması gerçekleştirmeden önce bir oturum oluşturması gerekir ve ardından canlılık denetimi tamamlandığında sonucu sorgulayabilir ve oturumu silebilir. Uygulama sunucunuzu kolayca uygulamak için çeşitli dillerde bir kitaplık sunuyoruz. İstediğiniz paketi yüklemek için şu adımları izleyin:

Ortam değişkenlerini oluşturma

Bu örnekte, kimlik bilgilerinizi uygulamayı çalıştıran yerel makinedeki ortam değişkenlerine yazın.

Azure portalına gidin. Önkoşullar bölümünde oluşturduğunuz kaynak başarıyla dağıtıldıysa, Sonraki Adımlar'ın altında Kaynağa git'i seçin. Anahtarınızı ve uç noktanızı Anahtarlar ve Uç Nokta sayfasındaki Kaynak Yönetimi'nin altında bulabilirsiniz. Kaynak anahtarınız Azure abonelik kimliğiniz ile aynı değildir.

Anahtarınızın ve uç noktanızın ortam değişkenini ayarlamak için bir konsol penceresi açın ve işletim sisteminiz ve geliştirme ortamınıza yönelik yönergeleri izleyin.

  • Ortam değişkenini FACE_APIKEY ayarlamak için değerini kaynağınızın anahtarlarından biriyle değiştirin <your_key> .
  • Ortam değişkenini FACE_ENDPOINT ayarlamak için değerini kaynağınızın uç noktasıyla değiştirin <your_endpoint> .

Önemli

API anahtarı kullanıyorsanız, bunu Azure Key Vault gibi başka bir yerde güvenli bir şekilde depolayın. API anahtarını doğrudan kodunuzla eklemeyin ve hiçbir zaman herkese açık olarak göndermeyin.

Yapay zeka hizmetleri güvenliği hakkında daha fazla bilgi için bkz . Azure AI hizmetlerine yönelik isteklerin kimliğini doğrulama.

setx FACE_APIKEY <your_key>
setx FACE_ENDPOINT <your_endpoint>

Ortam değişkenlerini ekledikten sonra, konsol penceresi de dahil olmak üzere ortam değişkenlerini okuyacak tüm çalışan programları yeniden başlatmanız gerekebilir.

Canlılık algılama gerçekleştirme

Canlılık düzenlemesinde yer alan üst düzey adımlar aşağıda gösterilmiştir:

Azure Yapay Zeka Yüz Tanıma'daki canlılık iş akışının diyagramı.

  1. Ön uç uygulaması canlılık denetimini başlatır ve uygulama sunucusuna bildirir.

  2. Uygulama sunucusu, Azure AI Yüz Tanıma Hizmeti ile yeni bir canlılık oturumu oluşturur. Hizmet bir canlılık oturumu oluşturur ve bir session-authorization-token ile yanıt verir. Canlılık Oturumu Oluşturma İşlemi'nde canlılık oturumu oluştururken kullanılan her istek parametresiyle ilgili daha fazla bilgi sağlanır.

    var endpoint = new Uri(System.Environment.GetEnvironmentVariable("FACE_ENDPOINT"));
    var credential = new AzureKeyCredential(System.Environment.GetEnvironmentVariable("FACE_APIKEY"));
    
    var sessionClient = new FaceSessionClient(endpoint, credential);
    
    var createContent = new CreateLivenessSessionContent(LivenessOperationMode.Passive)
    {
        DeviceCorrelationId = "723d6d03-ef33-40a8-9682-23a1feb7bccd",
        SendResultsToClient = false,
    };
    
    var createResponse = await sessionClient.CreateLivenessSessionAsync(createContent);
    var sessionId = createResponse.Value.SessionId;
    Console.WriteLine($"Session created.");
    Console.WriteLine($"Session id: {sessionId}");
    Console.WriteLine($"Auth token: {createResponse.Value.AuthToken}");
    

    Yanıt gövdesi örneği:

    {
        "sessionId": "a6e7193e-b638-42e9-903f-eaf60d2b40a5",
        "authToken": "<session-authorization-token>"
    }
    
  3. Uygulama sunucusu, oturum yetkilendirme belirtecini ön uç uygulamasına geri sağlar.

  4. Ön uç uygulaması, Azure AI Vision SDK'sının başlatılması sırasında oturum yetkilendirme belirtecini sağlar.

    mServiceOptions?.setTokenCredential(com.azure.android.core.credential.TokenCredential { _, callback ->
        callback.onSuccess(com.azure.android.core.credential.AccessToken("<INSERT_TOKEN_HERE>", org.threeten.bp.OffsetDateTime.MAX))
    })
    
  5. SDK daha sonra kamerayı başlatır, kullanıcıya doğru konumlandırması için yol gösterir ve ardından yükü canlılık algılama hizmet uç noktasını çağırmak için hazırlar.

  6. SDK, canlılık algılamasını gerçekleştirmek için Azure AI Vision Yüz Tanıma hizmetini çağırır. Hizmet yanıt verdikten sonra SDK, ön uç uygulamasına canlılık denetiminin tamamlandığını bildirir.

  7. Ön uç uygulaması, canlılık denetimi tamamlama işlemini uygulama sunucusuna aktarır.

  8. Uygulama sunucusu artık Azure AI Vision Yüz Tanıma hizmetinden canlılık algılama sonucunu sorgulayabilir.

    var getResultResponse = await sessionClient.GetLivenessSessionResultAsync(sessionId);
    
    var sessionResult = getResultResponse.Value;
    Console.WriteLine($"Session id: {sessionResult.Id}");
    Console.WriteLine($"Session status: {sessionResult.Status}");
    Console.WriteLine($"Liveness detection request id: {sessionResult.Result?.RequestId}");
    Console.WriteLine($"Liveness detection received datetime: {sessionResult.Result?.ReceivedDateTime}");
    Console.WriteLine($"Liveness detection decision: {sessionResult.Result?.Response.Body.LivenessDecision}");
    Console.WriteLine($"Session created datetime: {sessionResult.CreatedDateTime}");
    Console.WriteLine($"Auth token TTL (seconds): {sessionResult.AuthTokenTimeToLiveInSeconds}");
    Console.WriteLine($"Session expired: {sessionResult.SessionExpired}");
    Console.WriteLine($"Device correlation id: {sessionResult.DeviceCorrelationId}");
    

    Yanıt gövdesi örneği:

    {
        "status": "ResultAvailable",
        "result": {
            "id": 1,
            "sessionId": "a3dc62a3-49d5-45a1-886c-36e7df97499a",
            "requestId": "cb2b47dc-b2dd-49e8-bdf9-9b854c7ba843",
            "receivedDateTime": "2023-10-31T16:50:15.6311565+00:00",
            "request": {
                "url": "/face/v1.1-preview.1/detectliveness/singlemodal",
                "method": "POST",
                "contentLength": 352568,
                "contentType": "multipart/form-data; boundary=--------------------------482763481579020783621915",
                "userAgent": ""
            },
            "response": {
                "body": {
                    "livenessDecision": "realface",
                    "target": {
                        "faceRectangle": {
                            "top": 59,
                            "left": 121,
                            "width": 409,
                            "height": 395
                        },
                        "fileName": "content.bin",
                        "timeOffsetWithinFile": 0,
                        "imageType": "Color"
                    },
                    "modelVersionUsed": "2022-10-15-preview.04"
                },
                "statusCode": 200,
                "latencyInMilliseconds": 1098
            },
            "digest": "537F5CFCD8D0A7C7C909C1E0F0906BF27375C8E1B5B58A6914991C101E0B6BFC"
        },
        "id": "a3dc62a3-49d5-45a1-886c-36e7df97499a",
        "createdDateTime": "2023-10-31T16:49:33.6534925+00:00",
        "authTokenTimeToLiveInSeconds": 600,
        "deviceCorrelationId": "723d6d03-ef33-40a8-9682-23a1feb7bccd",
        "sessionExpired": false
    }
    
  9. Artık sonucunu sorgulamazsanız uygulama sunucusu oturumu silebilir.

    await sessionClient.DeleteLivenessSessionAsync(sessionId);
    Console.WriteLine($"The session {sessionId} is deleted.");
    

Yüz doğrulama ile canlılık algılama gerçekleştirme

Yüz doğrulamayı canlılık algılama ile birleştirmek, ilgili kişinin sistemde fiziksel olarak bulunduğuna ilişkin ek bir garanti ile biyometrik doğrulamayı sağlar. Canlılığı doğrulamayla tümleştirmenin iki bölümü vardır:

  1. İyi bir başvuru görüntüsü seçin.
  2. Doğrulama ile canlılık düzenlemesini ayarlayın.

Azure Yapay Zeka Yüz Tanıma'nın canlılık ve yüz doğrulama iş akışının diyagramı.

Başvuru görüntüsü seçme

Giriş görüntülerinizin en doğru tanıma sonuçlarını vermesini sağlamak için aşağıdaki ipuçlarını kullanın.

Teknik gereksinimler

  • Desteklenen giriş görüntüsü biçimleri JPEG, PNG, GIF (ilk kare), BMP'dir.
  • Görüntü dosyası boyutu 6 MB'tan büyük olmamalıdır.
  • Geçerli algılama modellerini kullanırken yüz algılama işleminde özniteliğini, görüntünün yüz tanımayı deneyecek kadar kaliteli olup olmadığının genel bir yönergesi olarak kullanabilirsinizqualityForRecognition. Kişi kaydı için yalnızca "high" kaliteli görüntüler önerilir ve tanımlama senaryolarında veya üzerinde "medium" kalite önerilir.

Oluşturma gereksinimleri

  • Fotoğraf net ve keskindir, bulanık değildir, pikselleştirilmiş, bozuk veya hasarlı değildir.
  • Fotoğraf, yüz lekelerini veya yüz görünümünü kaldırmak için değiştirilmez.
  • Fotoğraf RGB rengi desteklenen bir biçimde olmalıdır (JPEG, PNG, WEBP, BMP). Önerilen Yüz Tanıma boyutu 200 piksel x 200 pikseldir. 200 piksel x 200 pikselden büyük yüz boyutları daha iyi yapay zeka kalitesine ve 6 MB'tan büyük boyuta neden olmaz.
  • Kullanıcı gözlük, maske, şapka, kulaklık, baş kaplama veya yüz kaplaması takmıyor. Yüz, herhangi bir engelden arınmalıdır.
  • Yüzünüzü gizlememeleri şartıyla yüz takılarına izin verilir.
  • Fotoğrafta yalnızca bir yüz görünür olmalıdır.
  • Yüz, her iki gözü açık, ağzı kapalı, aşırı yüz ifadeleri veya baş eğme olmadan nötr ön görünümde olmalıdır.
  • Yüz, gölgelerden veya kırmızı gözlerden arınmalıdır. Bunlardan herhangi biri gerçekleşirse fotoğrafı yeniden çekin.
  • Arka plan, herhangi bir gölge olmadan tekdüzen ve düz olmalıdır.
  • Yüz resmin içinde ortalanmalı ve resmin en az %50'sini doldurmalıdır.

Doğrulama ile canlılık düzenlemesini ayarlayın.

Doğrulama düzenlemesi ile canlılık konusunda üst düzey adımlar aşağıda gösterilmiştir:

  1. Doğrulama başvuru görüntüsünü aşağıdaki iki yöntemden biriyle sağlama:

    • Uygulama sunucusu canlılık oturumu oluştururken başvuru görüntüsünü sağlar. Doğrulama ile canlılık oturumu oluştururken kullanılan her istek parametresiyle ilgili daha fazla bilgiye Oturum Oluşturma işlemini doğrulama ile canlılık bölümünden başvurulur.

      var endpoint = new Uri(System.Environment.GetEnvironmentVariable("FACE_ENDPOINT"));
      var credential = new AzureKeyCredential(System.Environment.GetEnvironmentVariable("FACE_APIKEY"));
      
      var sessionClient = new FaceSessionClient(endpoint, credential);
      
      var createContent = new CreateLivenessWithVerifySessionContent(LivenessOperationMode.Passive)
      {
          DeviceCorrelationId = "723d6d03-ef33-40a8-9682-23a1feb7bccd"
      };
      using var fileStream = new FileStream("test.png", FileMode.Open, FileAccess.Read);
      
      var createResponse = await sessionClient.CreateLivenessWithVerifySessionAsync(createContent, fileStream);
      
      var sessionId = createResponse.Value.SessionId;
      Console.WriteLine("Session created.");
      Console.WriteLine($"Session id: {sessionId}");
      Console.WriteLine($"Auth token: {createResponse.Value.AuthToken}");
      Console.WriteLine("The reference image:");
      Console.WriteLine($"  Face rectangle: {createResponse.Value.VerifyImage.FaceRectangle.Top}, {createResponse.Value.VerifyImage.FaceRectangle.Left}, {createResponse.Value.VerifyImage.FaceRectangle.Width}, {createResponse.Value.VerifyImage.FaceRectangle.Height}");
      Console.WriteLine($"  The quality for recognition: {createResponse.Value.VerifyImage.QualityForRecognition}");
      

      Yanıt gövdesi örneği:

      {
          "verifyImage": {
              "faceRectangle": {
                  "top": 506,
                  "left": 51,
                  "width": 680,
                  "height": 475
              },
              "qualityForRecognition": "high"
          },
          "sessionId": "3847ffd3-4657-4e6c-870c-8e20de52f567",
          "authToken": "<session-authorization-token>"
      }
      
    • Ön uç uygulaması, SDK'yi başlatırken başvuru görüntüsünü sağlar. Bu senaryo web çözümünde desteklenmez.

      val singleFaceImageSource = VisionSource.fromFile("/path/to/image.jpg")
      mFaceAnalysisOptions?.setRecognitionMode(RecognitionMode.valueOfVerifyingMatchToFaceInSingleFaceImage(singleFaceImageSource))
      
  2. Uygulama sunucusu artık canlılık sonucuna ek olarak doğrulama sonucunu sorgulayabilir.

    var getResultResponse = await sessionClient.GetLivenessWithVerifySessionResultAsync(sessionId);
    var sessionResult = getResultResponse.Value;
    Console.WriteLine($"Session id: {sessionResult.Id}");
    Console.WriteLine($"Session status: {sessionResult.Status}");
    Console.WriteLine($"Liveness detection request id: {sessionResult.Result?.RequestId}");
    Console.WriteLine($"Liveness detection received datetime: {sessionResult.Result?.ReceivedDateTime}");
    Console.WriteLine($"Liveness detection decision: {sessionResult.Result?.Response.Body.LivenessDecision}");
    Console.WriteLine($"Verification result: {sessionResult.Result?.Response.Body.VerifyResult.IsIdentical}");
    Console.WriteLine($"Verification confidence: {sessionResult.Result?.Response.Body.VerifyResult.MatchConfidence}");
    Console.WriteLine($"Session created datetime: {sessionResult.CreatedDateTime}");
    Console.WriteLine($"Auth token TTL (seconds): {sessionResult.AuthTokenTimeToLiveInSeconds}");
    Console.WriteLine($"Session expired: {sessionResult.SessionExpired}");
    Console.WriteLine($"Device correlation id: {sessionResult.DeviceCorrelationId}");
    

    Yanıt gövdesi örneği:

    {
        "status": "ResultAvailable",
        "result": {
            "id": 1,
            "sessionId": "3847ffd3-4657-4e6c-870c-8e20de52f567",
            "requestId": "f71b855f-5bba-48f3-a441-5dbce35df291",
            "receivedDateTime": "2023-10-31T17:03:51.5859307+00:00",
            "request": {
                "url": "/face/v1.1-preview.1/detectlivenesswithverify/singlemodal",
                "method": "POST",
                "contentLength": 352568,
                "contentType": "multipart/form-data; boundary=--------------------------590588908656854647226496",
                "userAgent": ""
            },
            "response": {
                "body": {
                    "livenessDecision": "realface",
                    "target": {
                        "faceRectangle": {
                            "top": 59,
                            "left": 121,
                            "width": 409,
                            "height": 395
                        },
                        "fileName": "content.bin",
                        "timeOffsetWithinFile": 0,
                        "imageType": "Color"
                    },
                    "modelVersionUsed": "2022-10-15-preview.04",
                    "verifyResult": {
                        "matchConfidence": 0.9304124,
                        "isIdentical": true
                    }
                },
                "statusCode": 200,
                "latencyInMilliseconds": 1306
            },
            "digest": "2B39F2E0EFDFDBFB9B079908498A583545EBED38D8ACA800FF0B8E770799F3BF"
        },
        "id": "3847ffd3-4657-4e6c-870c-8e20de52f567",
        "createdDateTime": "2023-10-31T16:58:19.8942961+00:00",
        "authTokenTimeToLiveInSeconds": 600,
        "deviceCorrelationId": "723d6d03-ef33-40a8-9682-23a1feb7bccd",
        "sessionExpired": true
    }
    
  3. Artık sonucunu sorgulamazsanız uygulama sunucusu oturumu silebilir.

    await sessionClient.DeleteLivenessWithVerifySessionAsync(sessionId);
    Console.WriteLine($"The session {sessionId} is deleted.");
    

Kaynakları temizleme

Azure AI hizmetleri aboneliğini temizlemek ve kaldırmak istiyorsanız, kaynağı veya kaynak grubunu silebilirsiniz. Kaynak grubunun silinmesi, kaynak grubuyla ilişkili diğer tüm kaynakları da siler.

Canlılık API'lerindeki diğer seçenekler hakkında bilgi edinmek için bkz. Azure AI Vision SDK başvurusu.

Canlılık çözümünü düzenlemeye yönelik özellikler hakkında daha fazla bilgi edinmek için Oturum REST API başvurusuna bakın.