Condividi tramite


Esercitazione: Rilevare l’attività nei visi

Il rilevamento dello stato attivo (attività) del viso può essere usato per determinare se un viso in un flusso video di input sia reale (live) o falso (spoofing). È un importante blocco predefinito in un sistema di autenticazione biometrica per impedire agli impostori di accedere al sistema usando una fotografia, un video, una maschera o altri mezzi per prendere il posto di 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 dei processi di finanza digitale, di controllo degli accessi remoti e di verifica dell’identità online.

La soluzione di rilevamento dell’attività del viso di Azure per intelligenza artificiale protegge 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 dell’attività è un'area attiva di ricerca, con continui miglioramenti apportati per contrastare attacchi di spoofing sempre più sofisticati nel corso del tempo. Nel corso del tempo verranno implementati miglioramenti continui nel client e nei componenti del servizio, man mano che la soluzione complessiva diventa più affidabile per i nuovi tipi di attacchi.

Importante

Gli SDK del client Viso per lo stato attivo (attività viso) sono una funzionalità gestita. È necessario richiedere l'accesso alla funzionalità di attività compilando il modulo di acquisizione del riconoscimento del volto. Quando alla sottoscrizione di Azure viene concesso l'accesso, è possibile scaricare l’SDK di attività del viso.

Introduzione

L'integrazione della soluzione di attività del viso include due componenti distinti: un'applicazione front-end per dispositivi mobili/Web e un server app/agente di orchestrazione.

Diagramma del flusso di lavoro dell’attività in Viso di Azure per intelligenza artificiale.

  • Applicazione front-end: applicazione front-end riceve l'autorizzazione dal server app per avviare il rilevamento dell'attività. L'obiettivo principale è quello di attivare la fotocamera e guidare gli utenti finali in modo accurato attraverso il processo di rilevamento dell’attività.
  • Server app: il server app funge da server back-end per creare sessioni di rilevamento attività e ottenere un token di autorizzazione dal servizio Viso per una determinata sessione. Questo token autorizza l'applicazione front-end a eseguire il rilevamento dell'attività. Gli obiettivi del server app sono gestire le sessioni, concedere l'autorizzazione per l'applicazione front-end e visualizzare i risultati del processo di rilevamento dell'attività.

Inoltre, combiniamo la verifica del viso con il rilevamento dell’attività per verificare se la persona è la persona specifica designata. Nella tabella seguente vengono descritti i dettagli delle funzionalità di rilevamento dell’attività:

Funzionalità Descrizione
Rilevamento dello stato attivo Determinare se un input è reale o falso e solo il server dell'app ha l'autorità per avviare il controllo dell’attività ed eseguire una query sul risultato.
Rilevamento dello stato attivo con verifica del viso Determinare se un input è reale o falso e verificare l'identità della persona in base a un'immagine di riferimento fornita. Il server app o l'applicazione front-end possono fornire un'immagine di riferimento. Solo il server app ha l'autorità per inizializzare il controllo di attività ed eseguire una query sul risultato.

Questa esercitazione illustra come gestire un'applicazione front-end e un server app per eseguire il rilevamento dell’attività viso eil rilevamento dell'attività con verifica del viso in SDK con varie lingue.

Prerequisiti

  • Sottoscrizione di Azure: creare un account gratuito
  • L'account Azure deve avere un ruolo di Collaboratore servizi cognitivi assegnato per poter accettare le condizioni di intelligenza artificiale responsabili e creare una risorsa. 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.
    • La chiave e l'endpoint della risorsa creata saranno necessari per connettere l'applicazione al servizio Viso.
    • È 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 all’SDK client Viso Visione di Azure AI per dispositivi mobili (IOS e Android) e web. Per iniziare, è necessario richiedere le funzionalità di accesso limitato riconoscimento volto per ottenere l'accesso all'SDK. Per altre informazioni, vedere la pagina Accesso limitato alla funzione Viso.

Configurare applicazioni front-end e server app per eseguire il rilevamento dell'attività

Sono disponibili SDK in lingue diverse per applicazioni front-end e server app. Vedere le istruzioni seguenti per configurare le applicazioni front-end e i server app.

Scaricare l'SDK per l'applicazione front-end

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. L’SDK attività supporta Java/Kotlin per le applicazioni per dispositivi mobili Android, Swift per applicazioni per dispositivi mobili iOS e JavaScript per applicazioni Web:

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

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

