Jste zde

Rozpoznávání tváře bez cloudového připojení

Rozpoznávání obličeje se používá pro ověření uživatele k přístupu k chytrému telefonu, ale širší uplatnění této technologie v jiných oblastech i přes její účinnost a snadné použití zaostává. Rozpoznávání obličeje vyžaduje vysoký výpočetní výkon, a proto se analýza obrazu často provádí v cloudu. My se podíváme, jak tuto metodu použít i v Offline režimu.

Tento článek pojednává o složitosti ověření uživatele obecně a pak si představíme hardwarové a softwarového řešení od NXP Semiconductors. Poté si ukážeme, jak lze využít zkušenosti se strojovým učení pro rychlou implementaci offline rozpoznávání obličeje s ochranou proti spoofingu.

Bezpečné ověření uživatele

Tradiční metody se spoléhají na tzv. vícefaktorovou autentizaci, která spočívá v kombinaci tří faktorů.

  • „Něco, co znáte“, například heslo;
  • „Něco, co máte“, například fyzický klíč nebo karta s klíčem;
  • „Něco, čím jsi“, což je obvykle biometrický faktor, jako je otisk prstu nebo oční duhovka.

Bezpečnostní zámek dveří může vyžadovat, aby uživatel zadal přístupový kód, použil kartu a dále poskytl otisk prstu pro odemknutí dveří. Rozpoznávání obličeje výrazně zjednodušilo ověřování uživatelů ve smartphonech. Smartphony ale mají některé vlastnosti, které nemusí být k dispozici v každém zařízení. Kromě vysokého výpočetního výkonu, který je běžný u špičkových smartphonů, je to nepřetržitý přístup k internetu, kde mohou aplikace využívat sofistikované služby.

Mnoho produktů, ale nemá dostatečný výpočetní výkon a má také velmi omezenou konektivitu. Stejně důležité nebo ještě důležitější je obava z toho, že by se obraz obličeje přenášel přes veřejnou síť do cloudu ke zpracování, kde by docházelo k jeho uložení. Pomocí procesorů i.MX RT106F od společnosti NXP Semiconductors a příslušného software lze implementovat Offline rozpoznávání obličeje.

Hardware a software pro offline rozpoznávání obličeje

Řada procesorů i.MX RT106F patří do rodiny crossoverových procesorů NXP i.MX RT1060 a je speciálně navržena tak, aby podporovala snadnou integraci offline rozpoznávání obličeje do inteligentních zařízení.

Procesory jsou postaveny na jádru Arm Cortex-M7. Procesor MIMXRT106FCVL5B běží na frekvenci 528 MHz a je určen pro průmyslové aplikace. Procesory MIMXRT106FDVL6A a MIMXRT106FDVL6B běží na frekvenci 600 MHz a jsou určeny pro komerční aplikace. Kromě podpory široké škály externích paměťových rozhraní obsahují procesory i.MX RT106F 1 Mbyte paměť RAM přímo na čipu. Z toho 512 Kbyte jako univerzální RAM a dalších 512 kB lze konfigurovat buď jako univerzální RAM nebo jako pevně vázaná paměť (TCM) pro instrukce (I-TCM) nebo data (D-TCM). Tyto procesory nabízí rozsáhlou sadu integrovaných funkcí pro grafiku, zabezpečení, řízení systému a analogová i digitální rozhraní, která jsou obvykle nutná k podpoře HMI rozhraní či řízení motoru (Obrázek 1).

Obrázek 1: Procesory i.MX RT106F od společnosti NXP Semiconductor nabízí celou sadu funkčních bloků, které podporují rozpoznávání obličeje u spotřebních, průmyslových a bezpečnostních zařízení. (Zdroj obrázku: NXP)

Procesory i.MX RT106F se dodávají s runtime licenci pro software NXP Oasis Lite pro rozpoznávání obličeje. Runtime prostředí Oasis Lite provádí detekci, rozpoznávání, a dokonce omezenou klasifikaci emocí pomocí modelů neuronové sítě (NN) běžících na MiniCV – knihovna počítačového vidění OpenCV. Tento engine je založen na knihovně NXP NN a knihovně Arm Cortex Microcontroller System Interface Standard NN (CMSIS-NN) (obrázek 2).

Obrázek 2: Runtime knihovna NXP Oasis Lite obsahuje jádro Oasis Lite, které používá MiniCV a inference engine NXP postavený na knihovnách neuronových sítí od NXP a Arm. (Zdroj obrázku: NXP)

