Tutorial: Mendeteksi keaktivaan di wajah

Deteksi Face Liveness dapat digunakan untuk menentukan apakah wajah dalam aliran video input nyata (langsung) atau palsu (spoof). Ini adalah blok bangunan penting dalam sistem autentikasi biometrik untuk mencegah serangan spoofing dari peniru yang mencoba 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 tersebut menjadi semakin penting dengan maraknya keuangan digital, kontrol akses jarak jauh, dan proses verifikasi identitas online.

Solusi deteksi keakuratan berhasil mempertahankan berbagai jenis spoof mulai dari cetakan kertas, masker 2d/3d, dan presentasi spoof pada ponsel dan laptop. Deteksi keaktifan adalah area penelitian aktif, dengan peningkatan berkelanjutan yang dilakukan untuk menangkal serangan spoofing yang semakin canggih dari waktu ke waktu. Peningkatan berkelanjutan akan 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.

Prasyarat

  • 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 akan menempelkan kunci dan titik akhir Anda ke dalam kode di mulai cepat nanti.
    • 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). Untuk memulai, Anda perlu mengajukan permohonan fitur Face Recognition Limited Access untuk mendapatkan akses ke SDK. Untuk informasi selengkapnya, lihat halaman Akses Terbatas Wajah.

Melakukan deteksi keaktivaan

Integrasi solusi keakuratan melibatkan dua komponen yang berbeda: aplikasi seluler dan server/orkestrator aplikasi.

Mengintegrasikan liveness ke dalam aplikasi seluler

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 Android dan Swift untuk aplikasi seluler iOS:

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

Mengatur solusi keaktivaan

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

Diagram alur kerja keaktifan di Azure AI Face.

  1. Aplikasi seluler 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.

    Request:
    curl --location '<insert-api-endpoint>/face/v1.1-preview.1/detectliveness/singlemodal/sessions' \
    --header 'Ocp-Apim-Subscription-Key:<insert-api-key>
    --header 'Content-Type: application/json' \
    --data '{
      "livenessOperationMode": "passive",
      "deviceCorrelationId": "723d6d03-ef33-40a8-9682-23a1feb7bccd",
      "sendResultsToClient": "false"
    }'
     
    Response:
    {
        "sessionId": "a6e7193e-b638-42e9-903f-eaf60d2b40a5",
        "authToken": <session-authorization-token>
    }
    
  3. Server aplikasi menyediakan token otorisasi sesi kembali ke aplikasi seluler.

  4. Aplikasi seluler 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))
    })
    
    serviceOptions?.authorizationToken = "<INSERT_TOKEN_HERE>"
    
  5. SDK kemudian memulai kamera, memandu pengguna untuk memosisikan dengan benar dan kemudian 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 seluler bahwa pemeriksaan keakuratan telah selesai.

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

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

    Request:
    curl --location '<insert-api-endpoint>/face/v1.1-preview.1/detectliveness/singlemodal/sessions/a3dc62a3-49d5-45a1-886c-36e7df97499a' \
    --header 'Ocp-Apim-Subscription-Key: <insert-api-key>
    
    Response:
    {
        "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": "video.webp",
                        "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
    }
    
    

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-verify Azure AI Face.

Pilih gambar referensi yang baik

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. Berikan gambar referensi verifikasi dengan salah satu dari dua metode berikut:

    • Server aplikasi menyediakan gambar referensi saat membuat sesi liveness.

      Request:
      curl --location '<insert-api-endpoint>/face/v1.1-preview.1/detectlivenesswithverify/singlemodal/sessions' \
      --header 'Ocp-Apim-Subscription-Key: <api_key>' \
      --form 'Parameters="{
        \"livenessOperationMode\": \"passive\",
        \"deviceCorrelationId\": \"723d6d03-ef33-40a8-9682-23a1feb7bccd\"
      }"' \
      --form 'VerifyImage=@"test.png"'
      
      Response:
      {
          "verifyImage": {
              "faceRectangle": {
                  "top": 506,
                  "left": 51,
                  "width": 680,
                  "height": 475
              },
              "qualityForRecognition": "high"
          },
          "sessionId": "3847ffd3-4657-4e6c-870c-8e20de52f567",
          "authToken":<session-authorization-token>
      }
      
      
    • Aplikasi seluler menyediakan gambar referensi saat menginisialisasi SDK.

      val singleFaceImageSource = VisionSource.fromFile("/path/to/image.jpg")
      mFaceAnalysisOptions?.setRecognitionMode(RecognitionMode.valueOfVerifyingMatchToFaceInSingleFaceImage(singleFaceImageSource))
      
      if let path = Bundle.main.path(forResource: "<IMAGE_RESOURCE_NAME>", ofType: "<IMAGE_RESOURCE_TYPE>"),
         let image = UIImage(contentsOfFile: path),
         let singleFaceImageSource = try? VisionSource(uiImage: image) {
          try methodOptions.setRecognitionMode(.verifyMatchToFaceIn(singleFaceImage: singleFaceImageSource))
      }
      
  2. Server aplikasi sekarang dapat mengkueri hasil verifikasi selain hasil keaktivaan.

    Request:
    curl --location '<insert-api-endpoint>/face/v1.1-preview.1/detectlivenesswithverify/singlemodal/sessions/3847ffd3-4657-4e6c-870c-8e20de52f567' \
    --header 'Content-Type: multipart/form-data' \
    --header 'apim-recognition-model-preview-1904: true' \
    --header 'Authorization: Bearer.<session-authorization-token> \
    --form 'Content=@"video.webp"' \
    --form 'Metadata="<insert-metadata>"
    
    Response:
    {
        "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": "video.webp",
                        "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
    }
    

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.

Langkah berikutnya

Lihat referensi Azure AI Vision SDK untuk mempelajari tentang opsi lain dalam API liveness.

Lihat referensi REST API Sesi untuk mempelajari selengkapnya tentang fitur yang tersedia untuk mengatur solusi keaktivaan.