Scaricare la libreria client Viso di Azure per intelligenza artificiale per il server app

Il server dell'app/l'agente di orchestrazione è responsabile del controllo del ciclo di vita di una sessione di attività. Il server app deve creare una sessione prima di eseguire il rilevamento dell'attività e quindi può eseguire query sul risultato ed eliminare la sessione al termine del controllo dell'attività. Offriamo una libreria in varie lingue per implementare facilmente il server app. Per installare il pacchetto, seguire questa procedura:

Creare variabili di ambiente

In questo esempio, vengono scritte le credenziali nelle variabili di ambiente del computer locale che esegue l'applicazione.

Vai al portale di Azure. Se la risorsa creata nella sezione Prerequisiti è stata distribuita correttamente, selezionare Vai alla risorsa in Passaggi successivi. La chiave e l'endpoint saranno disponibili nella pagina Chiavi ed endpoint in Gestione risorse. La chiave della risorsa non corrisponde all'ID sottoscrizione di Azure.

Suggerimento

Non includere la chiave direttamente nel codice e non renderla mai pubblica. Vedere l'articolo sulla sicurezza dei Servizi di Azure AI per altre opzioni di autenticazione, ad esempio Azure Key Vault.

Per impostare la variabile di ambiente per la chiave e l'endpoint, aprire una finestra della console e seguire le istruzioni del sistema operativo e dell'ambiente di sviluppo.

  1. Per impostare la VISION_KEYvariabile di ambiente, sostituire your-key con una delle chiavi della risorsa.
  2. Per impostare la VISION_ENDPOINTvariabile di ambiente, sostituire your-endpoint con l'endpoint della risorsa.
setx VISION_KEY your-key
setx VISION_ENDPOINT your-endpoint

Dopo aver aggiunto le variabili di ambiente, potrebbe essere necessario riavviare gli eventuali programmi in esecuzione che leggeranno le variabili di ambiente, inclusa la finestra della console.

Eseguire il rilevamento dell’attività

Di seguito sono illustrati i passaggi generali coinvolti nell'orchestrazione dell’attività:

Diagramma del flusso di lavoro dell’attività in Viso di Azure per intelligenza artificiale.

  1. L'applicazione front-end avvia il controllo dell'attività e invia una notifica al server app.

  2. Il server app crea una nuova sessione di attività con il servizio Viso di Azure per intelligenza artificiale. Il servizio crea una sessione relativa all’attività e risponde con un token di autorizzazione sessione. Per altre informazioni su ogni parametro di richiesta coinvolto nella creazione di una sessione relativa al rilevamento attività, vedere Liveness Create Session Operation (Creazione sessione attività).

    var endpoint = new Uri(System.Environment.GetEnvironmentVariable("VISION_ENDPOINT"));
    var credential = new AzureKeyCredential(System.Environment.GetEnvironmentVariable("VISION_KEY"));
    
    var sessionClient = new FaceSessionClient(endpoint, credential);
    
    var createContent = new CreateLivenessSessionContent(LivenessOperationMode.Passive)
    {
        DeviceCorrelationId = "723d6d03-ef33-40a8-9682-23a1feb7bccd",
        SendResultsToClient = false,
    };
    
    var createResponse = await sessionClient.CreateLivenessSessionAsync(createContent);
    var sessionId = createResponse.Value.SessionId;
    Console.WriteLine($"Session created.");
    Console.WriteLine($"Session id: {sessionId}");
    Console.WriteLine($"Auth token: {createResponse.Value.AuthToken}");
    

    Ecco un esempio del corpo della risposta:

    {
        "sessionId": "a6e7193e-b638-42e9-903f-eaf60d2b40a5",
        "authToken": "<session-authorization-token>"
    }
    
  3. Il server app fornisce di nuovo il token di autorizzazione sessione all'applicazione front-end.

  4. L'applicazione front-end fornisce il token di autorizzazione sessione durante l'inizializzazione dell’SDK Visione di Azure AI.

    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))
    })
    
  5. L'SDK avvia quindi la fotocamera, guida l'utente a posizionarsi correttamente e quindi prepara il payload per chiamare l'endpoint servizio di rilevamento attività.

  6. L'SDK chiama il servizio Viso di Visione di Azure AI per eseguire il rilevamento dell'attività. Una volta che il servizio risponde, l'SDK invia una notifica all'applicazione front-end indicante che il controllo dell’attività è stato completato.

  7. L'applicazione front-end 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à per quanto riguarda il servizio Viso di Visione di Azure AI.

    var getResultResponse = await sessionClient.GetLivenessSessionResultAsync(sessionId);
    
    var sessionResult = getResultResponse.Value;
    Console.WriteLine($"Session id: {sessionResult.Id}");
    Console.WriteLine($"Session status: {sessionResult.Status}");
    Console.WriteLine($"Liveness detection request id: {sessionResult.Result?.RequestId}");
    Console.WriteLine($"Liveness detection received datetime: {sessionResult.Result?.ReceivedDateTime}");
    Console.WriteLine($"Liveness detection decision: {sessionResult.Result?.Response.Body.LivenessDecision}");
    Console.WriteLine($"Session created datetime: {sessionResult.CreatedDateTime}");
    Console.WriteLine($"Auth token TTL (seconds): {sessionResult.AuthTokenTimeToLiveInSeconds}");
    Console.WriteLine($"Session expired: {sessionResult.SessionExpired}");
    Console.WriteLine($"Device correlation id: {sessionResult.DeviceCorrelationId}");
    

    Ecco un esempio del corpo della risposta:

    {
        "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": "content.bin",
                        "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
    }
    
  9. Il server app può eliminare la sessione se non si eseguono più query sul risultato.

    await sessionClient.DeleteLivenessSessionAsync(sessionId);
    Console.WriteLine($"The session {sessionId} is deleted.");
    

