不採用雲端連接,快速實作防偽冒人臉辨識
資料提供者:DigiKey 北美編輯群
2021-02-24
智慧型手機廣泛採用人臉辨識驗證存取,此技術儘管具有高效率和簡易性,在其他領域卻未能廣泛利用。開發人員除了需面對實作可靠、低成本機器學習解決方案的技術挑戰,還必須解決使用者對於傳統人臉辨識方式的可靠性和隱私相關考量;傳統方式由於需透過雲端連接,容易受到偽冒。
本文首先探討安全驗證的難點,接著介紹 NXP Semiconductors 的硬體和軟體解決方案如何因應。然後會展示對機器學習毫無經驗的開發人員如何在智慧產品中使用此解決方案,快速實作離線式防偽冒人臉辨識。
智慧產品安全驗證的挑戰
人們對智慧產品的安全考量不斷升高,開發人員僅剩下幾種可行的選項,能可靠地為使用者提供驗證,進行快速、安全的存取。典型的方式仰賴多因素驗證,此方式為三項傳統驗證因素的組合,即「所知之事」,例如密碼;「所持之物」,例如實體鑰匙或鑰匙卡;「所具之形」,也就是生物特徵,如指紋或虹膜。採用這種方式,需強力驗證的門鎖可能需要使用者先輸入密碼,再使用鑰匙,並提供指紋才能解鎖。實際操作時,對於會頻繁使用且需輕鬆通過重新驗證的智慧型手機或其他常用裝置,一些嚴格的需求可能會對使用者造成困擾或僅是不實際。
人臉辨識可大幅簡化智慧型手機使用者的驗證過程,但並非每種裝置都具備智慧型手機的優勢。尖端智慧型手機除了有強大的處理能力,常開連接性是能夠為使用者持續且精確地提供常用服務的基本要求。
許多需要安全性驗證的產品,其底層作業平台提供的運算資源通常不高,且連接性受限。領先雲端供應商的人臉辨識服務會將負載傳送至雲端進行處理,但需要穩定的連接性,才能確保最低回應延遲要求不會超過平台能力。使用者同樣關心的是,將其影像透過公共網路傳輸及處理,並儲存在雲端,是否會有更大的隱私問題。
使用 NXP Semiconductors 的 i.MX RT106F 處理器和相關軟體,開發人員現在可以實作離線人臉辨識,直接排除這些憂慮。
防偽冒離線人臉辨識的硬體和軟體
隸屬於 NXP 的 i.MX RT1060 Crossover 微處理器 (MCU) 的 NXP i.MX RT106F 系列專為支援簡易整合離線人臉辨識至智慧家庭裝置、消費型家電、保全裝置、工業設備。此處理器採用 Arm® Cortex®-M7 處理器核心,包含 528 MHz 的工業級 MIMXRT106FCVL5B 處理器,以及 600 MHz 商用級 MIMXRT106FDVL6A 和 MIMXRT106FDVL6B 處理器。
i.MX RT106F 除了可支援多種外部記憶體介面,還搭載 1 Mbyte 晶片上隨機存取記憶體 (RAM);512 Kbyte 配置為一般用途 RAM,及 512 Kbyte 可以配置為一般用途 RAM 或緊密耦合記憶體 (TCM),用於指令 (I-TCM) 或資料 (D-TCM)。這些處理器搭配晶片上電源管理,提供豐富的整合式特點,可用於圖形、保全、系統控制,以及常用於支援消費型裝置、工業人機介面 (HMI)、馬達控制所需的數位和類比介面 (圖 1)。
圖 1:NXP Semiconductor 的 i.MX RT106F 處理器結合支援人臉辨識的完整功能模塊,可用於消費型、工業和保全產品。(圖片來源:NXP)
i.MX RT106F 處理器與其他 i.MX RT1060 系列成員相似,但隨附 NXP 的 Oasis Lite 人臉辨識軟體執行階段授權。Oasis Lite 執行階段環境會進行人臉辨識、識別,甚至於採用在推斷引擎和 MiniCV (開源 OpenCV 電腦視覺庫的精簡版本) 上作業的神經網路 (NN) 推斷模型進行有限的表情分類,加速此類處理器推斷的速度。推斷引擎建置在 NXP NN 函式庫和 Arm Cortex Microcontroller System Interface Standard NN (CMSIS-NN) 函式庫中 (圖 2)。
圖 2:NXP Oasis Lite 執行階段函式庫包含 Oasis Lite 核心,使用 MiniCV 和 NXP 推斷引擎,建置在 NXP 和 Arm 的神經網路函式庫上。(圖片來源:NXP)
推斷模型建置在 i.MX RT106F 平台,因此可以在本機處理人臉偵測和辨識,其他的解決方案則可能需仰賴雲端式資源執行機器學習演算法。此離線人臉辨識功能可讓智慧型產品設計人員即使在低頻寬或不穩定的網際網路連線之下,也能確保隱私和安全驗證。此外,此軟體和硬體組合可快速執行驗證,處理器僅需 800 ms 即可從低功率待機中喚醒並執行完整人臉辨識。
搭配 i.MX RT106F 處理器,Oasis Lite 執行階段可簡化智慧產品的離線人臉辨識實作,但處理器和執行階段環境僅是所需系統解決方案的一部份。加上更完整的系統元件,有效的驗證解決方案需要成像能力,以便減緩呈現攻擊 (presentation attack) 的威脅。這類威脅會使用相片,偽冒人臉辨識驗證。NXP 的 SLN-VIZNAS-IOT 開發套件和相關軟體可讓開發人員為產品快速部署人臉辨識驗證,提供就緒平台,可用於評估、原型設計、開發離線防偽冒人臉辨識。
人臉辨識的完整安全系統解決方案
i.MX RT106F 處理器如同其他最先進的處理器,僅需要幾個額外元件,即可提供有效的運算平台。NXP 的 SLN-VIZNAS-IOT 套件整合 i.MX RT106F 與其他元件,提供全面的硬體平台,讓設計更完整 (圖 3)。
圖 3:NXP 的 SLN-VIZNAS-IOT 套件包含連接模組,提供執行驗證軟體所需的穩健連接系統平台。(圖片來源:NXP)
此套件的連接模組板結合 NXP 的 MIMXRT106FDVL6A i.MX RT106F 處理器、NXP 的 A71CH 安全元件,以及兩個連接選項:NXP 的 MKW41Z512VHT4 Kinetis KW41Z 低功耗藍牙 (BLE) 系統單晶片 (SoC) 和 Murata Electronics 的 LBEE5KL1DX-883 Wi-Fi/藍牙模組。
連接模組添加 Winbond Electronics 的 W9825G6JB 256 Mbit 同步動態隨機存取記憶體 (SDRAM)、Integrated Silicon SolutionInc. (ISSI) 的 IS26KL256S-DABLI00 256 Mbit NOR 快閃記憶體、ISSI 的 IS25LP256D 256 Mbit 序列周邊裝置介面 (SPI),可支援處理器的晶片上記憶體。
最後,此模組添加 Torex Semiconductor 的 XCL214B333DR 降壓轉換器,支援 i.MX RT106F 處理器,針對連接模組板的額外元件提供內部電源管理能力。
此連接模組接著安裝在視覺應用板上,結合 Murata Electronics 的 IRA-S210ST01 被動紅外線 (PIR) 感測器、動作感測器、電池充電器、音訊支援、發光二極體 (LED)、按鈕、介面連接器 (圖 4)。
圖 4:NXP 的 SLN-VIZNAS-IOT 套件中,連接模組 (左) 附於視覺應用板上,作為人臉辨識的硬體基礎。(圖片來源:NXP)
搭配此系統平台,人臉辨識系統設計明顯需要一個適合的相機感測器,以擷取使用者的臉部影像。如上所述,呈現攻擊需要額外的成像能力。
減少成像攻擊
研究人員多年來探索出各種成像攻擊偵測 (PAD) 方式,用於減緩使用潛伏指紋或臉部影像欺騙生物特徵驗證系統的行為。本文將不討論這些細節;成像攻擊偵測方式一般針對生物特徵擷取資訊的品質和特性進行深度分析,以及採用「活體」偵測方式,判定此生物特徵資料是否擷取自生命體。這些不同方式之中,深度神經網路 (DNN) 模型舉足輕重,不僅針對人臉辨識,也在於識別對系統的詐騙意圖。除此之外,擷取使用者臉部影像的成像系統可提供額外的活體偵測支援。
SLN-VIZNAS-IOT 套件中,NXP 納入了攝影機模組,包含一對 ON Semiconductor 的 MT9M114 影像感測器。其中一台攝影機配有三原色 (RGB) 過濾器,另一台則有紅外線 (IR) 過濾器。兩者透過攝影機介面連接至視覺應用板,RGB 攝影機會產生正常可見光影像,IR 攝影機擷取的影像,對於有生命和無生命的人員會有所差異。SLN-VIZNAS-IOT 使用此活體偵測方式搭配內建人臉辨識能力,提供離線、防偽冒的人臉辨識能力。其尺寸約為 30 x 40 mm (圖 5)。
圖 5:NXP 的 SLN-VIZNAS-IOT 硬體套件整合雙攝影機系統用於活體偵測 (上)、一片視覺應用板 (下),以及連接模組,為離線人臉辨識提供具有防偽冒能力的即用型解決方案。(圖片來源:NXP)
開始使用 SLN-VIZNAS-IOT 套件
NXP 的 SLN-VIZNAS-IOT 套件隨附就緒使用的內建人臉辨識模型。開發人員插入 USB 纜線及按下套件上的按鈕,就可使用預載的「電子鎖」應用和相應的行動應用程式 (圖 6 左),手動執行簡單的人臉註冊。註冊後,套件驗證通過已註冊人臉影像時,行動應用程式會顯示「歡迎回家 (welcome home)」訊息和「解鎖」圖示 (圖 6 右)。
圖 6:NXP 的 SLN-VIZNAS-IOT 硬體套件為開箱即用,運用搭配的應用程式註冊人臉 (左),並可進行辨識 (右)。(圖片來源:NXP)
此套件的 Oasis Lite 人臉辨識軟體從其多達 3000 個 RGB 人臉 (99.6% 的辨識準確度),以及多達 100 個 IR 人臉 (96.5% 的防偽冒準確度) 函式庫處理模型。如前所述,NXP 的硬體/軟體解決方案可在 1 秒內針對 0.2 m 至 1.0 m 範圍執行人臉偵測、影像比對、品質檢查、活體偵測和辨識。事實上,此系統支援替代「光線」推斷模型,可在 0.5 s 內執行同樣的程序,但支援的最大函式庫大小較小,為 1000 個 RGB 人臉和 50 個 IR 人臉。
建立自訂人臉辨識應用
開發人員直接使用 NXP 的 SLN-VIZNAS-IOT 套件,能快速評估、原型設計和開發人臉辨識應用。打造自訂硬體解決方案時,此套件可用作完整參考設計,提供全面的機制和詳細的物料清單 (BOM)。編程人員在軟體開發上可以使用 NXP 的 MCUXpresso 整合式開發環境 (IDE) 搭配 FreeRTOS 支援和配置工具。針對此應用,開發人員僅需使用 NXP 的線上 MCUXpresso SDK Builder 配置其軟體開發環境,以及 NXP 的 VIZNAS SDK,其中包含 NXP Oasis Lite 機器學習視覺引擎 (圖 7)。
圖 7:NPX 提供全面的軟體環境,以執行 NXP Oasis Lite 執行階段函式庫和 FreeRTOS 作業系統的公用程式中介軟體。(圖片來源:NXP)
此軟體封包涵蓋完整的作業環境原始碼,以及前述的電子鎖樣本應用。NXP 不提供自行研發 Oasis Lite 引擎或模型的原始碼。開發人員將透過應用程式開發介面 (API) 使用 Oasis Lite 執行階段函式庫,此函式庫包含直覺式功能呼叫,執行支援作業。此外,開發人員使用所提供的一組 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)
此電子鎖樣本應用程式碼展示在 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 行動應用程式完整的 java 原始碼。VIZNAS FaceRec Manager 行動應用程式提供簡單的介面,用於註冊人臉和管理使用者。另一個應用程式 VIZNAS Companion 能讓使用者使用既有 Wi-Fi 或 BLE 連接,佈建此套件的 Wi-Fi 憑證。
結論
人臉辨識為智慧產品提供有效的驗證存取方式,但進行實作通常需要本機具有高效能運算或常開式高頻寬連接性,方能達到快速響應。人臉辨識一直是詐騙的目標,並且需考量到使用者隱私。
如本文所述,NXP Semiconductors 的專用處理器和軟體函式庫提供替代方法,能在 1 秒內準確執行離線人臉辨識,無須連至雲端,同時能夠減緩偽冒發生。

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。