Na platformě i.MX RT106F se detekce a rozpoznávání obličeje provádí lokálně, na rozdíl od jiných řešení, která při spouštění algoritmů strojového učení závisí na cloudových zdrojích. Díky této schopnosti offline rozpoznávání obličeje lze zajistit soukromé, zabezpečené ověřování i přes nedokonalé internetové připojení. Kromě toho k ověřování dochází rychle, celý proces trvá méně než 800 ms. Procesor je schopen se v tomto čase probudit z pohotovostního režimu a provést úplné rozpoznání obličeje.

Procesor i.MX RT106F s runtime Oasis Lite je schopen rozpoznat pravost obličeje. To je důležité pro odražení útoků ve formě tzv. spoofingu. To je metoda, kdy útočník použije dokonalou fotografii pro ověření uživatele. Pro ověření si všech vlastností dané platformy včetně bezpečnostní funkce anti-spoofing je k dispozici vývojová sada NXP SLN-VIZNAS-IOT a související software. Vše je dodáváno k okamžitému použití, prototypování a vývoj offline rozpoznávání obličeje bez použití cloudu.

Kompletní systémové řešení

Procesor i.MX RT106F k zajištění efektivní výpočetního výkonu vyžaduje pouze několik dalších komponent. Sada NXP SLN-VIZNAS-IOT poskytuje úplnou hardwarovou platformu (obrázek 3).

Obrázek 3: Sada NXP SLN-VIZNAS-IOT obsahuje připojený modul, který poskytuje robustní systémovou platformu potřebnou ke spuštění ověřovacího softwaru. (Zdroj obrázku: NXP)

Modul obsahuje procesor NXP MIMXRT106FDVL6A i.MX RT106F, bezpečnostní čip NXP A71CH a dvě možnosti konektivity – SoC MKW41Z512VHT4 Kinetis KW41Z Bluetooth s nízkou spotřebou (BLE) od NXP nebo modul LBEE5KL1DX- 883 Wi-Fi / Bluetooth od Murata Electronics. Modul přidává také 256 Mb SDRAM W9825G6JB od Winbond Electronics, 256 Mbit NOR flash paměť IS26KL256S-DABLI00 a 256 Mbit Quad Serial Peripheral Interface (SPI) IS25LP256D od Integrated Silicon řešení. Inc. (ISSI).

Součástí modulu je také převodník XCL214B333DR od Torex Semiconductor, který doplňuje možnosti interní správy napájení procesoru i.MX RT106F.

Deska aplikace Vision obsahuje PIR senzor Murata Electronics IRA-S210ST01, nabíječku baterií, zvukovou podporu, světelné diody (LED), tlačítka a konektory, kde jsou vyvedeny všechny důležitá rozhraní (obrázek 4).

Obrázek 4: V sadě NXP SLN-VIZNAS-IOT se modul (vlevo) připojuje k desce aplikace Vision, aby poskytl hardwarový základ pro rozpoznávání tváře. (Zdroj obrázku: NXP)

Odolnost vůči útokům

Falšování biometrických údajů je tak staré jako samotný vznik této metody. Nahrazení živé tváře dokonalou fotografií se nazývá tv. Spoofing. Úkolem anti- spoofing funkce je ověření, že biometrický údaj pochází od „živé“ osoby. Tato metoda se nazývá presentation attack detection (PDA), která používá hloubkovou analýzu kvality a charakteristik biometrických. Pro sadu SLN-VIZNAS-IOT obsahuje NXP kamerový modul, který obsahuje dvojici obrazových snímačů MT9M114  od společnosti ON Semiconductor.

Jedna kamera je vybavena červeným, zeleným, modrým (RGB) filtrem a druhá kamera je vybavena infračerveným (IR) filtrem. Kamera RGB je připojená přes rozhraní kamery k aplikační desce Vision a poskytuje klasicky obraz ve viditelném spektru (fotografii), zatímco infračervená kamera snímá obraz, který poskytuje živost snímaného obrazu. Díky tomu poskytuje sada SLN-VIZNAS-IOT offline schopnost rozpoznávání tváře s ochranou proti spoofingu. Navíc všechen hardware zabere plochu přibližně 30 x 40 mm (obrázek 5).

Obrázek 5: Hardwarová sada NXP SLN-VIZNAS-IOT obsahuje duální kamerový systém pro detekci živosti (nahoře) a desku aplikace Vision (dole) s připojeným modulem. Díky tomu je sada schopna poskytnout řešení pro offline rozpoznávání obličeje s anti-spoofing ochranou. (Zdroj obrázku: NXP)