Eseguire il rilevamento dell’attività mediante la verifica del viso

La combinazione della verifica del viso con il rilevamento dell’attività 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 dell’attività con la verifica.

Diagramma del flusso di lavoro relativo all’attività con verifica del viso di Viso di Azure per intelligenza artificiale.

Selezionare un'immagine di riferimento valida

Avvalersi dei seguenti suggerimenti per assicurarsi che le immagini di input possano fornire i risultati di riconoscimento più accurati:

Requisiti tecnici

  • I formati di immagine di input supportati sono JPEG, PNG, GIF (il primo frame), BMP.
  • La dimensione del file di immagine selezionato deve essere minore di 6 MB.
  • È possibile utilizzare l'attributo qualityForRecognition nell'operazione di rilevamento viso se si usano modelli di rilevamento applicabili come linea guida generale, per stabilire se è probabile che l'immagine abbia una qualità sufficiente per tentare il riconoscimento volto. Per gli scenari di identificazione è consigliabile usare solo immagini di qualità "high", mentre per gli scenari di identificazione è consigliabile una qualità uguale o superiore a "medium".

Requisiti di composizione

  • La foto è chiara e nitida, non sfocata, pixelata, distorta o danneggiata.
  • La foto non viene modificata per rimuovere le imperfezioni del viso o l'aspetto del viso.
  • La foto deve essere in un formato 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à in termini di intelligenza artificiale e non devono superare i 6 MB in termini di dimensioni.
  • L'utente non deve indossare occhiali, maschere, cappelli, cuffie, copricapi o coperture viso. Il viso deve essere privo di qualsiasi ostruzione.
  • I gioielli facciali sono consentiti a condizione che non nascondono il viso.
  • Nella foto deve essere visibile un solo viso.
  • Il viso deve essere in posizione frontale neutra con entrambi gli occhi aperti, bocca chiusa, senza espressioni facciali estreme o inclinazione della testa.
  • Il viso deve essere privo di ombre od occhi rossi. Rifare la foto se si verifica una di queste circostanze.
  • 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 dell’attività con la verifica.

