Tutorial: Erkennen von Face Liveness

Mithilfe der Erkennung von Face Liveness lässt sich bestimmen, ob ein Gesicht in einem Eingabevideostream echt (live) oder eine Fälschung (Spoof) ist. Dies ist ein wichtiger Baustein in einem biometrischen Authentifizierungssystem, um Spoofingangriffe von Betrüger*innen zu verhindern, die versuchen, mithilfe eines Fotos, eines Videos, einer Maske oder einer anderen Imitationsmethode Zugriff auf das System zu erlangen.

Die Liveness-Erkennung soll sicherstellen, dass das System zum Zeitpunkt der Authentifizierung mit einer physisch anwesenden, echten Person interagiert. Solche Systeme werden aufgrund der zunehmenden Nutzung von digitalen Finanzen, Remotezugriffssteuerung und Onlineidentitätsüberprüfung immer wichtiger.

Die Liveness-Erkennungslösung schützt erfolgreich vor einer Vielzahl von Spooftypen – von Papierausdrucken über 2D/3D-Masken bis hin zu Spoofpräsentationen auf Smartphones und Laptops. Die Liveness-Erkennung ist ein aktiver Forschungsbereich, und es werden kontinuierlich Verbesserungen vorgenommen, um immer ausgefeilteren Spoofingangriffen entgegenzuwirken. Für den Client und die Dienstkomponenten werden im Laufe der Zeit immer wieder Verbesserungen bereitgestellt, da die gesamte Lösung immer besser darin wird, neue Arten von Angriffen abzuwehren.

Wichtig

Die Face-Client-SDKs für Liveness sind ein eingeschränktes Feature. Sie müssen den Zugriff auf das Liveness-Feature anfordern, indem Sie das Aufnahmeformular für die Gesichtserkennung ausfüllen. Wenn Ihrem Azure-Abonnement Zugriff gewährt wird, können Sie das Face Liveness-SDK herunterladen.

Voraussetzungen

  • Damit Sie den entsprechenden KI-Bedingungen zustimmen und eine Ressource erstellen können, muss Ihrem Azure-Konto die Rolle Cognitive Services-Mitwirkender zugewiesen sein. Um diese Rolle Ihrem Konto zuzuweisen, führen Sie die Schritte in der Dokumentation Zuweisen von Rollen aus, oder wenden Sie sich an Ihren Administrator.
  • Wenn Sie über Ihr Azure-Abonnement verfügen, sollten Sie im Azure-Portal eine Gesichtserkennungsressource erstellen, um Ihren Schlüssel und Endpunkt abzurufen. Wählen Sie nach Abschluss der Bereitstellung Zu Ressource wechseln aus.
    • Sie benötigen den Schlüssel und den Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit dem Gesichtserkennungsdienst verbinden zu können. Der Schlüssel und der Endpunkt werden später in der Schnellstartanleitung in den Code eingefügt.
    • Sie können den kostenlosen Tarif (F0) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden.
  • Zugriff auf das Azure KI Vision Client-SDK für Gesichtserkennung für Mobilgeräte (iOS und Android). Um Zugriff auf das SDK zu erhalten, müssen Sie zunächst die Features für eingeschränkten Zugriff auf die Gesichtserkennung beantragen. Weitere Informationen finden Sie auf der Seite zum eingeschränkten Zugriff auf die Gesichtserkennung.

Durchführen der Liveness-Erkennung

Die Integration der Liveness-Lösung umfasst zwei verschiedene Komponenten: eine mobile Anwendung und einen App-Server/Orchestrator.

Integrieren von Liveness in die mobile Anwendung

Wenn Sie Zugriff auf das SDK haben, können Sie gemäß der Anleitung im GitHub-Repository azure-ai-vision-sdk vorgehen, um die Benutzeroberfläche und den Code in Ihre native mobile Anwendung zu integrieren. Das Liveness SDK unterstützt sowohl Java/Kotlin für Android als auch Swift für mobile iOS-Anwendungen:

Nachdem Sie den Code zu Ihrer Anwendung hinzugefügt haben, kümmert sich das SDK um den Start der Kamera, leitet Endbenutzer an, um sie richtig zu positionieren, erstellt die Liveness-Nutzdaten und ruft den Azure KI-Clouddienst für die Gesichtserkennung auf, um die Liveness-Nutzdaten zu verarbeiten.

Orchestrieren der Liveness-Lösung

Die Liveness-Orchestrierung umfasst die im Folgenden dargestellten allgemeinen Schritte:

Diagram of the liveness workflow in Azure AI Face.

  1. Die mobile Anwendung startet die Liveness-Überprüfung und benachrichtigt den App-Server.

  2. Der App-Server erstellt eine neue Liveness-Sitzung mit dem Azure KI-Gesichtserkennungsdienst. Der Dienst erstellt eine Liveness-Sitzung und antwortet mit einem Sitzungsautorisierungstoken.

    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. Der App-Server gibt das Sitzungsautorisierungstoken an die mobile Anwendung zurück.

  4. Die mobile Anwendung stellt das Sitzungsautorisierungstoken während der Initialisierung des Azure KI Vision SDK bereit.

    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. Das SDK startet daraufhin die Kamera, bringt den Benutzer bzw. die Benutzerin in die richtige Position und bereitet anschließend die Nutzdaten vor, um den Endpunkt für die Liveness-Erkennung aufzurufen.

  6. Das SDK ruft den Gesichtserkennungsdienst von Azure KI Vision auf, um die Liveness-Erkennung durchzuführen. Wenn der Dienst antwortet, benachrichtigt das SDK die mobile Anwendung, dass die Liveness-Überprüfung abgeschlossen ist.

  7. Die mobile Anwendung informiert den App-Server über den Abschluss der Liveness-Überprüfung.

  8. Der App-Server kann nun das Ergebnis der Liveness-Erkennung aus dem Gesichtserkennungsdienst von Azure KI Vision abfragen.

    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
    }
    
    