Začínáme se sadou SLN-VIZNAS-IOT

Sada NXP SLN-VIZNAS-IOT je přímo připravena k rozpoznávání obličeje. Stačí jen zapojit kabel USB a stisknutím tlačítka se provede jednoduchá manuální registrace obličeje pomocí předinstalované aplikace „elock“ a doprovodné mobilní aplikace (obrázek 6, vlevo). Po registraci se zobrazí v mobilní aplikaci zpráva „Vítejte doma“ a štítek „Odemčeno“, pokud sada ověří zaregistrovanou tvář (obrázek 6, vpravo).

Obrázek 6: Hardwarová sada NXP SLN-VIZNAS-IOT funguje ihned po vybalení z krabice a využívá doprovodnou aplikaci k registraci obličeje (vlevo) a rozpoznávání registrovaných obličejů (vpravo). (Zdroj obrázku: NXP)

Software Oasis Lite pro rozpoznávání obličeje zpracovává modely ze své databáze, která může obsahovat až 3000 obličejů RGB s přesností rozpoznávání 99,6% a až 100 IR obličejů s přesností proti spoofingu 96,5%. Jak již bylo zmíněno dříve, hardwarové / softwarové řešení NXP potřebuje méně než jednu sekundu k provedení detekce obličeje, vyrovnání obrazu, kontroly kvality, detekce živosti a samotné rozpoznání obrazu v rozsahu od 0,2 do 1,0 m. Ve skutečnosti systém podporuje alternativní „lehký“ model odvození, který je schopen provést stejnou sekvenci za méně než 0,5 s, ale podporuje menší maximální velikost databáze 1000 obličejů RGB a 50 obličejů v IR spektru.

Jak na vlastní aplikaci?

Sada NXP SLN-VIZNAS-IOT umožňuje rychle vyvíjet aplikace pro rozpoznávání obličejů. Slouží také jako kompletní referenční návrh s úplnými schématy a podrobným kusovníkem (BOM). Pro vývoj software lze používat integrované vývojové prostředí (IDE) NXP MCUXpresso s podporou FreeRTOS. Pro ještě větší zjednodušení vývoje lze použít online program MCUXpresso SDK Builder ke konfiguraci prostředí pro vývoj softwaru pomocí sady VIZNAS SDK, která obsahuje engine pro strojové učení NXP Oasis Lite (obrázek 7).

Obrázek 7: NXP poskytuje komplexní softwarové prostředí, které v operačním systému FreeRTOS spouští knihovnu NXP Oasis Lite a obslužný middleware. (Zdroj obrázku: NXP)

Softwarový balíček obsahuje kompletní zdrojový kód pro operační prostředí i ukázkovou aplikaci elock uvedenou výše. NXP neposkytuje zdrojový kód pro svůj proprietární modul Oasis Lite ani pro modely. Místo toho vývojáři pracují s knihovnou Oasis Lite pomocí poskytovaného aplikačního programovacího rozhraní (API), které obsahuje sadu intuitivních volání funkcí k provádění podporovaných operací. Vývojáři navíc používají poskytnutou sadu definic a struktur v jazyce C k určení různých parametrů, včetně velikosti obrazu, alokace paměti, zpětných volání a povolených funkcí používaných systémem při spuštění prostředí Oasis Lite (Výpis 1).
typedef struct {
    //max input image height, width and channel, min_face: minimum face can be detected
    int height;
    int width;
  
    //only valid for RGB images; for IR image, always GREY888 format
    OASISLTImageFormat_t img_format;
    OASISLTImageType_t img_type;
  
    //min_face should not smaller than 40
    int min_face;
  
    /*memory pool pointer, this memory pool should only be used by OASIS LIB*/
    char* mem_pool;
  
    /*memory pool size*/
    int size;
  
    /*output parameter,indicate authenticated or not*/
    int auth;
  
    /*callback functions provided by caller*/
    InfCallbacks_t cbs;
  
    /*what functions should be enabled in OASIS LIB*/
    uint8_t enable_flags;
  
    /*only valid when OASIS_ENABLE_EMO is activated*/
    OASISLTEmoMode_t emo_mode;
  
    /*false accept rate*/
    OASISLTFar_t false_accept_rate;
  
    /*model class */
    OASISLTModelClass_t mod_class;
  
} OASISLTInitPara_t;

