Zelfstudie: Liveness in gezichten detecteren

Gezichts livenessdetectie kan worden gebruikt om te bepalen of een gezicht in een invoervideostream echt (live) of nep (spoof) is. Dit is een cruciale bouwsteen in een biometrisch verificatiesysteem om te voorkomen dat spoofingaanvallen van imposters toegang proberen te krijgen tot het systeem met behulp van een foto, video, masker of andere middelen om een andere persoon te imiteren.

Het doel van livenessdetectie is ervoor te zorgen dat het systeem communiceert met een fysiek aanwezige live persoon op het moment van verificatie. Dergelijke systemen zijn steeds belangrijker geworden met de opkomst van digitale financiën, rastoegangsbeheer en online identiteitsverificatieprocessen.

De oplossing voor livenessdetectie verdedigt zich tegen verschillende soorten adresvervalsing, variërend van papierafdrukken, 2d/3d-maskers en spoofpresentaties op telefoons en laptops. Detectie van liveness is een actief onderzoeksgebied, waarbij doorlopende verbeteringen worden aangebracht om steeds geavanceerdere spoofingaanvallen in de loop van de tijd tegen te gaan. Doorlopende verbeteringen worden in de loop van de tijd geïmplementeerd voor de client en de serviceonderdelen, omdat de algehele oplossing robuuster wordt voor nieuwe typen aanvallen.

Belangrijk

De Face-client-SDK's voor liveness zijn een gated-functie. U moet toegang tot de liveness-functie aanvragen door het intakeformulier voor gezichtsherkenning in te vullen. Wanneer uw Azure-abonnement toegang krijgt, kunt u de Face Liveness SDK downloaden.

Vereisten

  • Aan uw Azure-account moet de rol Cognitive Services-inzender zijn toegewezen om akkoord te gaan met de verantwoordelijke AI-voorwaarden en een resource te maken. Als u deze rol wilt toewijzen aan uw account, volgt u de stappen in de documentatie over rollen toewijzen of neemt u contact op met de beheerder.
  • Zodra u uw Azure-abonnement hebt, maakt u een Face-resource in Azure Portal om uw sleutel en eindpunt op te halen. Nadat de app is geïmplementeerd, selecteert u Ga naar resource.
    • U hebt de sleutel en het eindpunt nodig van de resource die u maakt om uw toepassing te verbinden met de Face-service. Verderop in de quickstart plakt u uw sleutel en eindpunt in de code.
    • U kunt de gratis prijscategorie (F0) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.
  • Toegang tot de Azure AI Vision Face Client SDK voor mobiel (IOS en Android). Om aan de slag te gaan, moet u de functies voor beperkte toegang tot gezichtsherkenning toepassen om toegang te krijgen tot de SDK. Zie de pagina Face Limited Access voor meer informatie.

Livenessdetectie uitvoeren

De integratie van de liveness-oplossing omvat twee verschillende onderdelen: een mobiele toepassing en een app-server/orchestrator.

Liveness integreren in mobiele toepassingen

Zodra u toegang hebt tot de SDK, volgt u de instructies in de GitHub-opslagplaats azure-ai-vision-sdk om de gebruikersinterface en de code te integreren in uw systeemeigen mobiele toepassing. De liveness-SDK ondersteunt zowel Java/Kotlin voor Android als Swift voor mobiele iOS-toepassingen:

Zodra u de code aan uw toepassing hebt toegevoegd, verwerkt de SDK het starten van de camera, zodat de eindgebruiker de positie kan aanpassen, de nettolading van de liveness kan opstellen en de Azure AI Face-cloudservice aanroept om de nettolading van de liveness te verwerken.

De liveness-oplossing organiseren

Hieronder ziet u de stappen op hoog niveau die betrekking hebben op de indeling van liveness:

Diagram of the liveness workflow in Azure AI Face.

  1. De mobiele toepassing start de livenesscontrole en meldt de app-server.

  2. De app-server maakt een nieuwe livenesssessie met Azure AI Face Service. De service maakt een liveness-sessie en reageert terug met een sessieautorisatietoken.

    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. De app-server biedt het sessieautorisatietoken terug naar de mobiele toepassing.

  4. De mobiele toepassing biedt het sessieautorisatietoken tijdens de initialisatie van de 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. De SDK start vervolgens de camera, leidt de gebruiker naar de juiste positie en bereidt vervolgens de nettolading voor om het service-eindpunt voor livenessdetectie aan te roepen.

  6. De SDK roept de Azure AI Vision Face-service aan om de livenessdetectie uit te voeren. Zodra de service reageert, meldt de SDK de mobiele toepassing dat de livenesscontrole is voltooid.

  7. De mobiele toepassing stuurt de voltooiing van de livenesscontrole door naar de app-server.

  8. De app-server kan nu een query uitvoeren op het livenessdetectieresultaat van de 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
    }
    
    

Livenessdetectie uitvoeren met gezichtsverificatie

Het combineren van gezichtsverificatie met livenessdetectie maakt biometrische verificatie van een bepaalde persoon mogelijk met een extra garantie dat de persoon fysiek aanwezig is in het systeem. Er zijn twee onderdelen voor het integreren van liveness met verificatie:

  1. Selecteer een goede referentieafbeelding.
  2. De indeling van liveness met verificatie instellen.

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

Een goede referentieafbeelding selecteren

Gebruik de volgende tips om ervoor te zorgen dat uw invoerafbeeldingen de meest nauwkeurige herkenningsresultaten geven.

Technische vereisten:

  • De ondersteunde indelingen voor invoerafbeeldingen zijn JPEG, PNG, GIF (het eerste frame), BMP.
  • De grootte van het afbeeldingsbestand mag niet groter zijn dan 6 MB.
  • U kunt het qualityForRecognition kenmerk in de gezichtsdetectiebewerking gebruiken wanneer u toepasselijke detectiemodellen gebruikt als algemene richtlijn of de afbeelding waarschijnlijk voldoende kwaliteit heeft om gezichtsherkenning uit te voeren. Alleen "high" kwaliteitsafbeeldingen worden aanbevolen voor persoonsinschrijving en -kwaliteit op of hoger "medium" voor identificatiescenario's.

Samenstellingsvereisten:

  • Foto is helder en scherp, niet wazig, pixelig, vervormd of beschadigd.
  • Foto wordt niet gewijzigd om gezichts-vlekken of gezichtsuitzicht te verwijderen.
  • Foto moet een ondersteunde RGB-kleur hebben (JPEG, PNG, WEBP, BMP). Aanbevolen gezichtsgrootte is 200 pixels x 200 pixels. Gezichtsgrootten groter dan 200 pixels x 200 pixels leiden niet tot een betere AI-kwaliteit en niet groter dan 6 MB.
  • De gebruiker draagt geen bril, maskers, hoeden, hoofdtelefoons, hoofdbedekkingen of gezichtsbekledingen. Gezicht moet vrij zijn van eventuele obstakels.
  • Gezichtsjuwelen is toegestaan op voorwaarde dat ze je gezicht niet verbergen.
  • Er mag slechts één gezicht zichtbaar zijn op de foto.
  • Het gezicht moet zich in neutrale frontgerichte houding bevinden met beide ogen open, mond gesloten, zonder extreme gezichtsuitdrukkingen of hoofdkantelen.
  • Het gezicht moet vrij zijn van schaduwen of rode ogen. Maak een foto opnieuw als een van deze zich voordoet.
  • De achtergrond moet uniform en duidelijk zijn, vrij van schaduwen.
  • Het gezicht moet worden gecentreerd binnen de afbeelding en ten minste 50% van de afbeelding vullen.

De indeling van liveness met verificatie instellen.

Hieronder ziet u de stappen op hoog niveau die betrekking hebben op de liveness met verificatieindeling:

  1. Geef de verificatiereferentieafbeelding op met een van de volgende twee methoden:

    • De app-server biedt de referentieafbeelding bij het maken van de liveness-sessie.

      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>
      }
      
      
    • De mobiele toepassing biedt de referentieafbeelding bij het initialiseren van de 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. De app-server kan nu een query uitvoeren op het verificatieresultaat naast het liveness-resultaat.

    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
    }
    

Resources opschonen

Als u een Azure AI-servicesabonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd.

Volgende stappen

Zie de Naslaginformatie over de Azure AI Vision SDK voor meer informatie over andere opties in de liveness-API's.

Zie de naslaginformatie over de SESSIE REST API voor meer informatie over de functies die beschikbaar zijn voor het organiseren van de liveness-oplossing.