Share via


Tutoriel : Détecter la spontanéité dans les visages

La détection Face liveness peut être utilisée pour déterminer si un visage dans un flux vidéo d’entrée est réel (en direct) ou faux (usurpation d’identité). Il s’agit d’un élément essentiel d’un système d’authentification biométrique pour empêcher les attaques par usurpation d’identité de la part d’imposteurs qui tentent d’accéder au système en utilisant une photographie, une vidéo, un masque ou tout autre moyen d’usurper l’identité d’une autre personne.

L’objectif de la détection de liveness est de s’assurer que le système interagit avec une personne physiquement présente au moment de l’authentification. De tels systèmes sont devenus de plus en plus importants avec la montée en puissance du financement numérique, du contrôle d’accès à distance et des processus de vérification d’identité en ligne.

La solution de détection liveness protège avec succès contre une divers types d’usurpation allant des imprimés papier, des masques 2d/3d et des présentations d’usurpation sur les téléphones et les ordinateurs portables. La détection de liveness est un domaine actif de la recherche, avec des améliorations continues apportées pour contrer les attaques de usurpation de plus en plus sophistiquées au fil du temps. Les améliorations continues seront déployées sur le client et les composants de service au fil du temps, car la solution globale sera plus robuste pour de nouveaux types d’attaques.

Important

Les kits SDK clients Face pour liveness sont une fonctionnalité contrôlée. Vous devez demander l’accès à la fonctionnalité liveness en remplissant le formulaire d’admission Face Recognition. Lorsque votre abonnement Azure est autorisé à y accéder, vous pouvez télécharger le Kit de développement logiciel (SDK) Face liveness.

Prérequis

  • Votre compte Azure doit disposer d’un rôle Contributeur Cognitive Services attribué pour vous permettre d’accepter les termes de l’IA responsable et de créer une ressource. Pour que ce rôle soit attribué à votre compte, suivez les étapes de la documentation Attribuer des rôles ou contactez votre administrateur.
  • Une fois que vous avez votre abonnement Azure, créez une ressource Visage dans le Portail Azure pour obtenir votre clé et votre point de terminaison. À la fin du déploiement, sélectionnez Accéder à la ressource.
    • Vous avez besoin de la clé et du point de terminaison à partir de la ressource que vous créez pour connecter votre application au service Face. Vous collerez votre clé et votre point de terminaison dans le code plus loin dans ce guide de démarrage rapide.
    • Vous pouvez utiliser le niveau tarifaire Gratuit (F0) pour tester le service, puis passer par la suite à un niveau payant pour la production.
  • Accès au Kit de développement logiciel (SDK) Azure AI Vision Visage Client pour mobile (IOS et Android). Pour commencer, vous devez appliquer les fonctionnalités d’accès limité à la reconnaissance faciale pour accéder au Kit de développement logiciel (SDK). Pour plus d’informations, consultez la page accès limité à la reconnaissance faciale.

Effectuer la détection liveness

L’intégration de la solution liveness implique deux composants différents : une application mobile et un serveur d’applications/orchestrateur.

Intégrer liveness à l’application mobile

Une fois que vous avez accès au Kit de développement logiciel (SDK), suivez les instructions du référentiel GitHub azure-ai-vision-sdk pour intégrer l’interface utilisateur et le code dans votre application mobile native. Le Kit de développement logiciel (SDK) liveness prend en charge les applications mobiles Java/Kotlin pour Android et Swift pour iOS :

Une fois le code ajouté à votre application, le kit de développement logiciel (SDK) gère le démarrage de la caméra, guidant l’utilisateur final pour ajuster sa position, composer la charge utile liveness et appeler le service cloud Azure AI Visage pour traiter la charge utile liveness.

Orchestrer la solution liveness

Les étapes générales impliquées dans l’orchestration liveness sont illustrées ci-dessous :

Diagramme du workflow liveness dans Azure AI Visage.

  1. L’application mobile démarre la vérification dynamique et avertit le serveur d’applications.

  2. Le serveur d’applications crée une session liveness avec Azure AI Face Service. Le service crée une session liveness et répond avec un jeton d’autorisation de session.

    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. Le serveur d’applications fournit le jeton d’autorisation de session à l’application mobile.

  4. L’application mobile fournit le jeton d’autorisation de session pendant l’initialisation du kit de développement logiciel (SDK) Azure AI Vision.

    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. Le kit de développement logiciel (SDK) démarre ensuite la caméra, guide l’utilisateur à se positionner correctement, puis prépare la charge utile pour appeler le point de terminaison du service de détection liveness.

  6. Le Kit de développement logiciel (SDK) appelle le service Azure AI Vision Face pour effectuer la détection liveness. Une fois que le service répond, le kit de développement logiciel (SDK) informe l’application mobile que la vérification de l’activité a été effectuée.

  7. L’application mobile relaye la saisie semi-automatique du contrôle d’intégrité au serveur d’applications.

  8. Le serveur d’applications peut désormais rechercher le résultat de la détection liveness à partir du service 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
    }
    
    

Effectuer une détection liveness avec la vérification des visages

La combinaison de la vérification des visages avec liveness permet la vérification biométrique d’une personne d’intérêt particulière avec une garantie supplémentaire que la personne est physiquement présente dans le système. Il existe deux parties pour intégrer liveness à la vérification :

  1. Sélectionnez une bonne image de référence.
  2. Configurez l’orchestration de la durée de vie avec vérification.

Diagramme du workflow liveness avec vérification d’Azure AI Visage.

Sélectionner une bonne image de référence

Utilisez les conseils suivants pour vous assurer que vos images d’entrée fournissent les résultats de reconnaissance les plus précis.

Exigences techniques :

  • Les formats d’image d’entrée pris en charge sont JPEG, PNG, GIF (la première image) et BMP.
  • La taille du fichier image ne doit pas dépasser 6 Mo.
  • Vous pouvez utiliser l’attribut qualityForRecognition dans l’opération de détection de visages lors de l’utilisation de modèles de détection applicables en tant que directive générale indiquant si l’image est susceptible d’avoir une qualité suffisante pour tenter la reconnaissance faciale. Seules "high"les images de qualité sont recommandées pour l’inscription des personnes et la qualité "medium" est recommandée pour les scénarios d’identification.

Exigences de composition :

  • La photo est claire et nette, pas floue, pixelisée, déformée ou endommagée.
  • La photo n’est pas modifiée pour supprimer les taches de visage ou l’apparence du visage.
  • La photo doit être au format RVB pris en charge (JPEG, PNG, WEBP, BMP). La taille recommandée du visage est de 200 pixels x 200 pixels. Les tailles de visage supérieures à 200 pixels x 200 pixels n’entraînent pas une meilleure qualité de l’IA, mais également pas de taille supérieure à 6 Mo.
  • L’utilisateur ne porte pas de lunettes, masques, chapeaux, casques, couvertures de tête ou couvertures faciales. Le visage doit être libre de toute obstruction.
  • Les bijoux sur le visage sont autorisés à condition qu’ils ne masquent pas votre visage.
  • Un seul visage doit être visible dans la photo.
  • Le visage doit être neutre et tourné vers l'avant, les deux yeux ouverts, la bouche fermée, sans expression faciale extrême ni inclinaison de la tête.
  • Le visage ne doit pas présenter d'ombres ou des yeux rouges. Reprenez la photo si l’une ou l’autre survient.
  • L'arrière-plan doit être uniforme et uni, sans aucune ombre.
  • Le visage doit être centré dans l'image et occuper au moins 50 % de l'image.

Configurez l’orchestration de la durée de vie avec vérification.

Les étapes de haut niveau impliquées dans l'orchestration de la sécurité et de la vérification sont illustrées ci-dessous :

  1. Fournissez l’image de référence de vérification par l’une des deux méthodes suivantes :

    • Le serveur d’applications fournit l’image de référence lors de la création de la session 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>
      }
      
      
    • L’application mobile fournit l’image de référence lors de l’initialisation du kit de développement logiciel (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. Le serveur d’applications peut désormais interroger le résultat de vérification en plus du résultat de la durée de vie.

    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
    }
    

Nettoyer les ressources

Si vous souhaitez nettoyer et supprimer un abonnement Azure AI services, vous pouvez supprimer la ressource ou le groupe de ressources. La suppression du groupe de ressources efface également les autres ressources qui y sont associées.

Étapes suivantes

Consultez la référence du kit de développement logiciel (SDK) Azure AI Vision pour en savoir plus sur d’autres options dans les API liveness.

Consultez la référence de l'API REST Session pour en savoir plus sur les fonctionnalités disponibles pour orchestrer la solution de disponibilité.