原創:Stephen Evanczuk@DigiKey得捷電子
人臉識別在驗證智能手機訪問權方面已經得到了廣泛認可,但在其他領域還沒有得到更廣泛地應用,儘管這項技術極具效率且易於使用。在實現可靠的低成本機器學習解決方案方面,除了存在技術挑戰,開發人員還必須解決用戶對傳統人臉識別方法的可靠性和隱私性的擔憂,因為這些方法依賴易受欺騙的雲連接。
本文將先就安全身份驗證困難之處展開了討論,然後介紹NXP Semiconductors能夠解決這些問題的軟硬體解決方案。最後說明以前沒有機器學習方法經驗的開發人員該如何使用該解決方案,在智能產品中快速實現離線式防欺騙人臉識別。
智能產品安全身份驗證的挑戰
在解決人們對智能產品日益增長的安全性問題的擔憂時,開發人員發現自己幾乎沒有什麼可持續使用的選擇,來可靠地進行用戶身份驗證,從而實現快速、安全的訪問。傳統方法依賴於多因素身份驗證方法,這種方式依賴經典的三個身份驗證因素的某種組合:「你所知道的東西」,如密碼;「你所擁有的東西」,如實物鑰匙或鑰匙卡;以及「你所是的東西」,通常是指紋或虹膜等生物識別因素。使用這種方式,強身份驗證門鎖可能需要用戶輸入密碼,使用鑰匙卡,並進一步提供指紋來解鎖。實際上,這種嚴格的要求對於需要頻繁、方便地用智能手機或其他常用設備的消費者來說,這種重複驗證自己身份的方式很麻煩,或者說根本不實用。
人臉識別的使用大大簡化了智能手機用戶的身份驗證,但智能手機擁有的一些優勢可能並不是每種設備都能具備的。除了高端智能手機擁有強大的處理能力外,連接始終在線是給用戶提供所期望的一系列複雜服務的基本要求。
對於許多需要安全身份驗證的產品來說,底層操作平台通常會提供較為適度的計算資源和較為有限的連接性。頭部雲服務提供商提供的人臉識別服務會將處理負載轉移到雲端,但需要可靠的連接以確保最小的響應延遲,而這個要求可能會超出平台能力範圍。同樣或用戶更多關注的是,在公共網路上傳輸他們的照片進行處理,並可能將其存儲在雲端,這會引起重大的隱私問題。
使用NXP Semiconductors的i.MX RT106F處理器和相關軟體,開發人員現在可以實現離線人臉識別,直接解決了這些顧慮。
用於防欺騙離線人臉識別的硬體和軟體
作為NXP i.MX RT1060跨界微控制器 (MCU) 家族的一員,NXP i.MX RT106F系列專門用於支持將離線人臉識別輕鬆集成到智能家居設備、消費電器、安全設備和工業設備中。它基於Arm® Cortex®-M7處理器內核。這種工業級MIMXRT106FCVL5B處理器運行頻率為528兆赫茲 (MHz),而像MIMXRT106FDVL6A 和 MIMXRT106FDVL6B這樣的商用級處理器的運行頻率為600MHz。
除了支持多種外部存儲器介面外,i.MX RT106F處理器還包括1兆位元組 (Mb) 的片上隨機存取存儲器(RAM),其中512千位元組 (Kb) 配置為通用RAM,512Kb既可配置為通用RAM,也可配置為用於指令 (I-TCM) 或數據 (D-TCM) 的緊耦合存儲器 (TCM)。除了片上電源管理,這些處理器還提供了一系列廣泛的集成功能,用於圖形、安全、系統控制,以及支持消費設備、工業人機界面 (HMI) 和電機控制一般需要的模擬和數字介面(圖1)。

圖片來源:NXP
圖1:NXP Semiconductor的i.MX RT106F處理器結合了支持消費、工業和安全產品人臉識別所需的全套功能塊。
雖然與其他i.MX RT1060家族成員類似,但i.MX RT106F處理器捆綁了NXP的Oasis Lite人臉識別軟體運行時許可。Oasis Lite運行時環境旨在加快這一類處理器的推理速度,它使用在推理引擎和MiniCV(開源OpenCV計算機視覺庫的簡化版)上運行的神經網路 (NN) 推理模型執行人臉檢測、識別,甚至是有限的情感分類。該推理引擎構建在NXP NN庫和Arm Cortex微控制器系統介面標準NN (CMSIS-NN) 庫的基礎上(圖2)。

圖片來源:NXP
圖2:NXP Oasis Lite運行時庫包括一個使用MiniCV的Oasis Lite內核
和一個基於NXP和Arm神經網路庫構建的NXP推理引擎。
推理模型駐留在i.MX RT106F平台上,因此人臉檢測和識別在本地執行,不像其他解決方案依賴雲端資源來運行機器學習演算法。由於採用了離線人臉識別功能,智能產品的設計者就可以在低帶寬或不穩定互聯網連接中確保實現私密、安全的身份驗證。此外,採用這種軟硬體結合的方式,身份驗證的執行速度很快,處理器從低功耗待機狀態喚醒到完成人臉識別所需的時間不到800毫秒 (ms)。
Oasis Lite運行時與i.MX RT106F處理器一起使用,簡化了智能產品離線人臉識別的實現,當然處理器和運行時環境只是所需的系統解決方案的一部分。除了需要一套較為完整的系統組件外,有效的身份驗證解決方案還需要具備成像能力,以減輕一種稱為呈現攻擊的安全威脅。這些攻擊試圖通過使用照片來欺騙人臉識別身份驗證。對於希望在自己的產品中快速部署基於人臉的身份驗證的開發人員來說,NXP SLN-VIZNAS-IOT 開發套件和相關軟體為離線防欺騙人臉識別的評估、原型設計和開發提供了一個隨時可用的平台。
完整的人臉識別安全系統解決方案
與大多數先進的處理器一樣,i.MX RT106F處理器只需要一些額外的組件就可以提供一個有效的計算平台。NXP SLN-VIZNAS-IOT套件通過將i.MX RT106F與其他設備集成在一起來完成設計,是一個完整的硬體平台(圖3)。

圖片來源:NXP
圖3:NXP SLN-VIZNAS-IOT套件包括一個連接模塊,提供了一個運行身份驗證軟體所需的強大聯網系統平台。
該套件的連接模塊板結合了NXP MIMXRT106FDVL6A i.MX RT106F處理器、NXP A71CH安全元件和兩個連接選擇:NXP的 MKW41Z512VHT4 Kinetis KW41Z低功耗藍牙 (BLE) 片上系統 (SoC) 和 Murata Electronics的 LBEE5KL1DX-883 Wi-Fi/藍牙模塊。
為了補充處理器片上存儲器的不足,連接模塊增加了Winbond Electronics的W9825G6JB 256兆位(Mb) 同步動態RAM (SDRAM)、Integrated Silicon Solution. Inc. (ISSI) 的 IS26KL256S-DABLI00 256 Mb NOR快閃記憶體以及ISSI的IS25LP256D 256 Mb四通道串列外設介面 (SPI) 器件。
最後,該模塊增加了一個Torex Semiconductor XCL214B333DR降壓轉換器,以補充i.MX RT106F處理器的內部電源管理功能,用於連接模塊板上的其它設備。
連接模塊轉而安裝在視覺應用板上,後者則結合了Murata Electronics IRA-S210ST01被動紅外 (PIR) 感測器、運動感測器、電池充電器、音頻支持、發光二極體 (LED)、按鈕和介面連接器(圖4)。

圖片來源:NXP
圖4:在NXP SLN-VIZNAS-IOT套件中,連接模塊(左)連接到視覺應用板上,為人臉識別提供硬體基礎。
除了這個系統平台,人臉識別系統設計顯然還需要一個合適的攝像頭感測器來捕捉用戶的面部圖像。然而,如前所述,對呈現攻擊的擔憂需要額外的成像能力。
化解呈現攻擊
多年來,研究人員一直在探索不同的呈現攻擊檢測 (PAD) 方法,旨在化解諸如使用隱藏指紋或人臉圖像來欺騙基於生物識別的身份驗證系統的企圖。雖然細節遠遠超出了本文的範圍,但一般來說,PAD方法使用的是對採集的生物識別數據的質量和特徵的深度分析,以及旨在確定生物識別數據是否從活人身上採集而來的「活體」檢測方法。在許多不同方法的基礎上,深度神經網路 (DNN) 模型不僅在人臉識別中發揮了重要作用,而且在識別欺騙系統的企圖方面也發揮了重要作用。儘管如此,用於捕捉用戶面部的成像系統是可以提供額外活體檢測支持的。
對於SLN-VIZNAS-IOT套件,NXP包括了攝像頭模塊,內含一對On Semiconductor MT9M114圖像感測器。在這裡,一個攝像頭裝有紅綠藍 (RGB) 濾鏡,另一個攝像頭裝有紅外 (IR) 濾鏡。RGB攝像頭通過攝像頭介面連接到視覺應用板上,可生成正常的可見光圖像,而紅外攝像頭捕捉到的圖像對於活人來說是不同的。利用這種活體檢測方法及其內部的人臉識別能力,SLN-VIZNAS-IOT套件在尺寸約為30×40毫米 (mm) 的封裝中實現了離線、防欺騙的人臉識別能力(圖5)。

圖片來源:NXP
圖5:NXP SLN-VIZNAS-IOT硬體套件將用於活體檢測(上)和視覺應用板(下)的雙攝像頭系統與連接模塊集成在一起,提供了一個具有防欺騙能力的即插即用型離線人臉識別解決方案。
SLN-VIZNAS-IOT套件使用入門
NXP SLN-VIZNAS-IOT套件內置人臉識別模型,可隨時使用。開發人員插入USB電纜,觸摸套件上的按鈕,使用預裝的 "elock" 應用程序和配套的移動APP進行簡單的手動人臉註冊(圖6,左)。註冊後,在套件對註冊的人臉進行身份驗證時,移動APP會顯示「welcome home」消息和「unlocked」標籤(圖6,右)。

圖片來源:NXP
圖 6:NXP SLN-VIZNAS-IOT 硬體套件開箱即用,利用配套 APP 註冊人臉(左)並識別註冊的人臉(右)。
該套件的Oasis Lite人臉識別軟體可從其資料庫處理多達3000張RGB人臉模型,識別準確率高達99.6%,紅外人臉最多100張,防欺騙準確率高達96.5%。如前所述,NXP的硬體/軟體解決方案只需要不到一秒的時間,就能完成0.2米到1.0米範圍內的人臉檢測、圖像對齊、質量檢查、活體檢測和識別。事實上,該系統支持一個備用的」光「推理模型,能夠在不到0.5秒的時間內執行這個相同的序列,但支持的最大資料庫量較小,即1000個RGB人臉和50個紅外人臉。
構建定製人臉識別應用
NXP SLN-VIZNAS-IOT套件只需按原樣使用,即可讓開發人員快速對人臉識別應用進行評估、原型設計和開發。在創建定製硬體解決方案時,該套件可作為一個完整的參考設計使用,並提供完整的原理圖和詳細的物料清單 (BOM)。在軟體開發方面,程序員可以使用帶有FreeRTOS支持和配置工具的NXP MCUXpresso集成開發環境 (IDE)。對於人臉識別應用,開發人員只需使用NXP的在線MCUXpresso SDK Builder並通過NXP的VIZNAS SDK即可完成軟體開發環境配置,後者包括了NXP Oasis Lite機器學習視覺引擎(圖7)。

圖片來源:NXP
圖7:NXP提供了一個全面的軟體環境,可在FreeRTOS操作系統上執行NXP Oasis Lite運行時庫和實用程序中間件。
該軟體包中包含了操作環境的完整源代碼,以及前面提到的elock示例應用程序。NXP不針對其專有Oasis Lite引擎或模型提供源代碼。取而代之的是,開發人員可通過提供的應用編程介面 (API) 來使用Oasis Lite運行時庫。該API包括一組直觀的函數調用,以執行支持的操作。此外,開發人員可使用提供的一組C定義和結構來指定各種參數,具體包括圖像大小、內存分配、回調和系統在啟動Oasis Lite運行時環境時使用的啟用函數(詳見清單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;
清單1:開發人員可以通過修改結構的內容來修改軟體執行參數,如上所示為用於Oasis Lite運行時初始化的代碼。(代碼來源:NXP)
elock示例應用代碼展示了用於以下操作的關鍵設計模式:作為FreeRTOS下運行任務啟動Oasis,初始化環境,以及進入正常運行階段。在運行階段,運行時環境對圖像的每一幀進行操作,執行提供的與環境中定義的每個事件相關的回調函數(詳見清單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;
清單 2:Oasis Lite 運行時識別一系列事件,並在 Oasis Lite 運行時頭文件中記錄為一個枚舉集。(代碼來源:NXP)
該示例應用程序可以為開發人員提供一步步的調試消息,描述與事件句柄 (EvtHandler) 所處理的每個事件相關的結果。例如,在質量檢查完成後(OASISLT_EVT_QUALITY_CHK_COMPLETE),系統會列印出描述結果的調試信息,在人臉識別完成後 (OASISLT_EVT_REC_COMPLETE),系統會從其資料庫調出識別到的人臉的用戶 ID 和姓名,並列印出這些信息(詳見清單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;
清單3:如NXP軟體包中提供的一個示例應用程序的片段所示,一個事件處理程序句柄可處理在人臉識別序列中遇到的事件。(代碼來源:NXP)
除了支持人臉識別處理需求外,NXP SLN-VIZNAS-IOT軟體還對操作環境進行了保護。為了確保運行時的安全性,系統被設計成使用存儲在SLN-VIZNAS-IOT套件文件系統中的證書來驗證載入到系統中的每個簽名圖像的完整性和真實性。由於這個驗證序列是從存儲在只讀存儲器 (ROM) 中的可信引導程序開始的,因此這個過程為運行應用固件提供了一個信任鏈。另外,由於代碼簽名和驗證會減慢開發速度,所以在軟體設計和調試過程中,這個驗證過程被設計成繞過。事實上,SLN-VIZNAS-IOT套件預裝了已簽名圖像,但默認繞過了代碼簽名驗證。開發者可以輕鬆地設置選項,以實現用於生產的完整代碼簽名驗證。
除了運行時環境和相關的應用示例代碼,NXP還為Android移動APP提供了完整的java源代碼。其中一個名為VIZNAS FaceRec Manager的APP提供了一個簡單的界面,用於註冊人臉和管理用戶。另一個VIZNAS Companion APP則允許用戶使用現有的Wi-Fi或BLE連接為套件提供Wi-Fi憑證。
結語
人臉識別為智能產品的身份驗證訪問提供了一種有效的方法,但實現它通常需要在本地進行高性能計算,或提供始終在線的高帶寬連接進行快速響應。這種技術也一直是被欺騙的目標,存在讓人擔憂的用戶隱私問題。
如本文所述,NXP Semiconductors 的專用處理器和軟體庫提供了一種替代方法,可以在沒有雲端連接的情況下,在不到一秒的時間內準確地執行離線人臉識別,同時化解了欺騙企圖。
最後,如果你喜歡這篇文章,快分享給更多的小夥伴吧! 切記點個贊哦!