Výpis 1: Vývojáři mohou upravovat parametry spuštění softwaru úpravou obsahu struktur, jako je ta, která je zde uvedena pro inicializaci prostředí Oasis Lite. (Zdroj kódu: NXP)

Ukázkový kód aplikace elock demonstruje klíčové návrhové vzory pro spuštění Oasis jako úlohy běžící pod FreeRTOS, inicializaci prostředí a vstup do normálního režimu. V normálním režimu pracuje Oasis na pozadí na každém snímku obrazu a provádí dané operace, které jsou volány pomocí příslušných API příkazů (Výpis 2).
typedef enum {
    /*indicate the start of face detection, user can update frame data if it is needed.
     * all parameter in callback parameter is invalid.*/
    OASISLT_EVT_DET_START,
  
    /*The end of face detection.
     *if a face is found, pfaceBox(OASISLTCbPara_t) indicated the rect(left,top,right,bottom point value)
     *info and landmark value of the face.
     *if no face is found,pfaceBox is NULL, following event will not be triggered for current frame.
     *other parameter in callback parameter is invalid */
    OASISLT_EVT_DET_COMPLETE,
  
    /*Face quality check is done before face recognition*/
    OASISLT_EVT_QUALITY_CHK_START,
    OASISLT_EVT_QUALITY_CHK_COMPLETE,
  
    /*Start of face recognition*/
    OASISLT_EVT_REC_START,
  
    /*The end of face recognition.
     * when face feature in current frame is gotten, GetRegisteredFaces callback will be called to get all
     * faces feature registered and OASIS lib will try to search this face in registered faces, if this face
     * is matched, a valid face ID will be set in callback parameter faceID and corresponding simularity(indicate
     * how confidence for the match) also will be set.
     * if no face match, a invalid(INVALID_FACE_ID) will be set.*/
    OASISLT_EVT_REC_COMPLETE,
  
    /*start of emotion recognition*/
    OASISLT_EVT_EMO_REC_START,
  
    /*End of emotion recognition, emoID indicate which emotion current face is.*/
    OASISLT_EVT_EMO_REC_COMPLETE,
  
    /*if user set a registration flag in a call of OASISLT_run and a face is detected, this two events will be notified
     * for auto registration mode, only new face(not recognized) is added(call AddNewFace callback function)
     * for manu registration mode, face will be added forcely.
     * for both cases, face ID of new added face will be set in callback function */
    OASISLT_EVT_REG_START,
    /*when registration start, for each valid frame is handled,this event will be triggered and indicate
     * registration process is going forward a little.
     * */
    OASISLT_EVT_REG_IN_PROGRESS,
    OASISLT_EVT_REG_COMPLETE,
    OASISLT_EVT_NUM
} OASISLTEvt_t;

Výpis 2: Modul runtime Oasis Lite reaguje na řadu událostí (eventy), které jsou dokumentovány v header souboru modulu Oasis Lite. (Zdroj kódu: NXP)

Ukázková aplikace může vývojářům poskytnout podrobné ladicí zprávy (debug message), které popisují výsledky každé události zpracované obslužnou rutinou (EvtHandler). Například po dokončení kontroly kvality (OASISLT_EVT_QUALITY_CHK_COMPLETE) systém poskytne debug message popisující výsledek a po dokončení rozpoznávání obličeje (OASISLT_EVT_REC_COMPLETE) systém vytáhne ID uživatele a jméno ze své databáze (Výpis 3).


