教學課程:偵測臉部中的活躍度

臉部即時偵測可用來判斷輸入視訊串流中的臉部是否為真實(即時)或假(詐騙)。 這是生物特徵辨識驗證系統中的重要建置組塊,以防止冒充冒充他人的照片、視訊、遮罩或其他手段,從冒充冒充他人的冒充系統來詐騙攻擊。

即時偵測的目標是確保系統在驗證時與實際存在的即時人員互動。 隨著數位金融、遠端訪問和在線身分識別驗證程序的興起,這類系統變得越來越重要。

即時偵測解決方案可成功防禦各種詐騙類型,從紙印、2d/3d 面具,以及手機和筆記型電腦上的詐騙簡報。 活躍度偵測是一個活躍的研究領域,不斷改進,以對抗隨著時間的推移日益複雜的詐騙攻擊。 隨著整體解決方案對新類型的攻擊更強固,持續改善會持續向用戶端和服務元件推出。

重要

適用於活躍性的臉部用戶端 SDK 是一項閘道功能。 您必須填寫 臉部辨識接收表單,以要求存取活躍度功能。 當您的 Azure 訂用帳戶獲得存取權時,您可以下載 Face liveness SDK。

必要條件

  • 您的 Azure 帳戶必須 指派認知服務參與者 角色,才能同意負責任的 AI 條款並建立資源。 若要將此角色指派給您的帳戶,請遵循指派角色檔中的步驟,或連絡您的系統管理員。
  • 擁有 Azure 訂用帳戶之後,在 Azure 入口網站中建立臉部資源,以取得您的金鑰和端點。 在其部署後,選取 [前往資源]
    • 您需要從您建立的資源取得密鑰和端點,才能將應用程式連線到臉部服務。 您稍後會在快速入門中將金鑰和端點貼到程式碼中。
    • 您可以使用免費定價層 (F0) 來試用服務,之後可升級至付費層以用於實際執行環境。
  • 存取適用於行動裝置的 Azure AI 視覺臉部用戶端 SDK(IOS 和 Android)。 若要開始使用,您必須申請 臉部辨識有限存取功能 ,才能存取 SDK。 如需詳細資訊,請參閱 臉部有限存取 頁面。

執行活躍度偵測

即時性解決方案整合涉及兩個不同的元件:行動應用程式和應用程式伺服器/協調器。

將即時性整合到行動應用程式

存取 SDK 之後,請遵循 azure-ai-vision-sdk GitHub 存放庫中的指示,將 UI 和程式代碼整合到原生行動應用程式中。 liveness SDK 同時支援適用於 Android 的 Java/Kotlin 和適用於 iOS 行動應用程式的 Swift:

  • 針對 Swift iOS,請遵循 iOS 範例中的 指示
  • 針對 Kotlin/Java Android,請遵循 Android 範例中的 指示

將程式代碼新增至應用程式之後,SDK 會處理啟動相機、引導使用者調整其位置、撰寫即時承載,以及呼叫 Azure AI Face 雲端服務來處理即時承載。

協調即時性解決方案

參與實時協調流程的高階步驟如下所示:

Diagram of the liveness workflow in Azure AI Face.

  1. 行動應用程式會啟動即時檢查,並通知應用程式伺服器。

  2. 應用程式伺服器會使用 Azure AI Face Service 建立新的活躍度會話。 服務會建立即時會話,並使用會話授權令牌回應。

    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. 應用程式伺服器會將會話授權令牌傳回行動應用程式。

  4. 行動應用程式會在 Azure AI 視覺 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 接著會啟動相機、引導使用者正確定位,然後準備承載以呼叫即時偵測服務端點。

  6. SDK 會呼叫 Azure AI 視覺臉部服務來執行即時偵測。 服務回應之後,SDK 會通知行動應用程式是否已完成即時檢查。

  7. 行動應用程式會將即時檢查完成轉接至應用程式伺服器。

  8. 應用程式伺服器現在可以查詢來自 Azure AI 視覺臉部服務的即時偵測結果。

    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
    }
    
    

使用臉部驗證執行即時偵測

將臉部驗證與活躍度偵測結合,可讓特定感興趣的人進行生物特徵辨識驗證,並保證該人員實際存在於系統中。 整合活躍度與驗證有兩個部分:

  1. 選取良好的參考影像。
  2. 使用驗證設定即時協調流程。

Diagram of the liveness-with-verify workflow of Azure AI Face.

選取良好的參考影像

使用下列秘訣來確保輸入影像提供最精確的辨識結果。

技術需求:

  • 支援的輸入影像格式為 JPEG、PNG、GIF(第一個畫面)、BMP。
  • 圖像檔案大小不應大於 6 MB。
  • 當使用適用的偵測模型作為影像是否可能有足夠的質量嘗試臉部辨識的一般指導方針時,您可以使用qualityForRecognition臉部偵測作業中的屬性。 針對身分識別案例,建議只 "high" 建議使用品質影像進行人員註冊,且建議在或更新版本 "medium" 的品質。

組合需求:

  • 相片清晰銳利,不模糊、圖元化、扭曲或損壞。
  • 照片不會改變,以移除臉部瑕疵或臉部外觀。
  • 相片必須是 RGB 色彩支援的格式(JPEG、PNG、WEBP、BMP)。 建議的臉部大小為 200 像素 x 200 像素。 大於 200 像素 x 200 像素的臉部大小不會產生更好的 AI 品質,且大小不超過 6 MB。
  • 使用者不戴眼鏡、面具、帽子、耳機、頭罩或面罩。 臉部應該沒有任何障礙。
  • 允許面部珠寶,前提是他們不會隱藏你的臉。
  • 照片中只能看到一張臉。
  • 臉部應處於中性正面姿勢,雙眼睜開,嘴閉,沒有極端的面部表情或頭部傾斜。
  • 臉部應該沒有任何陰影或紅眼睛。 如果其中一個發生,請重新拍攝照片。
  • 背景應該是統一且純文本的,沒有任何陰影。
  • 臉部應置中於影像內,並填滿至少 50% 的影像。

使用驗證設定即時協調流程。

驗證協調流程的活躍度相關高階步驟如下所示:

  1. 透過下列兩種方法之一提供驗證參考影像:

    • 應用程式伺服器會在建立活躍度會話時提供參考映像。

      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>
      }
      
      
    • 行動應用程式會在初始化 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. 除了活躍度結果之外,應用程式伺服器現在可以查詢驗證結果。

    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
    }
    

清除資源

如果您想要清除和移除 Azure AI 服務訂用帳戶,則可以刪除資源或資源群組。 刪除資源群組也會刪除與其相關聯的任何其他資源。

下一步

請參閱 Azure AI 視覺 SDK 參考,以了解即時性 API 中的其他選項。

請參閱會話 REST API 參考,以深入瞭解可用來協調即時性解決方案的功能。