Esercitazione: Rilevare la vivacità nei visi

Il rilevamento di Liveness viso può essere usato per determinare se un viso in un flusso video di input è reale (live) o falso (spoofing). Si tratta di un blocco predefinito fondamentale in un sistema di autenticazione biometrica per evitare attacchi di spoofing da impostori che tentano di ottenere l'accesso al sistema usando una fotografia, un video, una maschera o altri mezzi per rappresentare un'altra persona.

L'obiettivo del rilevamento dell'attività è garantire che il sistema interagisca con una persona fisicamente attiva al momento dell'autenticazione. Tali sistemi sono diventati sempre più importanti con l'aumento delle finanze digitali, del controllo degli accessi remoti e dei processi di verifica delle identità online.

La soluzione di rilevamento del liveness difende con successo da vari tipi di spoofing che vanno da stampe cartacee, maschere 2d/3d e presentazioni di spoofing su telefoni e portatili. Il rilevamento del liveness è un'area attiva di ricerca, con continui miglioramenti apportati per contrastare attacchi di spoofing sempre più sofisticati nel tempo. I miglioramenti continui verranno implementati nel client e i componenti del servizio nel corso del tempo, poiché la soluzione complessiva diventa più affidabile per i nuovi tipi di attacchi.

Importante

Gli SDK del client Viso per il liveness sono una funzionalità controllata. È necessario richiedere l'accesso alla funzionalità di attività compilando il modulo di assunzione riconoscimento del viso. Quando alla sottoscrizione di Azure viene concesso l'accesso, è possibile scaricare Face Liveness SDK.

Prerequisiti

  • Per accettare le condizioni di intelligenza artificiale responsabili e creare una risorsa, l'account Azure deve avere un ruolo collaboratore servizi cognitivi assegnato. Per assegnare questo ruolo all'account, seguire la procedura descritta nella documentazione Assegnare ruoli oppure contattare l'amministratore.
  • Dopo aver creato la sottoscrizione di Azure, creare una risorsa Viso nel portale di Azure per ottenere la chiave e l'endpoint. Al termine della distribuzione, fare clic su Vai alla risorsa.
    • È necessaria la chiave e l'endpoint dalla risorsa creata per connettere l'applicazione al servizio Viso. La chiave e l'endpoint verranno incollati nel codice più avanti nella guida introduttiva.
    • È possibile usare il piano tariffario gratuito (F0) per provare il servizio ed eseguire in un secondo momento l'aggiornamento a un livello a pagamento per la produzione.
  • Accesso ad Azure AI Vision Face Client SDK per dispositivi mobili (IOS e Android). Per iniziare, è necessario richiedere le funzionalità di accesso limitato per il riconoscimento del viso per ottenere l'accesso all'SDK. Per altre informazioni, vedere la pagina Viso con accesso limitato.

Eseguire il rilevamento del liveness

L'integrazione della soluzione liveness prevede due componenti diversi: un'applicazione per dispositivi mobili e un server app/agente di orchestrazione.

Integrare liveness nell'applicazione per dispositivi mobili

Dopo aver ottenuto l'accesso all'SDK, seguire le istruzioni nel repository GitHub azure-ai-vision-sdk per integrare l'interfaccia utente e il codice nell'applicazione per dispositivi mobili nativa. Liveness SDK supporta sia Java/Kotlin per Android che Swift per applicazioni per dispositivi mobili iOS:

  • Per Swift iOS, seguire le istruzioni nell'esempio iOS
  • Per Android Kotlin/Java, seguire le istruzioni nell'esempio Android

Dopo aver aggiunto il codice nell'applicazione, l'SDK gestisce l'avvio della fotocamera, guidando l'utente finale a regolare la posizione, componendo il payload di attività e chiamando il servizio cloud Viso di Azure AI Per elaborare il payload di attività.

Orchestrare la soluzione liveness

Di seguito sono illustrati i passaggi generali coinvolti nell'orchestrazione del liveness:

Diagram of the liveness workflow in Azure AI Face.

  1. L'applicazione per dispositivi mobili avvia il controllo dell'attività e invia una notifica al server dell'app.

  2. Il server app crea una nuova sessione di attività con il servizio Viso di Intelligenza artificiale di Azure. Il servizio crea una sessione di liveness e risponde con un token di autorizzazione-sessione.

    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. Il server app fornisce di nuovo il token di autorizzazione sessione all'applicazione per dispositivi mobili.

  4. L'applicazione per dispositivi mobili fornisce il token di autorizzazione di sessione durante l'inizializzazione di 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. L'SDK avvia quindi la fotocamera, guida l'utente a posizionarsi correttamente e quindi prepara il payload per chiamare l'endpoint del servizio di rilevamento attività.

  6. L'SDK chiama il servizio Viso di Visione artificiale di Azure per eseguire il rilevamento dell'attività. Una volta che il servizio risponde, l'SDK invia una notifica all'applicazione per dispositivi mobili che il controllo dell'attività è stato completato.

  7. L'applicazione per dispositivi mobili inoltra il completamento del controllo dell'attività al server app.

  8. Il server app può ora eseguire una query per il risultato del rilevamento dell'attività dal servizio Viso di Visione artificiale di Azure.

    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
    }
    
    

Eseguire il rilevamento del liveness con la verifica del viso

La combinazione della verifica del viso con il rilevamento del liveness consente la verifica biometrica di una particolare persona di interesse con una maggiore garanzia che la persona sia fisicamente presente nel sistema. Esistono due parti per l'integrazione dell'attività con la verifica:

  1. Selezionare un'immagine di riferimento valida.
  2. Configurare l'orchestrazione della vivacità con la verifica.

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

Selezionare un'immagine di riferimento valida

Usare i suggerimenti seguenti per assicurarsi che le immagini di input restituiscano i risultati di riconoscimento più accurati.

Requisiti tecnici:

  • I formati di immagine di input supportati sono JPEG, PNG, GIF (il primo fotogramma), BMP.
  • Le dimensioni del file di immagine non devono superare i 6 MB.
  • È possibile utilizzare l'attributo nell'operazione qualityForRecognitiondi rilevamento dei volti quando si usano i modelli di rilevamento applicabili come linea guida generale sul fatto che l'immagine sia probabilmente di qualità sufficiente per tentare il riconoscimento dei volti. Per gli scenari di identificazione è consigliabile usare solo "high" immagini di qualità consigliate per la registrazione e la qualità delle persone."medium"

Requisiti di composizione:

  • La foto è chiara e nitida, non sfocata, pixelata, distorta o danneggiata.
  • La foto non viene modificata per rimuovere le macchie del viso o l'aspetto del viso.
  • La foto deve essere in un formato di colore RGB supportato (JPEG, PNG, WEBP, BMP). La dimensione consigliata del viso è di 200 pixel x 200 pixel. Le dimensioni del viso superiori a 200 pixel x 200 pixel non comportano una migliore qualità di intelligenza artificiale e non superano i 6 MB di dimensioni.
  • L'utente non indossa occhiali, maschere, cappelli, cuffie, copricapi o copri viso. Il viso deve essere privo di qualsiasi ostruzione.
  • Gioielli facciali è consentito a condizione che non nascondono il viso.
  • Nella foto dovrebbe essere visibile un solo viso.
  • Il viso deve essere in posizione anteriore neutra con entrambi gli occhi aperti, bocca chiusa, senza espressioni facciali estreme o inclinazione della testa.
  • Il viso deve essere privo di ombre o occhi rossi. Riprendere la foto se si verifica uno di questi.
  • Lo sfondo deve essere uniforme e semplice, privo di ombre.
  • Il viso deve essere centrato all'interno dell'immagine e riempire almeno il 50% dell'immagine.

Configurare l'orchestrazione della vivacità con la verifica.

Di seguito sono illustrati i passaggi generali coinvolti nell'orchestrazione della verifica:

  1. Fornire l'immagine di riferimento di verifica in uno dei due metodi seguenti:

    • Il server app fornisce l'immagine di riferimento durante la creazione della sessione di attività.

      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'applicazione per dispositivi mobili fornisce l'immagine di riferimento durante l'inizializzazione dell'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. Il server app può ora eseguire una query per il risultato della verifica oltre al risultato del liveness.

    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
    }
    

Pulire le risorse

Se si vuole pulire e rimuovere una sottoscrizione dei servizi di intelligenza artificiale di Azure, è possibile eliminare la risorsa o il gruppo di risorse. L'eliminazione del gruppo di risorse comporta anche l'eliminazione di tutte le altre risorse associate.

Passaggi successivi

Vedere le informazioni di riferimento su Azure AI Vision SDK per altre opzioni nelle API di attività.

Per altre informazioni sulle funzionalità disponibili per orchestrare la soluzione di attività, vedere le informazioni di riferimento sull'API REST di sessione.