Di seguito sono illustrati i passaggi generali coinvolti nell'orchestrazione della verifica dell’attività del viso:

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

    • Il server app fornisce l'immagine di riferimento durante la creazione della sessione relativa al rilevamento dell’attività. Per altre informazioni su ogni parametro di richiesta coinvolto nella creazione di una sessione di rilevamento dell’attività con verifica, vedere Liveness With Verify Create Session Operation (Creazione sessione di verifica attività).

      var endpoint = new Uri(System.Environment.GetEnvironmentVariable("VISION_ENDPOINT"));
      var credential = new AzureKeyCredential(System.Environment.GetEnvironmentVariable("VISION_KEY"));
      
      var sessionClient = new FaceSessionClient(endpoint, credential);
      
      var createContent = new CreateLivenessSessionContent(LivenessOperationMode.Passive)
      {
          DeviceCorrelationId = "723d6d03-ef33-40a8-9682-23a1feb7bccd"
      };
      using var fileStream = new FileStream("test.png", FileMode.Open, FileAccess.Read);
      
      var createResponse = await sessionClient.CreateLivenessWithVerifySessionAsync(createContent, fileStream);
      
      var sessionId = createResponse.Value.SessionId;
      Console.WriteLine("Session created.");
      Console.WriteLine($"Session id: {sessionId}");
      Console.WriteLine($"Auth token: {createResponse.Value.AuthToken}");
      Console.WriteLine("The reference image:");
      Console.WriteLine($"  Face rectangle: {createResponse.Value.VerifyImage.FaceRectangle.Top}, {createResponse.Value.VerifyImage.FaceRectangle.Left}, {createResponse.Value.VerifyImage.FaceRectangle.Width}, {createResponse.Value.VerifyImage.FaceRectangle.Height}");
      Console.WriteLine($"  The quality for recognition: {createResponse.Value.VerifyImage.QualityForRecognition}");
      

      Ecco un esempio del corpo della risposta:

      {
          "verifyImage": {
              "faceRectangle": {
                  "top": 506,
                  "left": 51,
                  "width": 680,
                  "height": 475
              },
              "qualityForRecognition": "high"
          },
          "sessionId": "3847ffd3-4657-4e6c-870c-8e20de52f567",
          "authToken": "<session-authorization-token>"
      }
      
    • L'applicazione front-end fornisce l'immagine di riferimento durante l'inizializzazione dell'SDK. Questo scenario non è supportato nella soluzione Web.

      val singleFaceImageSource = VisionSource.fromFile("/path/to/image.jpg")
      mFaceAnalysisOptions?.setRecognitionMode(RecognitionMode.valueOfVerifyingMatchToFaceInSingleFaceImage(singleFaceImageSource))
      
  2. Il server app può ora eseguire una query per il risultato della verifica oltre al risultato del rilevamento dell’attività.

    var getResultResponse = await sessionClient.GetLivenessWithVerifySessionResultAsync(sessionId);
    var sessionResult = getResultResponse.Value;
    Console.WriteLine($"Session id: {sessionResult.Id}");
    Console.WriteLine($"Session status: {sessionResult.Status}");
    Console.WriteLine($"Liveness detection request id: {sessionResult.Result?.RequestId}");
    Console.WriteLine($"Liveness detection received datetime: {sessionResult.Result?.ReceivedDateTime}");
    Console.WriteLine($"Liveness detection decision: {sessionResult.Result?.Response.Body.LivenessDecision}");
    Console.WriteLine($"Verification result: {sessionResult.Result?.Response.Body.VerifyResult.IsIdentical}");
    Console.WriteLine($"Verification confidence: {sessionResult.Result?.Response.Body.VerifyResult.MatchConfidence}");
    Console.WriteLine($"Session created datetime: {sessionResult.CreatedDateTime}");
    Console.WriteLine($"Auth token TTL (seconds): {sessionResult.AuthTokenTimeToLiveInSeconds}");
    Console.WriteLine($"Session expired: {sessionResult.SessionExpired}");
    Console.WriteLine($"Device correlation id: {sessionResult.DeviceCorrelationId}");
    

    Ecco un esempio del corpo della risposta:

    {
        "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": "content.bin",
                        "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
    }
    
  3. Il server app può eliminare la sessione se non si eseguono più query sul risultato.

    await sessionClient.DeleteLivenessWithVerifySessionAsync(sessionId);
    Console.WriteLine($"The session {sessionId} is deleted.");
    

Pulire le risorse

Se si vuole pulire e rimuovere una sottoscrizione a Servizi di Azure AI, è 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

Per altre informazioni sulle altre opzioni nelle API di rilevamento dell’attività, vedere le informazioni di riferimento SDK di Visione di Azure AI.

Per altre informazioni sulle funzionalità disponibili per orchestrare la soluzione relativa all’attività, vedere le informazioni di riferimento relative all’API REST della sessione.