Sdílet prostřednictvím


Kurz: Detekce živého života v tvářích

Detekce živé tváře se používá k určení, jestli je tvář ve vstupním video streamu skutečná (živá) nebo falešná (falšovaná). Je to důležitý stavební blok v biometrickém ověřovacím systému, který brání podvodníkům v získání přístupu k systému pomocí fotografie, videa, masky nebo jiných prostředků k zosobnění jiné osoby.

Cílem detekce aktivity je zajistit, aby systém pracoval s fyzicky přítomnou živou osobou v době ověřování. Tyto systémy jsou stále důležitější díky nárůstu digitálních financí, řízení vzdáleného přístupu a procesů online ověřování identit.

Řešení detekce živých tváří v Azure AI úspěšně chrání před různými typy falšování identity v rozsahu od výtisků papíru, 2D/3D masek a falšování identity prezentací na telefonech a přenosných počítačích. Detekce živé aktivity je aktivní oblastí výzkumu, přičemž neustále se vylepšují stále sofistikovanější útoky na falšování identity. Pro klienta se postupně zavádí kontinuální vylepšení a komponenty služby v průběhu času, protože celkové řešení je pro nové typy útoků robustnější.

Důležité

Klientské sady SDK pro rozpoznávání tváře jsou vrátnou funkcí. Musíte požádat o přístup k funkci liveness vyplněním formuláře pro příjem rozpoznávání tváře. Po udělení přístupu k předplatnému Azure si můžete stáhnout sadu SDK pro rozpoznávání tváře.

Úvod

Integrace řešení živosti zahrnuje dvě samostatné komponenty: front-endovou mobilní/webovou aplikaci a aplikační server/orchestrátor.

Diagram pracovního postupu aktivity ve službě Azure AI Face

  • Front-endová aplikace: Front-endová aplikace přijímá autorizaci ze serveru aplikace, aby iniciovala detekci živé aktivity. Jejím hlavním cílem je aktivovat kameru a vést koncové uživatele přesně procesem detekce živé aktivity.
  • Aplikační server: Aplikační server slouží jako back-endový server k vytvoření relací detekce živé aktivity a získání autorizačního tokenu ze služby Rozpoznávání tváře pro konkrétní relaci. Tento token autorizuje front-endovou aplikaci k detekci aktivity. Cílem aplikačního serveru je spravovat relace, udělit autorizaci pro front-endovou aplikaci a zobrazit výsledky procesu detekce aktivity.

Kromě toho zkombinujeme ověření tváře s detekcí živé aktivity, abychom ověřili, jestli je daná osoba konkrétní osobou, kterou jste určili. Následující tabulka popisuje podrobnosti o funkcích detekce živě:

Funkce Popis
Detekce živé aktivity Určení skutečného nebo falešného vstupu a pouze aplikační server má autoritu zahájit kontrolu živé aktivity a dotazovat se na výsledek.
Detekce živého života s ověřením tváře Určení skutečného nebo falešného vstupu a ověření identity osoby na základě zadaného referenčního obrázku. Aplikační server nebo front-endová aplikace můžou poskytnout referenční image. Pouze aplikační server má oprávnění k inicializace kontroly aktivity a dotazování výsledku.

V tomto kurzu se dozvíte, jak provozovat front-endovou aplikaci a aplikační server pro detekci živé aktivity a detekci živé aktivity s ověřováním tváří napříč různými sadami SDK jazyka.

Požadavky

  • Předplatné Azure: Můžete si ho vytvořit zdarma.
  • Váš účet Azure musí mít přiřazenou roli Přispěvatel služeb Cognitive Services, abyste mohli souhlasit s zodpovědnými podmínkami AI a vytvořit prostředek. Pokud chcete tuto roli přiřadit k vašemu účtu, postupujte podle pokynů v dokumentaci k přiřazování rolí nebo se obraťte na správce.
  • Jakmile budete mít předplatné Azure, vytvořte prostředek rozpoznávání tváře na webu Azure Portal, abyste získali klíč a koncový bod. Po nasazení vyberte Přejít k prostředku.
    • K připojení aplikace ke službě Rozpoznávání tváře potřebujete klíč a koncový bod z prostředku, který vytvoříte.
    • K vyzkoušení služby můžete použít cenovou úroveňF0 Free a později upgradovat na placenou úroveň pro produkční prostředí.
  • Přístup k sadě Azure AI Vision Face Client SDK pro mobilní zařízení (iOS a Android) a web Abyste mohli začít, musíte požádat o funkce omezeného přístupu k rozpoznávání tváře, abyste získali přístup k sadě SDK. Další informace najdete na stránce s omezeným přístupem k rozpoznávání tváře.

Nastavení front-endových aplikací a aplikačních serverů pro detekci živé aktivity

Sady SDK poskytujeme v různých jazycích pro front-endové aplikace a aplikační servery. Pokyny k nastavení front-endových aplikací a aplikačních serverů najdete v následujících pokynech.

Stažení sady SDK pro front-endovou aplikaci