Durchführen der Liveness-Erkennung mit Gesichtsüberprüfung

Die Kombination aus Gesichtsüberprüfung und Liveness-Erkennung ermöglicht die biometrische Überprüfung einer bestimmten Person von Interesse mit der zusätzlichen Garantie, dass die Person physisch im System vorhanden ist. Die Integration von Liveness in die Überprüfung umfasst zwei Aspekte:

  1. Die Wahl eines guten Referenzbilds.
  2. Die Einrichtung der Orchestrierung von Liveness mit Überprüfung.

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

Auswählen eines guten Referenzbilds

Anhand der folgenden Tipps können Sie sicherstellen, dass Ihre Eingabebilder möglichst genaue Erkennungsergebnisse liefern.

Technische Anforderungen:

  • Als Eingabebildformate werden JPEG, PNG, GIF (der erste Frame), BMP unterstützt.
  • Die Bilddateien dürfen maximal 6 MB groß sein.
  • Sie können das Attribut qualityForRecognition im Gesichtserkennungsvorgang verwenden, wenn Sie geeignete Erkennungsmodelle als allgemeine Richtlinie verwenden, um zu prüfen, ob das Bild wahrscheinlich eine ausreichende Qualität aufweist, um die Gesichtserkennung zu versuchen. Für die Registrierung von Personen werden nur Bilder der Qualitätsstufe "high" empfohlen, und die Qualität "medium" oder höher wird bei Identifikationen empfohlen.

Bildanforderungen:

  • Das Foto ist klar und scharf, nicht verschwommen, pixelig, verzerrt oder beschädigt.
  • Das Foto wurde nicht verändert, um Schönheitsfehler zu entfernen oder das Aussehen des Gesichts zu verändern.
  • Das Foto muss in einem Format mit RGB-Farbunterstützung (JPEG, PNG, WEBP, BMP) vorliegen. Das Gesicht sollte eine Größe von 200 × 200 Pixel haben. Gesichter mit einer Größe von mehr als 200 × 200 Pixel führen nicht zu einer besseren KI-Qualität. Außerdem darf das Bild maximal 6 MB groß sein.
  • Der Benutzer bzw. die Benutzerin trägt weder eine Brille noch eine Maske, einen Hut, Kopfhörer oder eine Kopf- oder Gesichtsbedeckung. Das Gesicht darf nicht durch etwas verdeckt sein.
  • Gesichtsschmuck ist erlaubt, solange das Gesicht dadurch nicht verborgen wird.
  • Auf dem Foto darf nur ein einzelnes Gesicht sichtbar sein.
  • Das Gesicht muss sich in einer neutralen, nach vorn gerichteten Pose ohne extremen Gesichtsausdruck oder extreme Kopfneigung befinden. Beide Augen müssen geöffnet und der Mund muss geschlossen sein.
  • Das Gesicht darf keine Schatten oder roten Augen aufweisen. Nehmen Sie das Foto erneut auf, wenn einer dieser Punkte zutrifft.
  • Der Hintergrund muss einheitlich, schlicht und frei von Schatten sein.
  • Das Gesicht muss sich in der Bildmitte befinden und mindestens 50 Prozent des Bilds ausfüllen.

Die Einrichtung der Orchestrierung von Liveness mit Überprüfung.

Die Orchestrierung von Liveness mit Überprüfung umfasst die im Folgenden dargestellten allgemeinen Schritte:

  1. Stellen Sie das Referenzbild für die Überprüfung mithilfe einer der beiden folgenden Methoden bereit:

    • Der App-Server stellt das Referenzbild beim Erstellen der Liveness-Sitzung bereit.

      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>
      }
      
      
    • Die mobile Anwendung stellt das Referenzbild beim Initialisieren des SDK bereit.

      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. Der App-Server kann nun neben dem Liveness-Ergebnis auch das Überprüfungsergebnis abfragen.

    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
    }
    

Bereinigen von Ressourcen

Wenn Sie ein Azure KI Services-Abonnement bereinigen und entfernen möchten, können Sie die Ressource oder die Ressourcengruppe löschen. Wenn Sie die Ressourcengruppe löschen, werden auch alle anderen Ressourcen gelöscht, die ihr zugeordnet sind.

Nächste Schritte

Informationen zu anderen Optionen in den Liveness-APIs finden Sie in der Referenz zum Azure KI Vision SDK.

Weitere Informationen zu den verfügbaren Features zur Orchestrierung der Liveness-Lösung finden Sie in der Session REST-API-Referenz.