Självstudie: Identifiera livskraft i ansikten

Identifiering av ansiktsuppspelning kan användas för att avgöra om ett ansikte i en indatavideoström är verklig (live) eller falsk (förfalskning). Detta är en viktig byggsten i ett biometriskt autentiseringssystem för att förhindra förfalskning av attacker från bedragare som försöker få åtkomst till systemet med hjälp av ett fotografi, en video, en mask eller något annat sätt att utge sig för att vara en annan person.

Målet med livenessidentifiering är att säkerställa att systemet interagerar med en fysiskt närvarande levande person vid tidpunkten för autentiseringen. Sådana system har blivit allt viktigare med framväxten av digital finansiering, fjärråtkomstkontroll och identitetsverifiering online.

Lösningen för livenessidentifiering skyddar framgångsrikt mot olika förfalskningstyper som sträcker sig från pappersutskrifter, 2d/3d masker och falska presentationer på telefoner och bärbara datorer. Liveness detection är ett aktivt område för forskning, med kontinuerliga förbättringar som görs för att motverka alltmer sofistikerade förfalskningsattacker över tid. Kontinuerliga förbättringar kommer att distribueras till klienten och tjänstkomponenterna över tid när den övergripande lösningen blir mer robust för nya typer av attacker.

Viktigt!

Ansiktsklient-SDK:er för liveness är en gated-funktion. Du måste begära åtkomst till liveness-funktionen genom att fylla i intagsformuläret för ansiktsigenkänning. När din Azure-prenumeration beviljas åtkomst kan du ladda ned Face liveness SDK.

Förutsättningar

  • Ditt Azure-konto måste ha tilldelats rollen Cognitive Services-deltagare för att du ska kunna godkänna de ansvarsfulla AI-villkoren och skapa en resurs. Om du vill tilldela den här rollen till ditt konto följer du stegen i dokumentationen Tilldela roller eller kontaktar administratören.
  • När du har din Azure-prenumeration skapar du en ansiktsresurs i Azure-portalen för att hämta din nyckel och slutpunkt. När den har distribuerats väljer du Gå till resurs.
    • Du behöver nyckeln och slutpunkten från den resurs som du skapar för att ansluta ditt program till ansiktstjänsten. Du klistrar in nyckeln och slutpunkten i koden senare i snabbstarten.
    • Du kan använda den kostnadsfria prisnivån (F0) för att prova tjänsten och uppgradera senare till en betald nivå för produktion.
  • Åtkomst till Azure AI Vision Face Client SDK för mobil (IOS och Android). För att komma igång måste du ansöka om funktionerna för begränsad åtkomst för ansiktsigenkänning för att få åtkomst till SDK:t. Mer information finns på sidan Ansiktsbegränsade åtkomst .

Utföra livenessidentifiering

Integreringen av liveness-lösningen omfattar två olika komponenter: ett mobilprogram och en appserver/orchestrator.

Integrera livskraft i mobilprogram

När du har åtkomst till SDK följer du anvisningarna på GitHub-lagringsplatsen azure-ai-vision-sdk för att integrera användargränssnittet och koden i ditt interna mobilprogram. Liveness SDK stöder både Java/Kotlin för Android och Swift för iOS-mobilappar:

  • För Swift iOS följer du anvisningarna i iOS-exemplet
  • För Kotlin/Java Android följer du anvisningarna i Android-exemplet

När du har lagt till koden i ditt program hanterar SDK:n start av kameran, vägleder slutanvändaren att justera sin position, komponerar nyttolasten för liveness och anropar Azure AI Face-molntjänsten för att bearbeta nyttolasten för liveness.

Orkestrera liveness-lösningen

De övergripande stegen som ingår i orkestrering av liveness illustreras nedan:

Diagram över arbetsflödet för liveness i Azure AI Face.

  1. Mobilprogrammet startar liveness-kontrollen och meddelar appservern.

  2. Appservern skapar en ny liveness-session med Azure AI Face Service. Tjänsten skapar en liveness-session och svarar tillbaka med en sessionsauktoriseringstoken.

    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. Appservern tillhandahåller sessionsauktoriseringstoken tillbaka till mobilprogrammet.

  4. Mobilprogrammet tillhandahåller sessionsauktoriseringstoken under Azure AI Vision SDK:s initiering.

    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 startar sedan kameran, vägleder användaren att placera korrekt och förbereder sedan nyttolasten för att anropa tjänstslutpunkten för livenessidentifiering.

  6. SDK:n anropar Tjänsten Azure AI Vision Face för att utföra livenessidentifieringen. När tjänsten svarar meddelar SDK:et mobilprogrammet att liveness-kontrollen har slutförts.

  7. Mobilprogrammet vidarebefordrar liveness-kontrollens slutförande till appservern.

  8. Appservern kan nu fråga efter livenessidentifieringsresultatet från Azure AI Vision Face Service.

    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
    }
    
    

Utföra livenessidentifiering med ansiktsverifiering

Att kombinera ansiktsverifiering med livenessidentifiering möjliggör biometrisk verifiering av en viss person av intresse med en extra garanti för att personen är fysiskt närvarande i systemet. Det finns två delar för att integrera livskraft med verifiering:

  1. Välj en bra referensbild.
  2. Konfigurera orkestrering av liveness med verifiering.

Diagram över arbetsflödet liveness-with-verify i Azure AI Face.

Välj en bra referensbild

Använd följande tips för att se till att dina indatabilder ger de mest exakta igenkänningsresultaten.

Tekniska krav:

  • De indatabildformat som stöds är JPEG, PNG, GIF (den första ramen), BMP.
  • Bildfilens storlek får inte vara större än 6 MB.
  • Du kan använda qualityForRecognition attributet i ansiktsidentifieringsåtgärden när du använder tillämpliga identifieringsmodeller som en allmän riktlinje för om bilden sannolikt har tillräcklig kvalitet för att försöka identifiera ansiktet. Endast "high" kvalitetsbilder rekommenderas för personregistrering och kvalitet på eller högre "medium" rekommenderas för identifieringsscenarier.

Sammansättningskrav:

  • Fotot är tydligt och skarpt, inte suddigt, pixeliserat, förvrängt eller skadat.
  • Foto ändras inte för att ta bort ansiktsfläckar eller ansiktsutseende.
  • Fotot måste vara i ett RGB-format som stöds (JPEG, PNG, WEBP, BMP). Rekommenderad ansiktsstorlek är 200 bildpunkter x 200 bildpunkter. Ansiktsstorlekar som är större än 200 bildpunkter x 200 bildpunkter resulterar inte i bättre AI-kvalitet och inte större än 6 MB i storlek.
  • Användaren har inte glasögon, masker, hattar, hörlurar, huvudbeklädnader eller ansiktsbeklädnader. Ansiktet ska vara fritt från eventuella hinder.
  • Ansiktssmycken tillåts förutsatt att de inte döljer ditt ansikte.
  • Endast ett ansikte ska vara synligt på bilden.
  • Ansiktet ska vara i neutral framåtriktad pose med båda ögonen öppna, munnen stängd, utan extrema ansiktsuttryck eller huvudlutning.
  • Ansiktet ska vara fritt från skuggor eller röda ögon. Omtagningsfoto om något av dessa inträffar.
  • Bakgrunden ska vara enhetlig och oformaterad, utan skuggor.
  • Ansiktet ska centreras i bilden och fylla minst 50 % av bilden.

Konfigurera orkestrering av liveness med verifiering.

De övergripande stegen som ingår i livskraften med verifieringsorkestrering illustreras nedan:

  1. Ange verifieringsreferensbilden med någon av följande två metoder:

    • Appservern tillhandahåller referensbilden när du skapar liveness-sessionen.

      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>
      }
      
      
    • Mobilprogrammet tillhandahåller referensbilden när SDK initieras.

      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. Appservern kan nu fråga efter verifieringsresultatet utöver liveness-resultatet.

    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
    }
    

Rensa resurser

Om du vill rensa och ta bort en Azure AI-tjänstprenumeration kan du ta bort resursen eller resursgruppen. Om du tar bort resursgruppen tas även alla andra resurser som är associerade med den bort.

Nästa steg

Se Azure AI Vision SDK-referensen för att lära dig mer om andra alternativ i API:erna för liveness.

Mer information om de funktioner som är tillgängliga för att orkestrera liveness-lösningen finns i REST API-referensen för sessioner.