static void EvtHandler(ImageFrame_t *frames[], OASISLTEvt_t evt, OASISLTCbPara_t *para, void *user_data)
{
[code redacted for simplification]
        case OASISLT_EVT_QUALITY_CHK_COMPLETE:
        {
            UsbShell_Printf("[OASIS]:quality chk res:%d\r\n", para->qualityResult);
  
            pQMsg->msg.info.irLive  = para->reserved[5];
            pQMsg->msg.info.front   = para->reserved[1];
            pQMsg->msg.info.blur    = para->reserved[3];
            pQMsg->msg.info.rgbLive = para->reserved[8];
  
            if (para->qualityResult == OASIS_QUALITY_RESULT_FACE_OK_WITHOUT_GLASSES ||
                para->qualityResult == OASIS_QUALITY_RESULT_FACE_OK_WITH_GLASSES)
            {
                UsbShell_DbgPrintf(VERBOSE_MODE_L2, "[EVT]:ok!\r\n");
            }
            else if (OASIS_QUALITY_RESULT_FACE_SIDE_FACE == para->qualityResult)
            {
                UsbShell_DbgPrintf(VERBOSE_MODE_L2, "[EVT]:side face!\r\n");
            }
            else if (para->qualityResult == OASIS_QUALITY_RESULT_FACE_TOO_SMALL)
            {
                UsbShell_DbgPrintf(VERBOSE_MODE_L2, "[EVT]:Small Face!\r\n");
            }
            else if (para->qualityResult == OASIS_QUALITY_RESULT_FACE_BLUR)
            {
                UsbShell_DbgPrintf(VERBOSE_MODE_L2, "[EVT]: Blurry Face!\r\n");
            }
            else if (para->qualityResult == OASIS_QUALITY_RESULT_FAIL_LIVENESS_IR)
            {
                UsbShell_DbgPrintf(VERBOSE_MODE_L2, "[EVT]: IR Fake Face!\r\n");
            }
            else if (para->qualityResult == OASIS_QUALITY_RESULT_FAIL_LIVENESS_RGB)
            {
                UsbShell_DbgPrintf(VERBOSE_MODE_L2, "[EVT]: RGB Fake Face!\r\n");
            }
        }
        break;
[code redacted for simplification]
        case OASISLT_EVT_REC_COMPLETE:
        {
            int diff;
            unsigned id                     = para->faceID;
            OASISLTRecognizeRes_t recResult = para->recResult;
  
            timeState->rec_comp = Time_Now();
            pQMsg->msg.info.rt  = timeState->rec_start - timeState->rec_comp;
            face_info.rt        = pQMsg->msg.info.rt;
#ifdef SHOW_FPS
            /*pit timer unit is us*/
            timeState->rec_fps++;
            diff = abs(timeState->rec_fps_start - timeState->rec_comp);
            if (diff > 1000000 / PIT_TIMER_UNIT)
            {
                // update fps
                pQMsg->msg.info.recognize_fps = timeState->rec_fps * 1000.0f / diff;
                timeState->rec_fps            = 0;
                timeState->rec_fps_start      = timeState->rec_comp;
            }
#endif
            memset(pQMsg->msg.info.name, 0x0, sizeof(pQMsg->msg.info.name));
  
            if (recResult == OASIS_REC_RESULT_KNOWN_FACE)
            {
                std::string name;
                UsbShell_DbgPrintf(VERBOSE_MODE_L2, "[OASIS]:face id:%d\r\n", id);
                DB_GetName(id, name);
                memcpy(pQMsg->msg.info.name, name.c_str(), name.size());
                face_info.recognize = true;
                face_info.name      = std::string(name);
                UsbShell_DbgPrintf(VERBOSE_MODE_L2, "[OASIS]:face id:%d name:%s\r\n", id, pQMsg->msg.info.name);
            }
            else
            {
                // face is not recognized, do nothing
                UsbShell_DbgPrintf(VERBOSE_MODE_L2, "[OASIS]:face unrecognized\r\n");
                face_info.recognize = false;
            }
  
            VIZN_RecognizeEvent(gApiHandle, face_info);
        }
        break;

Výpis 3: Jak je ukázáno v této části ukázkové aplikace, obslužná rutina události zpracovává události, ke kterým došlo během sekvence rozpoznávání obličeje. (Zdroj kódu: NXP)

Kromě rozpoznávání obličeje je software NXP SLN-VIZNAS-IOT navržen tak, aby ověřoval integritu a autenticitu každého podepsaného obrazu firmware pomocí certifikátu uloženého v souborovém systému. Protože podepisování a ověřování kódu může zpomalit celý vývoj, je tento proces ověřování navržen tak, aby ho bylo možné během ladění softwaru obejít. NXP poskytuje mobilní aplikaci pro Android s úplným zdrojovým kódem Java. Aplikace VIZNAS FaceRec Manager poskytuje jednoduché rozhraní pro registraci obličejů a správu uživatelů.

Závěr

Rozpoznávání obličeje nabízí efektivní ověřování uživatele v inteligentních produktech. Je nutno nutné zajistit dostatečný výpočetní výkon pro analýzu obrazu a bezpečnostní algoritmy, které jsou schopny odolat i útoku nazývaného spoofing. Speciální procesor a softwarová knihovna od NXP Semiconductors nabízí řešení v podobě rozpoznání obličeje bez použití cloudu, a navíc má integrované bezpečnostní funkce, které jsou schopny čelit různým útokům z venčí.

 

Článek vyšel v originále na webu DigiKey.com, autorem je Stephen Evanczuk.

Hodnocení článku: