Bagikan melalui


Tutorial: Mendeteksi keaktivaan di wajah

Deteksi Face Liveness digunakan untuk menentukan apakah wajah dalam aliran video input nyata (langsung) atau palsu (palsu). Ini adalah blok bangunan penting dalam sistem autentikasi biometrik untuk mencegah peniru mendapatkan akses ke sistem menggunakan foto, video, masker, atau cara lain untuk meniru orang lain.

Tujuan deteksi keaktifan adalah untuk memastikan bahwa sistem berinteraksi dengan orang yang hadir secara fisik pada saat autentikasi. Sistem ini semakin penting dengan maraknya keuangan digital, kontrol akses jarak jauh, dan proses verifikasi identitas online.

Solusi deteksi keaktifan Wajah Azure AI berhasil mempertahankan terhadap berbagai jenis spoof mulai dari cetakan kertas, masker 2D/3D, dan presentasi spoof di ponsel dan laptop. Deteksi keaktifan adalah area penelitian aktif, dengan peningkatan berkelanjutan dilakukan untuk menangkal serangan spoofing yang semakin canggih. Peningkatan berkelanjutan diluncurkan ke klien dan komponen layanan dari waktu ke waktu karena solusi keseluruhan menjadi lebih kuat untuk jenis serangan baru.

Penting

SDK klien Face untuk keakuratan adalah fitur yang terjaga. Anda harus meminta akses ke fitur keaktivitas dengan mengisi formulir asupan Pengenalan Wajah. Saat langganan Azure Anda diberikan akses, Anda dapat mengunduh Face liveness SDK.

Pendahuluan

Integrasi solusi liveness melibatkan dua komponen yang berbeda: aplikasi seluler/web frontend dan server/orkestrator aplikasi.

Diagram alur kerja keaktifan di Azure AI Face.

  • Aplikasi frontend: Aplikasi frontend menerima otorisasi dari server aplikasi untuk memulai deteksi keaktifan. Tujuan utamanya adalah untuk mengaktifkan kamera dan memandu pengguna akhir secara akurat melalui proses deteksi keaktifan.
  • Server aplikasi: Server aplikasi berfungsi sebagai server backend untuk membuat sesi deteksi keaktifan dan mendapatkan token otorisasi dari layanan Face untuk sesi tertentu. Token ini mengotorisasi aplikasi frontend untuk melakukan deteksi liveness. Tujuan server aplikasi adalah untuk mengelola sesi, memberikan otorisasi untuk aplikasi frontend, dan untuk melihat hasil proses deteksi keaktifan.

Selain itu, kami menggabungkan verifikasi wajah dengan deteksi liveness untuk memverifikasi apakah orang tersebut adalah orang tertentu yang Anda tentukan. Tabel berikut ini menjelaskan detail fitur deteksi keaktivaan:

Fitur Deskripsi
Deteksi keaktivaan Tentukan input nyata atau palsu, dan hanya server aplikasi yang memiliki wewenang untuk memulai pemeriksaan keaktifan dan mengkueri hasilnya.
Deteksi keakuratan dengan verifikasi wajah Tentukan input nyata atau palsu dan verifikasi identitas orang tersebut berdasarkan gambar referensi yang Anda berikan. Baik server aplikasi atau aplikasi frontend dapat menyediakan gambar referensi. Hanya server aplikasi yang memiliki wewenang untuk menginisialisasi pemeriksaan keaktivaan dan mengkueri hasilnya.

Tutorial ini menunjukkan cara mengoperasikan aplikasi frontend dan server aplikasi untuk melakukan deteksi liveness dan deteksi liveness dengan verifikasi wajah di berbagai SDK bahasa.

Prasyarat

  • Langganan Azure - Buat langganan secara gratis
  • Akun Azure Anda harus memiliki peran Kontributor Cognitive Services yang ditetapkan agar Anda menyetujui persyaratan AI yang bertanggung jawab dan membuat sumber daya. Agar peran ini ditetapkan ke akun Anda, ikuti langkah-langkah dalam dokumentasi Menetapkan peran, atau hubungi administrator Anda.
  • Setelah Anda memiliki langganan Azure, buat sumber daya Face di portal Azure untuk mendapatkan kunci dan titik akhir Anda. Setelah menyebar, pilih Buka sumber daya.
    • Anda memerlukan kunci dan titik akhir dari sumber daya yang Anda buat untuk menghubungkan aplikasi Anda ke layanan Face.
    • Anda dapat menggunakan tingkat harga gratis (F0) untuk percobaan, lalu meningkatkannya ke tingkat berbayar untuk produksi.
  • Akses ke Azure AI Vision Face Client SDK untuk seluler (IOS dan Android) dan web. Untuk memulai, Anda perlu mengajukan permohonan fitur Face Recognition Limited Access untuk mendapatkan akses ke SDK. Untuk informasi selengkapnya, lihat halaman Akses Terbatas Wajah.

Menyiapkan aplikasi frontend dan server aplikasi untuk melakukan deteksi liveness

Kami menyediakan SDK dalam bahasa yang berbeda untuk aplikasi frontend dan server aplikasi. Lihat instruksi berikut untuk menyiapkan aplikasi frontend dan server aplikasi Anda.

Unduh SDK untuk aplikasi frontend

Setelah Anda memiliki akses ke SDK, ikuti instruksi di repositori GitHub azure-ai-vision-sdk untuk mengintegrasikan UI dan kode ke dalam aplikasi seluler asli Anda. SDK liveness mendukung Java/Kotlin untuk aplikasi seluler Android, Swift untuk aplikasi seluler iOS dan JavaScript untuk aplikasi web:

Setelah Anda menambahkan kode ke dalam aplikasi, SDK menangani memulai kamera, memandu pengguna akhir dalam menyesuaikan posisi mereka, menyusun payload keaktifan, dan memanggil layanan cloud Azure AI Face untuk memproses payload keaktifan.

Mengunduh pustaka klien Azure AI Face untuk server aplikasi

Server/orkestrator aplikasi bertanggung jawab untuk mengontrol siklus hidup sesi liveness. Server aplikasi harus membuat sesi sebelum melakukan deteksi liveness, dan kemudian dapat mengkueri hasilnya dan menghapus sesi ketika pemeriksaan keaktivaan selesai. Kami menawarkan pustaka dalam berbagai bahasa untuk mengimplementasikan server aplikasi Anda dengan mudah. Ikuti langkah-langkah berikut untuk menginstal paket yang Anda inginkan:

Membuat variabel lingkungan

Dalam contoh ini, tulis kredensial Anda ke variabel lingkungan di komputer lokal yang menjalankan aplikasi.

Buka portal Azure. Jika sumber daya yang Anda buat di bagian Prasyarat berhasil disebarkan, pilih Buka sumber daya di bawah Langkah Berikutnya. Anda dapat menemukan kunci dan titik akhir Anda di bawah Manajemen Sumber Daya di halaman Kunci dan Titik Akhir. Kunci sumber daya Anda tidak sama dengan ID langganan Azure Anda.

Untuk mengatur variabel lingkungan untuk kunci dan titik akhir Anda, buka jendela konsol dan ikuti instruksi untuk sistem operasi dan lingkungan pengembangan Anda.

  • Untuk mengatur FACE_APIKEY variabel lingkungan, ganti <your_key> dengan salah satu kunci untuk sumber daya Anda.
  • Untuk mengatur FACE_ENDPOINT variabel lingkungan, ganti <your_endpoint> dengan titik akhir untuk sumber daya Anda.

Penting

Jika Anda menggunakan kunci API, simpan dengan aman di tempat lain, seperti di Azure Key Vault. Jangan sertakan kunci API langsung dalam kode Anda, dan jangan pernah mempostingnya secara publik.

Untuk informasi selengkapnya tentang keamanan layanan AI, lihat Mengautentikasi permintaan ke layanan Azure AI.

setx FACE_APIKEY <your_key>
setx FACE_ENDPOINT <your_endpoint>

Setelah menambahkan variabel lingkungan, Anda mungkin perlu memulai ulang program yang sedang berjalan yang akan membaca variabel lingkungan, termasuk jendela konsol.

Melakukan deteksi keaktivaan

Langkah-langkah tingkat tinggi yang terlibat dalam orkestrasi keaktivaan diilustrasikan di bawah ini:

Diagram alur kerja keaktifan di Azure AI Face.

  1. Aplikasi frontend memulai pemeriksaan keaktifan dan memberi tahu server aplikasi.

  2. Server aplikasi membuat sesi keaktifan baru dengan Azure AI Face Service. Layanan ini membuat sesi keaktifan dan merespons kembali dengan token otorisasi sesi. Informasi lebih lanjut mengenai setiap parameter permintaan yang terlibat dalam membuat sesi liveness dirujuk dalam Liveness Create Session Operation.

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

    Contoh isi respons:

    {
        "sessionId": "a6e7193e-b638-42e9-903f-eaf60d2b40a5",
        "authToken": "<session-authorization-token>"
    }
    
  3. Server aplikasi menyediakan token otorisasi sesi kembali ke aplikasi frontend.

  4. Aplikasi frontend menyediakan token otorisasi sesi selama inisialisasi Azure AI Vision SDK.

    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 kemudian memulai kamera, memandu pengguna untuk memposisikan dengan benar, lalu menyiapkan payload untuk memanggil titik akhir layanan deteksi keaktifan.

  6. SDK memanggil layanan Azure AI Vision Face untuk melakukan deteksi keaktifan. Setelah layanan merespons, SDK memberi tahu aplikasi frontend bahwa pemeriksaan keaktivaan telah selesai.

  7. Aplikasi frontend menyampaikan penyelesaian pemeriksaan keaktivitas ke server aplikasi.

  8. Server aplikasi sekarang dapat mengkueri hasil deteksi keaktifan dari layanan Azure AI Vision Face.

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

    Contoh isi respons:

    {
        "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. Server aplikasi dapat menghapus sesi jika Anda tidak mengkueri hasilnya lagi.

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

Melakukan deteksi liveness dengan verifikasi wajah

Menggabungkan verifikasi wajah dengan deteksi keaktifan memungkinkan verifikasi biometrik orang tertentu yang tertarik dengan jaminan tambahan bahwa orang tersebut secara fisik ada dalam sistem. Ada dua bagian untuk mengintegrasikan liveness dengan verifikasi:

  1. Pilih gambar referensi yang baik.
  2. Siapkan orkestrasi keakuratan dengan verifikasi.

Diagram alur kerja liveness-with-face-verification Azure AI Face.

Pilih gambar referensi

Gunakan tips berikut untuk memastikan bahwa gambar input Anda memberikan hasil pengenalan yang paling akurat.

Persyaratan Teknis

  • Format gambar input yang didukung adalah JPEG, PNG, GIF (bingkai pertama), BMP.
  • Ukuran file gambar tidak boleh melebihi 6 MB.
  • Anda dapat menggunakan qualityForRecognition atribut dalam operasi deteksi wajah saat menggunakan model deteksi yang berlaku sebagai pedoman umum apakah gambar kemungkinan memiliki kualitas yang memadai untuk mencoba pengenalan wajah. Hanya "high" gambar berkualitas yang direkomendasikan untuk pendaftaran dan kualitas orang di atau di atasnya "medium" yang direkomendasikan untuk skenario identifikasi.

Persyaratan komposisi

  • Foto jelas dan tajam, tidak buram, pikselasi, terdistorsi, atau rusak.
  • Foto tidak diubah untuk menghilangkan noda wajah atau penampilan wajah.
  • Foto harus dalam format yang didukung warna RGB (JPEG, PNG, WEBP, BMP). Ukuran Wajah yang Direkomendasikan adalah 200 piksel x 200 piksel. Ukuran wajah yang lebih besar dari 200 piksel x 200 piksel tidak akan menghasilkan kualitas AI yang lebih baik, dan ukurannya tidak lebih besar dari 6 MB.
  • Pengguna tidak mengenakan kacamata, masker, topi, headphone, penutup kepala, atau penutup wajah. Wajah harus bebas dari penghalang.
  • Perhiasan wajah diperbolehkan asalkan mereka tidak menyembunyikan wajah Anda.
  • Hanya satu wajah yang harus terlihat di foto.
  • Wajah harus dalam pose menghadap depan netral dengan kedua mata terbuka, mulut tertutup, tanpa ekspresi wajah ekstrem atau kebiruan kepala.
  • Wajah harus bebas dari bayangan atau mata merah. Retake foto jika salah satu dari ini terjadi.
  • Latar belakang harus seragam dan polos, bebas dari bayangan apa pun.
  • Wajah harus dipusatkan dalam gambar dan mengisi setidaknya 50% dari gambar.

Siapkan orkestrasi keakuratan dengan verifikasi.

Langkah-langkah tingkat tinggi yang terlibat dalam keakuratan dengan orkestrasi verifikasi diilustrasikan di bawah ini:

  1. Menyediakan gambar referensi verifikasi dengan salah satu dari dua metode berikut:

    • Server aplikasi menyediakan gambar referensi saat membuat sesi liveness. Informasi lebih lanjut mengenai setiap parameter permintaan yang terlibat dalam membuat sesi liveness dengan verifikasi dirujuk dalam Liveness With Verify Create Session Operation.

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

      Contoh isi respons:

      {
          "verifyImage": {
              "faceRectangle": {
                  "top": 506,
                  "left": 51,
                  "width": 680,
                  "height": 475
              },
              "qualityForRecognition": "high"
          },
          "sessionId": "3847ffd3-4657-4e6c-870c-8e20de52f567",
          "authToken": "<session-authorization-token>"
      }
      
    • Aplikasi frontend menyediakan gambar referensi saat menginisialisasi SDK. Skenario ini tidak didukung dalam solusi web.

      val singleFaceImageSource = VisionSource.fromFile("/path/to/image.jpg")
      mFaceAnalysisOptions?.setRecognitionMode(RecognitionMode.valueOfVerifyingMatchToFaceInSingleFaceImage(singleFaceImageSource))
      
  2. Server aplikasi sekarang dapat mengkueri hasil verifikasi selain hasil keaktivaan.

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

    Contoh isi respons:

    {
        "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. Server aplikasi dapat menghapus sesi jika Anda tidak mengkueri hasilnya lagi.

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

Membersihkan sumber daya

Jika Anda ingin membersihkan dan menghapus langganan layanan Azure AI, Anda dapat menghapus sumber daya atau grup sumber daya. Menghapus grup sumber daya juga menghapus sumber daya apa pun yang terkait dengannya.

Untuk mempelajari tentang opsi lain dalam API keaktifan, lihat referensi Azure AI Vision SDK.

Untuk mempelajari selengkapnya tentang fitur yang tersedia untuk mengatur solusi keaktivaan, lihat referensi REST API Sesi.