Jakmile budete mít přístup k sadě SDK, postupujte podle pokynů v úložišti GitHub sady Azure-ai-vision-sdk a integrujte uživatelské rozhraní a kód do vaší nativní mobilní aplikace. Sada LIVEness SDK podporuje Java/Kotlin pro mobilní aplikace pro Android, Swift pro mobilní aplikace pro iOS a JavaScript pro webové aplikace:

  • V případě Swiftu pro iOS postupujte podle pokynů v ukázce iOS.
  • V případě Kotlin/Java Android postupujte podle pokynů v ukázce Androidu .
  • V případě javascriptového webu postupujte podle pokynů v ukázce webu.

Jakmile do aplikace přidáte kód, sada SDK zpracuje spuštění kamery, provede koncového uživatele úpravou jejich pozice, sestaví datovou část živé aktivity a zavolá cloudovou službu Azure AI Face, která zpracuje datovou část aktivity.

Stažení klientské knihovny Azure AI Face pro aplikační server

Aplikační server nebo orchestrátor zodpovídá za řízení životního cyklu relace aktivity. Aplikační server musí před detekcí aktivity vytvořit relaci a potom může dotazovat výsledek a po dokončení kontroly aktivity relaci odstranit. Pro snadnou implementaci aplikačního serveru nabízíme knihovnu v různých jazycích. Chcete-li nainstalovat požadovaný balíček, postupujte takto:

Vytvoření proměnných prostředí

V tomto příkladu zapište své přihlašovací údaje do proměnných prostředí na místním počítači, na kterém běží aplikace.

Přejděte na Azure Portal. Pokud se prostředek, který jste vytvořili v části Požadavky, úspěšně nasadil, vyberte v části Další kroky přejít k prostředku. Klíč a koncový bod najdete v části Správa prostředků na stránce Klíče a koncový bod. Váš klíč prostředku není stejný jako ID předplatného Azure.

Pokud chcete nastavit proměnnou prostředí pro klíč a koncový bod, otevřete okno konzoly a postupujte podle pokynů pro operační systém a vývojové prostředí.

  • Pokud chcete nastavit proměnnou FACE_APIKEY prostředí, nahraďte <your_key> jedním z klíčů pro váš prostředek.
  • Pokud chcete nastavit proměnnou FACE_ENDPOINT prostředí, nahraďte <your_endpoint> koncovým bodem vašeho prostředku.

Důležité

Pokud používáte klíč rozhraní API, uložte ho bezpečně někam jinam, například ve službě Azure Key Vault. Nezahrnujte klíč rozhraní API přímo do kódu a nikdy ho nevštěvujte veřejně.

Další informace o zabezpečení služeb AI najdete v tématu Ověřování požadavků na služby Azure AI.

setx FACE_APIKEY <your_key>
setx FACE_ENDPOINT <your_endpoint>

Po přidání proměnných prostředí budete možná muset restartovat všechny spuštěné programy, které budou číst proměnné prostředí, včetně okna konzoly.

Detekce živé aktivity

Základní kroky, které jsou součástí orchestrace aktivity, jsou znázorněny níže:

Diagram pracovního postupu aktivity ve službě Azure AI Face

  1. Front-endová aplikace spustí kontrolu aktivity a upozorní aplikační server.

  2. Aplikační server vytvoří novou relaci živé aktivity se službou Azure AI Face Service. Služba vytvoří relaci živé aktivity a vrátí odpověď pomocí tokenu session-authorization-token. Další informace týkající se každého parametru požadavku, který se týká vytvoření relace živé aktivity, se odkazuje v operaci relace Liveness Create.

    var endpoint = new Uri(System.Environment.GetEnvironmentVariable("FACE_ENDPOINT"));
    var credential = new AzureKeyCredential(System.Environment.GetEnvironmentVariable("FACE_APIKEY"));
    
    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}");
    

    Příklad textu odpovědi:

    {
        "sessionId": "a6e7193e-b638-42e9-903f-eaf60d2b40a5",
        "authToken": "<session-authorization-token>"
    }
    
  3. Aplikační server poskytuje token pro autorizaci relace zpět do front-endové aplikace.

  4. Front-endová aplikace poskytuje token autorizace relace během inicializace sady 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))
    })
    
  5. Sada SDK pak spustí kameru, provede uživatele, aby správně umístil a pak připraví datovou část tak, aby volala koncový bod služby detekce živé aktivity.

  6. Sada SDK volá službu Azure AI Vision Face, která provádí detekci živé aktivity. Jakmile služba odpoví, sada SDK upozorní front-endovou aplikaci, že byla kontrola aktivity dokončena.

  7. Front-endová aplikace předá dokončení kontroly aktivity na aplikační server.

  8. Aplikační server se teď může dotazovat na výsledek detekce živého stavu ze služby Azure AI Vision Face.

    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}");
    

    Příklad textu odpovědi:

    {
        "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. Aplikační server může relaci odstranit, pokud se už nebudete dotazovat na její výsledek.

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

Detekce živé aktivity s ověřením tváře

Kombinace ověřování tváře s detekcí živé aktivity umožňuje biometrické ověřování konkrétní osoby, která má zájem, s přidanou zárukou, že osoba je fyzicky přítomná v systému. Existují dvě části integrace živé aktivity s ověřením:

  1. Vyberte dobrý referenční obrázek.
  2. Nastavte orchestraci živé aktivity s ověřením.

Diagram pracovníhopostupuho

Výběr referenčního obrázku

Pomocí následujících tipů zajistíte, aby vstupní obrázky poskytovaly nejpřesnější výsledky rozpoznávání.

Technické požadavky

  • Podporované vstupní formáty obrázků jsou JPEG, PNG, GIF (první snímek), BMP.
  • Velikost souboru obrázku by neměla být větší než 6 MB.
  • Atribut v operaci rozpoznávání tváře můžete využít qualityForRecognition při použití příslušných modelů detekce jako obecného vodítka, jestli je pravděpodobné, že obrázek má dostatečnou kvalitu pro pokus o rozpoznávání tváře. Pro scénáře identifikace se doporučují pouze "high" kvalitní obrázky pro registraci osob a kvalitu na nebo vyšší úrovni "medium" .

Požadavky na složení

  • Fotografie je jasná a ostrá, není rozmazaná, pixelovaná, zkreslená nebo poškozená.
  • Fotka není změněna tak, aby se odebraly obličeje nebo vzhled obličeje.
  • Fotka musí být ve formátu podporovaném barvou RGB (JPEG, PNG, WEBP, BMP). Doporučená velikost tváře je 200 pixelů x 200 pixelů. Velikosti tváře větší než 200 pixelů x 200 pixelů nebudou mít za následek lepší kvalitu umělé inteligence a velikost není větší než 6 MB.
  • Uživatel nemá brýle, masky, klobouky, sluchátka, kryty hlavy nebo kryty obličeje. Obličej by měl být bez jakýchkoli překážek.
  • Obličejové šperky jsou povoleny za předpokladu, že neskryjí vaši tvář.
  • Na fotce by měl být viditelný jenom jeden obličej.
  • Obličej by měl být v neutrální přední pozici s otevřenýma očima, zavřenými ústy, bez extrémních výrazů obličeje nebo naklonění hlavy.
  • Tvář by měla být bez jakýchkoli stínů nebo červených očí. Pokud dojde k některé z těchto akcí, můžete fotku znovu vyfotit.
  • Pozadí by mělo být jednotné a prosté, bez jakýchkoli stínů.
  • Tvář by měla být na střed uvnitř obrázku a vyplnit alespoň 50 % obrázku.

Nastavte orchestraci živé aktivity s ověřením.

Základní kroky související s orchestrací ověřování jsou znázorněny níže:

  1. Poskytnutí referenčního obrázku pro ověření některou z následujících dvou metod:

    • Aplikační server poskytuje referenční obrázek při vytváření relace živé aktivity. Další informace týkající se každého parametru požadavku, který se týká vytvoření relace aktivity s ověřením, se odkazuje v operaci Liveness With Verify Create Session.

      var endpoint = new Uri(System.Environment.GetEnvironmentVariable("FACE_ENDPOINT"));
      var credential = new AzureKeyCredential(System.Environment.GetEnvironmentVariable("FACE_APIKEY"));
      
      var sessionClient = new FaceSessionClient(endpoint, credential);
      
      var createContent = new CreateLivenessWithVerifySessionContent(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}");
      

      Příklad textu odpovědi:

      {
          "verifyImage": {
              "faceRectangle": {
                  "top": 506,
                  "left": 51,
                  "width": 680,
                  "height": 475
              },
              "qualityForRecognition": "high"
          },
          "sessionId": "3847ffd3-4657-4e6c-870c-8e20de52f567",
          "authToken": "<session-authorization-token>"
      }
      
    • Front-endová aplikace poskytuje referenční image při inicializaci sady SDK. Tento scénář není ve webovém řešení podporovaný.

      val singleFaceImageSource = VisionSource.fromFile("/path/to/image.jpg")
      mFaceAnalysisOptions?.setRecognitionMode(RecognitionMode.valueOfVerifyingMatchToFaceInSingleFaceImage(singleFaceImageSource))
      
  2. Aplikační server teď může kromě výsledku aktivity zadat dotaz na výsledek ověření.

    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}");
    

    Příklad textu odpovědi:

    {
        "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. Aplikační server může relaci odstranit, pokud se už nebudete dotazovat na její výsledek.

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

Vyčištění prostředků

Pokud chcete vyčistit a odebrat předplatné služeb Azure AI, můžete odstranit prostředek nebo skupinu prostředků. Odstraněním skupiny prostředků se odstraní také všechny ostatní prostředky, které jsou k ní přidružené.

Další informace o dalších možnostech v rozhraních API liveness najdete v referenčních informacích k sadě Azure AI Vision SDK.

Další informace ofunkcích