Megosztás a következőn keresztül:


Oktatóanyag: Élőség észlelése az arcokban

Az arcélesség-észlelés annak megállapítására szolgál, hogy egy bemeneti videóstreamben lévő arc valós (élő) vagy hamis (hamis). A biometrikus hitelesítési rendszer fontos építőeleme, hogy megakadályozza, hogy a beosztók fénykép, videó, maszk vagy más módon férhessenek hozzá a rendszerhez egy másik személy megszemélyesítéséhez.

Az élőség-észlelés célja annak biztosítása, hogy a rendszer a hitelesítés időpontjában fizikailag jelen lévő, élő személlyel kommunikáljon. Ezek a rendszerek egyre fontosabbak a digitális pénzügyek, a távelérés és az online identitás-ellenőrzési folyamatok növekedésével.

Az Azure AI Face élőségészlelési megoldása sikeresen véd a különböző hamisítási típusok ellen, például papírnyomatokkal, 2D/3D maszkokkal és hamis bemutatókkal a telefonokon és laptopokon. Az élőségészlelés a kutatás aktív területe, és folyamatosan fejlesztik az egyre kifinomultabb hamisítási támadásokat. Folyamatosan fejlesztik az ügyfelet és a szolgáltatás összetevőit, mivel az általános megoldás robusztusabbá válik az új típusú támadásokhoz.

Fontos

A Face ügyféloldali SDK-k az élőséghez kapus funkciók. A Face Recognition beviteli űrlap kitöltésével hozzáférést kell kérnie az élőség funkcióhoz. Amikor az Azure-előfizetése hozzáférést kap, letöltheti a Face liveness SDK-t.

Bevezetés

Az élőségi megoldás integrációja két különböző összetevőt foglal magában: egy előtérbeli mobil-/webalkalmazást és egy alkalmazáskiszolgálót/vezénylőt.

Az Azure AI Face élőségi munkafolyamatának diagramja.

  • Előtérbeli alkalmazás: Az előtérbeli alkalmazás engedélyt kap az alkalmazáskiszolgálótól az élőség észlelésének kezdeményezéséhez. Elsődleges célja a kamera aktiválása és a végfelhasználók pontos útmutatója az élőség-észlelési folyamaton keresztül.
  • Alkalmazáskiszolgáló: Az alkalmazáskiszolgáló háttérkiszolgálóként szolgál az élőségészlelési munkamenetek létrehozásához és egy engedélyezési jogkivonat beszerzéséhez a Face szolgáltatásból egy adott munkamenethez. Ez a jogkivonat engedélyezi az előtérbeli alkalmazás számára az élőség észlelését. Az alkalmazáskiszolgáló célja a munkamenetek kezelése, az előtérbeli alkalmazás engedélyezésének biztosítása és az élőség-észlelési folyamat eredményeinek megtekintése.

Emellett kombináljuk az arcellenőrzést az élőség-észleléssel annak ellenőrzéséhez, hogy az adott személy az Ön által kijelölt személy-e. Az alábbi táblázat az élőség-észlelési funkciók részleteit ismerteti:

Szolgáltatás Leírás
Élőség észlelése Állapítsa meg, hogy egy bemenet valós vagy hamis, és csak az alkalmazáskiszolgáló rendelkezik hatáskörrel az élőség-ellenőrzés elindítására és az eredmény lekérdezésére.
Élőség-észlelés arcellenőrzéssel Állapítsa meg, hogy a bemenet valós vagy hamis-e, és ellenőrizze a személy személyazonosságát a megadott referenciakép alapján. Az alkalmazáskiszolgáló vagy az előtérbeli alkalmazás képes referenciarendszerképet biztosítani. Csak az alkalmazáskiszolgáló rendelkezik jogosultságokkal az élőség-ellenőrzés kezdeti beállításához és az eredmény lekérdezéséhez.

Ez az oktatóanyag bemutatja, hogyan üzemeltethet előtéralkalmazást és alkalmazáskiszolgálót az élőség-észlelés és az élőség-észlelés különböző nyelvi SDK-kban történő arcellenőrzéssel.

Előfeltételek

  • Azure-előfizetés – Ingyenes létrehozás
  • Az Azure-fiókjához Cognitive Services-közreműködői szerepkörrel kell rendelkeznie ahhoz, hogy ön elfogadja a felelős AI-feltételeket, és létrehozhasson egy erőforrást. Ha hozzá szeretné rendelni ezt a szerepkört a fiókjához, kövesse a Szerepkörök hozzárendelése dokumentáció lépéseit, vagy forduljon a rendszergazdához.
  • Miután megkapta az Azure-előfizetését, hozzon létre egy Face-erőforrást az Azure Portalon a kulcs és a végpont lekéréséhez. Az üzembe helyezés után válassza az Ugrás az erőforrásra lehetőséget.
    • Az alkalmazás a Face szolgáltatáshoz való csatlakoztatásához szüksége van a létrehozott erőforrás kulcsára és végpontjára.
    • Az ingyenes tarifacsomag (F0) használatával kipróbálhatja a szolgáltatást, és később frissíthet egy fizetős szintre az éles környezetben.
  • Hozzáférés az Azure AI Vision Face Ügyféloldali SDK mobileszközökhöz (IOS és Android) és a webhez. Első lépésként alkalmaznia kell a Face Recognition korlátozott hozzáférésű funkcióit az SDK-hoz való hozzáféréshez. További információt a Face Limited Access oldalán talál.

Előtérbeli alkalmazások és alkalmazáskiszolgálók beállítása az élőség észleléséhez

Az előtérbeli alkalmazásokhoz és alkalmazáskiszolgálókhoz különböző nyelveken biztosítunk SDK-kat. Az előtéralkalmazások és alkalmazáskiszolgálók beállításához tekintse meg az alábbi utasításokat.

SDK letöltése előtérbeli alkalmazáshoz

Miután hozzáfér az SDK-hoz, kövesse az Azure-ai-vision-sdk GitHub-adattár utasításait a felhasználói felület és a kód natív mobilalkalmazásba való integrálásához. A liveness SDK támogatja a Java/Kotlin androidos mobilalkalmazásokat, az iOS-alapú Swift mobilalkalmazásokat és a JavaScriptet webalkalmazásokhoz:

  • Swift iOS esetén kövesse az iOS-mintában szereplő utasításokat
  • Kotlin/Java Android esetén kövesse az Android-minta utasításait
  • JavaScript Web esetén kövesse a webes minta utasításait

Miután hozzáadta a kódot az alkalmazáshoz, az SDK kezeli a kamera indítását, a végfelhasználó irányítását a helyzetük módosításában, az élőség hasznos adatainak összeállításában, és meghívja az Azure AI Face felhőszolgáltatást az élőségi hasznos adatok feldolgozásához.

Az Azure AI Face-ügyféloldali kódtár letöltése az alkalmazáskiszolgálóhoz

Az alkalmazáskiszolgáló/vezénylő felelős egy élő munkamenet életciklusának szabályozásáért. Az alkalmazáskiszolgálónak létre kell hoznia egy munkamenetet az élőség észlelése előtt, majd lekérdezheti az eredményt, és törölheti a munkamenetet, amikor az élőség-ellenőrzés befejeződött. Számos nyelven kínálunk kódtárat az alkalmazáskiszolgáló egyszerű implementálásához. A kívánt csomag telepítéséhez kövesse az alábbi lépéseket:

  • C# esetén kövesse a dotnet readme utasításait
  • Java esetén kövesse a Java-olvasás utasításait
  • Python esetén kövesse a Python-olvasóban található utasításokat
  • JavaScript esetén kövesse a JavaScript-olvasóban található utasításokat

Környezeti változók létrehozása

Ebben a példában írja meg a hitelesítő adatait az alkalmazást futtató helyi gépen lévő környezeti változókba.

Nyissa meg az Azure Portalt. Ha az Előfeltételek szakaszban létrehozott erőforrás sikeresen üzembe lett helyezve, válassza az Ugrás az erőforrásra lehetőséget a Következő lépések csoportban. A kulcsot és a végpontot a Kulcsok és végpontok lapon, az Erőforrás-kezelés területen találja. Az erőforráskulcs nem ugyanaz, mint az Azure-előfizetés azonosítója.

A kulcs és a végpont környezeti változójának beállításához nyisson meg egy konzolablakot, és kövesse az operációs rendszer és a fejlesztési környezet utasításait.

  • A FACE_APIKEY környezeti változó beállításához cserélje le <your_key> az erőforrás egyik kulcsára.
  • A FACE_ENDPOINT környezeti változó beállításához cserélje le <your_endpoint> az erőforrás végpontját.

Fontos

HA API-kulcsot használ, biztonságosan tárolja valahol máshol, például az Azure Key Vaultban. Ne foglalja bele közvetlenül az API-kulcsot a kódba, és soha ne tegye közzé nyilvánosan.

Az AI-szolgáltatások biztonságáról további információt az Azure AI-szolgáltatásokhoz érkező kérelmek hitelesítése című témakörben talál.

setx FACE_APIKEY <your_key>
setx FACE_ENDPOINT <your_endpoint>

A környezeti változók hozzáadása után előfordulhat, hogy újra kell indítania a futó programokat, amelyek felolvassák a környezeti változókat, beleértve a konzolablakot is.

Élőség-észlelés végrehajtása

Az élőség-vezénylés magas szintű lépéseit az alábbiakban szemléltetjük:

Az Azure AI Face élőségi munkafolyamatának diagramja.

  1. Az előtérbeli alkalmazás elindítja az élőség-ellenőrzést, és értesíti az alkalmazáskiszolgálót.

  2. Az alkalmazáskiszolgáló létrehoz egy új élő munkamenetet az Azure AI Face Service-vel. A szolgáltatás létrehoz egy élő munkamenetet, és egy munkamenet-engedélyezési jogkivonattal válaszol vissza. Az élőségi munkamenetek létrehozásában részt vevő egyes kérésparaméterekkel kapcsolatos további információkra a Liveness Létrehozási munkamenet-művelet hivatkozik.

    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élda a válasz törzsére:

    {
        "sessionId": "a6e7193e-b638-42e9-903f-eaf60d2b40a5",
        "authToken": "<session-authorization-token>"
    }
    
  3. Az alkalmazáskiszolgáló visszaküldi a munkamenet-engedélyezési jogkivonatot az előtérbeli alkalmazásnak.

  4. Az előtérbeli alkalmazás biztosítja a munkamenet-engedélyezési jogkivonatot az Azure AI Vision SDK inicializálása során.

    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. Az SDK ezután elindítja a kamerát, irányítja a felhasználót a helyes pozícióhoz, majd előkészíti a hasznos adatokat az élőség-észlelési szolgáltatás végpontjának meghívásához.

  6. Az SDK meghívja az Azure AI Vision Face szolgáltatást az élőség-észlelés végrehajtásához. Miután a szolgáltatás válaszol, az SDK értesíti az előtérbeli alkalmazást, hogy az élőség-ellenőrzés befejeződött.

  7. Az előtérbeli alkalmazás továbbítja az élőség-ellenőrzés befejezését az alkalmazáskiszolgálónak.

  8. Az alkalmazáskiszolgáló mostantól lekérdezheti az Azure AI Vision Face szolgáltatásból származó élőség-észlelési eredményeket.

    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élda a válasz törzsére:

    {
        "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. Az alkalmazáskiszolgáló törölheti a munkamenetet, ha már nem kérdezi le az eredményt.

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

Élőség-észlelés végrehajtása arcellenőrzéssel

Az arc-ellenőrzés és az élőség-észlelés kombinálása lehetővé teszi egy adott érintett személy biometrikus ellenőrzését egy hozzáadott garanciával, hogy a személy fizikailag jelen van a rendszerben. Az élőség ellenőrzéssel való integrálásának két része van:

  1. Válasszon egy jó referenciaképet.
  2. Az élőség vezénylésének beállítása ellenőrzéssel.

Az Azure AI Face élőség-ellenőrzési munkafolyamatának ábrája.

Referenciakép kiválasztása

Az alábbi tippek segítségével győződjön meg arról, hogy a bemeneti képek a legpontosabb felismerési eredményeket adják.

Műszaki követelmények

  • A támogatott bemeneti képformátumok: JPEG, PNG, GIF (az első képkocka), BMP.
  • A képfájl mérete nem lehet nagyobb 6 MB-nál.
  • Az attribútumot az qualityForRecognition arcfelismerési műveletben akkor használhatja, ha az alkalmazható észlelési modelleket használja általános útmutatóként, hogy a kép valószínűleg megfelelő minőségű-e ahhoz, hogy megkísérelje az arcfelismerést. Azonosítási forgatókönyvek esetében csak "high" minőségi képek használata ajánlott a személyregisztrációhoz, és a minőség a fenti vagy annál magasabb "medium" szinten javasolt.

Összetételi követelmények

  • A fénykép tiszta és éles, nem homályos, képpontos, torz vagy sérült.
  • A fénykép nem módosul az archibák és az arc megjelenésének eltávolításához.
  • A fényképnek RGB-színben támogatott formátumban kell lennie (JPEG, PNG, WEBP, BMP). Az ajánlott arcméret 200 képpont x 200 képpont. A 200 képpontnál x 200 képpontnál nagyobb arcméretek nem eredményeznek jobb AI-minőséget, és nem nagyobbak 6 MB-nál.
  • A felhasználó nem visel szemüveget, maszkot, kalapot, fejhallgatót, fejvédőt vagy arcvédőt. Az arcnak mentesnek kell lennie minden akadálytól.
  • Arc ékszer megengedett, feltéve, hogy nem rejtik el az arcát.
  • Csak egy arc legyen látható a fényképen.
  • Az arcnak semleges, elülső pózban kell lennie, nyitott szemmel, zárt szájjal, szélsőséges arckifejezések és fejdöntés nélkül.
  • Az arcnak mentesnek kell lennie az árnyéktól vagy a vörös szemtől. Ha ezek bármelyike bekövetkezik, akkor a fényképet újra meg kell ismételni.
  • A háttérnek egységesnek és egyszerűnek kell lennie, árnyéktól mentesnek kell lennie.
  • Az arcnak a kép közepén kell lennie, és ki kell töltenie a kép legalább 50%-át.

Az élőség vezénylésének beállítása ellenőrzéssel.

Az ellenőrzés vezénylése során az élőség magas szintű lépéseit az alábbi ábra szemlélteti:

  1. Az ellenőrzési referencia képének megadása az alábbi két módszer valamelyikével:

    • Az alkalmazáskiszolgáló biztosítja a referenciarendszerképet az élő munkamenet létrehozásakor. Az élőségi munkamenet ellenőrzéssel történő létrehozásában részt vevő egyes kérésparaméterekkel kapcsolatos további információkra az Élőség a munkamenet-létrehozási művelet ellenőrzésével című témakörben talál további információt.

      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"
      };
      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élda a válasz törzsére:

      {
          "verifyImage": {
              "faceRectangle": {
                  "top": 506,
                  "left": 51,
                  "width": 680,
                  "height": 475
              },
              "qualityForRecognition": "high"
          },
          "sessionId": "3847ffd3-4657-4e6c-870c-8e20de52f567",
          "authToken": "<session-authorization-token>"
      }
      
    • Az előtérbeli alkalmazás az SDK inicializálásakor biztosítja a referenciarendszerképet. Ez a forgatókönyv nem támogatott a webes megoldásban.

      val singleFaceImageSource = VisionSource.fromFile("/path/to/image.jpg")
      mFaceAnalysisOptions?.setRecognitionMode(RecognitionMode.valueOfVerifyingMatchToFaceInSingleFaceImage(singleFaceImageSource))
      
  2. Az alkalmazáskiszolgáló mostantól az élőségi eredmény mellett lekérdezheti az ellenőrzési eredményt.

    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élda a válasz törzsére:

    {
        "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. Az alkalmazáskiszolgáló törölheti a munkamenetet, ha már nem kérdezi le az eredményt.

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

Az erőforrások eltávolítása

Ha törölni és eltávolítani szeretne egy Azure AI-szolgáltatási előfizetést, törölheti az erőforrást vagy az erőforráscsoportot. Az erőforráscsoport törlése a hozzá társított egyéb erőforrásokat is törli.

Az élőségi API-k egyéb lehetőségeiről az Azure AI Vision SDK referenciájában olvashat.

Az élőségi megoldás vezényléséhez elérhető funkciókkal kapcsolatos további információkért tekintse meg a Session REST API referenciáját.