NXP AN14263 在 Framewor 上實作 LVGL GUI 人臉識別
產品資訊
規格
- 產品名稱: LVGL GUI 人臉辨識框架
- 文件修訂: 1 年 19 月 2024 日至 XNUMX 日
- 關鍵字: 臉部辨識、LVGL GUI、框架
產品使用說明
- 超過view
該產品在一個框架上啟用用於人臉辨識的AI&ML視覺演算法模型,透過簡單的LVGL GUI ex實現人臉辨識功能ampSLN-TLHMI-IOT 板上的檔案。 - 框架結束view
該解決方案軟體是圍繞框架架構設計的,其中包括負責管理設備的設備管理器、抽象底層細節的 HAL 設備以及用於不同設備之間通信的事件。 - 特徵
該產品可透過相機實現人臉辨識功能view GUI 螢幕上有觸發人臉註冊、辨識和刪除的按鈕。註冊的人臉資料透過a儲存在Flash上 file 系統。 - 應用程式筆記內容
該應用說明介紹了帶有相機預置功能的 LVGL GUI 螢幕view 以及與臉部相關的操作的按鈕。它幫助開發人員了解框架以及如何使用提供的ex來實現人臉識別amp勒。
超過view
恩智浦推出了一款名為SLN-TLHMI-IOT的解決方案開發套件,專注於智慧型HMI應用。它支援在 NXP i.MX RT117H MCU 上實現的智慧型 HMI,並具有 ML 視覺、語音和圖形 UI。解決方案軟體基於SDK建構在一個稱為框架的設計上,支援視覺和語音功能的靈活設計和客製化。為了幫助使用者更好地使用軟體平台,提供了一些基礎文檔,例如ample,軟體開髮使用者指南。該指南介紹了應用程式的基本軟體設計和架構,涵蓋了解決方案的所有元件,包括幫助開發人員更輕鬆、有效率地使用 SLN-TLHMI-IOT 實作其應用程式的框架。
了解更多解決方案及相關文檔,請訪問 web 基於 i.MX RT117H 的 NXP EdgeReady 智慧型 HMI 解決方案頁面,具有 ML 視覺、語音和圖形 UI。然而,對於開發者來說,參考這些基本指南來實現他們的智慧型HMI應用程式仍然不是那麼容易。計劃推出一系列應用筆記來幫助逐步研究該框架的開發。本應用筆記基於實作 LVGL GUI Camera Preview 框架(文檔 AN14147)。本應用筆記介紹如何在框架上啟用人臉辨識的AI&ML視覺演算法模型,透過相機預置實現人臉辨識功能。view 在 GUI 螢幕上使用簡單的 LVGL GUI exampSLN-TLHMI-IOT 板上的檔案。在應用說明中,前ample 展示了帶有相機預置的 LVGL GUI 螢幕view 以及一些觸發人臉註冊、識別和刪除的按鈕。註冊的人臉資料透過一點點儲存在Flash中 file 系統。
概括地說,該應用筆記包含以下內容:
- 在框架上啟用人臉辨識功能。
- 透過在框架上添加人臉資料庫支持 file 快閃記憶體上的系統。
- 實作 LVGL GUI 應用程式。透過以上介紹,本文檔幫助開發者:
- 更深入了解框架和智慧型HMI解決方案軟體。
- 使用 LVGL GUI 應用程式在框架上開發 AI 和 ML 人臉辨識。
框架結束view
該解決方案軟體主要是圍繞框架架構的使用而設計的,該框架架構由幾個不同的部分組成:
- 裝置管理員-核心部分
- 硬體抽象層 (HAL) 設備
- 訊息/事件
如圖1所示,以上view 此框架的機制是:
設備管理器負責管理系統使用的設備。每種裝置類型(輸入、輸出等)都有自己的特定於類型的裝置管理員。裝置管理員在裝置註冊後啟動,在初始化和啟動註冊裝置後,它等待並檢查訊息以將資料傳輸到裝置和其他管理員。 HAL 裝置是在較低層級的驅動程式程式碼之上編寫的,透過抽象化許多底層細節來幫助提高程式碼的可理解性。
事件是透過其管理器在不同裝置之間傳遞訊息的一種方式。當事件被觸發時,首先接收到該事件的裝置將該事件傳送給其管理器,然後依序通知指定接收該事件的其他管理器。
此框架的架構設計圍繞著三個主要目標:
- 易於使用
- 靈活性/便攜性
- 表現
該框架的設計目標是加快視覺和其他機器學習應用程式的上市時間。為了確保快速上市,軟體本身易於理解和修改至關重要。牢記這一目標,框架的架構很容易修改,不受限制,並且不會以效能為代價。
有關該框架的更多詳細信息,請參閱智慧型 HMI 軟體開髮使用者指南(文件 MCU-SMHMI-SDUG)。
輕巧且多功能的圖形庫 (LVGL)
LVGL(輕型多功能圖形庫)是一個免費的開源圖形庫,提供創建嵌入式 GUI 所需的一切,具有易於使用的圖形元素、美觀的視覺效果和低內存佔用。
圖形用戶界面嚮導
GUI Guider 是 NXP 推出的一款使用者友善的圖形使用者介面開發工具,可利用開源 LVGL 圖形庫快速開發高品質顯示器。 GUI Guider 的拖放編輯器可讓您輕鬆使用 LVGL 的許多功能(例如小部件、動畫和樣式)來建立 GUI,只需最少的編碼或根本無需編碼。
只需單擊按鈕,您就可以在模擬環境中運行應用程式或將其匯出到目標項目。 GUI Guider 產生的程式碼可以輕鬆添加到您的專案中,從而加速開發過程,並允許您將嵌入式使用者介面無縫添加到您的應用程式中。 GUI Guider 可免費與 NXP 的通用和跨界 MCU 搭配使用,並包含適用於多個支援平台的內建專案範本。要了解有關 GUI Guider 上的 LVGL 和 GUI 開發的更多信息,請查看 Light and Versatile Graphics Library 和 GUI Guider。
開發環境
一、準備並建構實施擴展的軟硬體環境ample關於框架。
硬件環境
硬體環境建置用於驗證examp樂:
- 基於NXP i.MX RT117H的智慧型HMI開發套件(SLN_TLHMI_IOT套件)
- SEGGER J-Link 配備 9 針 Cortex-M 適配器和 V7.84a 或更新版本的驅動程式
軟件環境
軟體環境是為開發ex而建造的amp樂:
- MCUXpresso IDE V11.7.0
- GUI引導器V1.6.1-GA
- lvgl_gui_camera_preview_cm7 – 前amp第二個應用筆記的文件代碼作為開發的基礎軟體。詳細資訊請參見 https://mcuxpresso.nxp.com/appcodehub.
- RT1170 SDK V2.13.0 – 作為開發的程式碼資源。
- SLN-TLHMI-IOT軟體V1.1.2 – 智慧型HMI原始碼發佈在NXP GitHub儲存庫上,作為開發的程式碼資源。有關詳細信息,請參閱:GitHub – NXP/mcu-smhmi v1.1.2
軟體環境的取得與設定請參閱:SLN-TLHMI-IOT入門。
框架上的視覺架構
此框架上的視覺架構如圖2所示。
- 接收到輸出UI HAL的相關事件後,透過AI&ML視覺演算法模型進行人臉註冊與辨識。將演算法模型的推理結果通知給輸出UI HAL。
- 基於小數據存取(新增、刪除…)人臉特徵資料庫 file 系統在接收到來自輸出 UI HAL 的相關事件後,呼叫 FaceDB HAL 的 API。
- 進行人臉註冊和辨識時,請向相機HAL要求相機視訊畫面。
在框架上實現人臉識別
LVGL GUI人臉辨識擴展amp樂(前ample稍後提供)上的框架是基於ex實現的amp實作 LVGL GUI Camera Pre 的檔案程式碼view 框架(文檔 AN14147)。
用於演示前場中的人臉識別amp在該文件中,GUI 應用程式的基本功能(請參閱圖 3 中的主畫面)設計如下:
- 當您按一下「註冊」或「識別」按鈕時,GUI 應用程式會觸發輸出 UI HAL 的人臉註冊或識別事件。並且輸出UI HAL通知人臉註冊成功後將用戶加入視覺演算法HAL的事件。
- 當識別到使用者的臉部後點擊「刪除使用者」按鈕時,GUI 應用程式會觸發刪除使用者的事件到輸出 UI HAL。
- 當單擊按鈕和圖像之外的螢幕時,GUI 應用程式會觸發停止 oasis 演算法運行到輸出 UI HAL 的事件。
準備實施ex的軟體包amp勒。
- 複製基礎軟體lvgl_gui_camera_preview_cm7。更改項目名稱和主目錄 file命名為lvgl_gui_face_rec_cm7。
- 由於框架核心的原始碼從1.1.2版本開始在GitHub上公開,因此需要在軟體中更新框架。
- 將框架資料夾替換為來自 GitHub 的 V1.1.2 副本,除了 fileinc\ 下的 fwk_log.h 和 fwk_common.h,因為它們已針對應用程式筆記系列進行了修改。操作如圖4所示:
- 刪除libs群組下的framework_cm7資料夾,並刪除Project > Properties > C/C++ Build > settings > Tool Settings > MCU C++ Linker > Libraries中配置的庫framework_cm7及其搜尋路徑,因為提供了核心的原始程式碼。
在框架上啟用人臉辨識功能
人臉辨識功能建立在以靜態函式庫形式提供的 ML 視覺演算法模型之上——NXP 的 oasis lite 執行階段。該庫是一個微型、高效、客製化、優化的AI庫。模型包括人臉偵測、人臉辨識、玻璃偵測和活體偵測。主要提供API OASISLT_run_extend()來運行人臉識別管道,同時透過事件回調將結果更新給呼叫者,並在指定來源幀資訊、回調和記憶體後透過人臉資料庫回呼在資料庫中新增/更新/刪除人臉函式庫透過在初始化時呼叫另一個API OASISLT_init() 來使用池。 API的呼叫和回呼函數在框架的視覺演算法HAL中實作。
新增視覺演算法模型庫
- 複製包含庫和相關標頭的資料夾 oasis file 從 smart HMI\coffee_machine\cm7\libs\ 進入 ex 的資料夾 libsamp勒西南。
- 新增header的搜尋路徑 file 在專案 > 屬性 > C/C++ 建置 > 設定 > 工具設定 > MCU C 編譯器 > 包含和 MCU C++ 編譯器 > 包含:“${workspace_loc:/${ProjName}/libs/oasis/include}”
- 在 Project > Properties > C/C++ Build > settings > MCU C++ Linker > Libraries 中新增庫及其搜尋路徑:liboasis_lite2D_DEFAULT_117f_ae.a “${workspace_loc:/${ProjName}/libs/oasis}” 以及巨集定義在“項目”>“屬性”>“C/C++ 建置”>“設定”>“工具設定”>“MCU C 編譯器”>“預處理器”和“MCU C++ 編譯器”>“預處理器”中啟用該功能:SMART_TLHMI_2D
啟用視覺演算法 HAL
視覺演算法HAL驅動視覺演算法模型工作,並在收到來自UI輸出HAL的事件後將結果回應到UI輸出HAL。
要啟用它,請克隆現有的類似 HAL 驅動程式 file 其中實現了以下功能:
- 實現人臉資料庫操作和事件處理的回調。
- 透過呼叫 oasis 庫的 API 來驅動視覺演算法工作。
- 存取人臉資料庫和應用程式資料庫(ex中不需要)ample)。
- 從輸出 UI HAL 接收事件並將結果傳送到輸出 UI HAL。
為前實施 HAL 的主要工作amp是:
- 克隆現有的類似HAL驅動程式 file 並更改相關名稱。
- 刪除與app資料操作相關的代碼。
- 根據 ex 更新用於處理來自輸出 UI HAL 的事件的定義和函數amp設計。
- 新增oasis初始化所需的配置。
詳細步驟如下:
- 克隆 hal_vision_algo_oasis_coffeemachine.c。改變 file命名為 hal_vision_algo_oasis_guifacerec.c。並將所有字串 CoffeeMachine 替換為 GUIFaceRec file.
- 刪除包含與應用程式資料庫相關的字串coffeedb(不區分大小寫)的程式碼,例如ample,#include hal_sln_cofffeedb.h。
- 修改函數 HAL_VisionAlgoDev_OasisGUIFaceRec_InputNotify() 以處理來自輸出 UI HAL 的事件。
- 將事件定義 kEventFaceRecId_RegisterCoffeeSelection 變更為 kEventFaceRecId_RegisterUserFace,並將結構字串 regCoffeeSelection 變更為 regGUIFaceRec,以便活動處理將新的人臉特徵資料新增至資料庫。
- 展示人臉辨識動作的標準流程amp文件中,使用狀態定義修改 kEventFaceRecID_OasisSetState 情況下的處理:
- kOASISLiteState
- 註冊 kOASISLiteState
- 識別 kOASISLiteState
- 已停止
- 新增和修改上一步中提到的事件的定義。
- 複製標題 file smart_tlhmi_event_descriptor.h 從 smart HMI\coffee_machine \cm7\source\event_handlers\ 進入 ex 的資料夾來源amp勒西南。更新 file 如下:
- 將枚舉型別_event_smart_tlhmi_id中的事件定義kEventFaceRecId_RegisterCoffeeSelection改為kEventFaceRecId_RegisterUserFace,並將結構體_event_smart_tlhmi中的結構字串regCoffeeSelection改為regGUIFaceRec。因此,將 regCoffeeSelection 的結構 register_coffee_selection_event_t 改為 register_gui_facerec_event_t。
- 刪除用於咖啡機應用程式的其他內容,例如ample,關於語音的程式碼行:#include“hal_event_descriptor_voice.h”。
- 將類型 kOASISLiteState_Stopped 和 kOASISLiteState_Running 新增至專案中 Framework>hal>vision 下 hal_vision_algo.h 中的枚舉類型 oasis_lite_state_t 中,如下所示:
typedef 列舉_oasis_lite_state {- kOASISLiteState
- 正在運行,kOASISLiteState
- 已停止,kOASISLiteState
- 認出,
- kOASISLiteState
- 註冊,kOASISLiteState
- 註銷,kOASISLiteState
- 遠端註冊、kOASISLiteState
- 數數
- 使用上面更新的struct oasis_lite_state_t來細化專案中framework>hal>vision下hal_event_descriptor_face_rec.h中的struct oasis_state_event_t,如下所示: oasis_state_event_t;
- 將所有 kEventInfo_Remote 更改為 kEventInfo_Local,以便將事件從視覺演算法 HAL 發送到在同一核心上運行的其他 HAL,因為在 ex 中使用單核而不是雙核amp勒。
- 在 OASISLT_init() 中加入並修改以下 oasis 初始化配置:
- 在board_define.h中新增視訊框架的巨集定義和記憶體部分:#define OASIS_RGB_FRAME_WIDTH 800
- #定義OASIS_RGB_FRAME_HEIGHT 600
- #define OASIS_RGB_FRAME_SRC_FORMAT kPixelFormat_YUV1P444_RGB
- #define OASIS_RGB_FRAME_BYTE_PER_PIXEL 3
- #define AT_FB_SHMEM_SECTION_ALIGN(var,alignbytes)\
- __attribute__((section(“.bss.$fb_sh_mem,\”aw\”,%nobits @”))) var
- __attribute__((對齊(alignbytes)))
- 在 Project > Properties > C/C++ Build > MCU Settings 上將記憶體分配配置為上述記憶體部分 fb_sh_mem,如圖 5 所示:
- 在lvgl_gui_face_rec_cm7.cpp中宣告全域變數g_DTCOPBuf:AT_NONCACHEABLE_SECTION_ALIGN_DTC(uint8_t g_DTCOPBuf[DTC_OPTIMIZE_BUFFER_SIZE], 4);
- 繼續加入上面變數中使用的定義:
- 在board_define.h中定義上述部分:
- #define AT_NONCACHEABLE_SECTION_ALIGN_DTC(var,alignbytes)\
- attribute__((section(“.bss.$SRAM_DTC_cm7,\”aw\”,%nobits @”))) var
- 屬性__((對齊(alignbytes)))
- 包含標題 file hal_vision_algo.h 包含lvgl_gui_face_rec_cm7.cpp 中app_config.h 中的巨集定義DTC_OPTIMIZE_BUFFER_SIZE。
- 在board_define.h中新增視訊框架的巨集定義和記憶體部分:#define OASIS_RGB_FRAME_WIDTH 800
- 將變數 s_debugOption 設為 true 以顯示人臉辨識的進度狀態。
- 新增header的搜尋路徑 file專案 > 屬性 > C/C++ 建置 > 設定 > 工具設定 > MCU C 編譯器 > 包含和 MCU C++ 編譯器 > 包含:“${workspace_loc:/${ProjName}/framework/hal/vision}”
- 在 board_define.h 中加入以下定義以啟用視覺演算法 HAL:#define ENABLE_VISIONALGO_DEV_Oasis_GUIFaceRec
啟用輸出 UI HAL
輸出 UI HAL 將事件通知給視覺演算法 HAL,並回應視覺演算法 HAL 的推理結果。對於 GUI 應用程序,事件通常由應用程式觸發,結果顯示在應用程式上。
要啟用它,請克隆現有的類似 HAL 驅動程式 file 通常實現以下功能:
- 通知人臉辨識和資料庫存取的事件。
- 實作 GUI 應用程式的回調以觸發事件。
- 處理視覺演算法模組的推理結果。
- 透過計時器和臉部引導矩形控制的進度條在 UI 上顯示事件處理的過程和結果。
為前實施 HAL 的主要工作amp本文檔中使用的文件是:
- 克隆現有的類似HAL驅動程式 file 並更改相關名稱。
- 刪除與應用程式相關的程式碼。
- 根據前例更新事件通知和結果回應的功能amp設計。
- 新增 GUI 應用程式的回調以觸發事件。
詳細步驟如下:
- 克隆 hal_output_ui_coffee_machine.c。改變 file命名為hal_output_ui_guifacerec.c。
- 將中的所有字串 CoffeeMachine 替換為 GUIFaceRec file.
- 刪除與應用程式-咖啡機相關的代碼。
- 刪除函數WakeUp()和_StandBy()以及相關程式碼(可以在字串wake_up和standby中搜尋它們)。
- 刪除預view HAL_OutputDev_UiGUIFaceRec_Input Notify()中處理mode事件相關程式碼。
- 刪除函數 UI_xxx_Callback() 以及包含與咖啡機 GUI 相關的字串 gui_ 和 screen 的程式碼,除了預先定義的 gui_set_virtual_face() 之外view 模式功能。
- 刪除與咖啡機應用程式相關的變數 s_IsWaitingAnotherSelection 和 s_IsWaitingRegisterSelection 涉及的所有程式碼。
- 刪除與語音、音訊和語言相關的代碼。對於前amp樂:
- #include“hal_voice_algo_asr_local.h”,
- #include“hal_event_descriptor_voice.h”
- 對於各種事件通知,請在刪除之前參考函數 _StopFaceRec()、_RegisterCoffeeSelection() 和 DeregisterCoffeeSelection() 實作新函數 _OutputManagerNotify()、_SetFaceRec()、_RegisterGUIFaceRec() 和 DeregisterGUIFaceRec()。
- _OutputManagerNotify() 實作基本事件輸出函數,將事件傳送到視覺演算法 HAL。以下函數呼叫它來傳送自己的事件。
- _SetFaceRec() 傳送事件 kEventFaceRecID_OasisSetState 來觸發視覺演算法進行臉部註冊、辨識並停止演算法。
- 註冊成功後,_RegisterGUIFaceRec() 會傳送 smart_tlhmi_event_descriptor.h 中定義的事件 kEventFaceRecId_RegisterGUIFaceRec,將人臉特徵資料新增至資料庫。
- DeregisterGUIFaceRec()在人臉辨識通過時,發送事件kEventFaceRecID_DelUser從資料庫中刪除人臉特徵資料。
- 更新程式碼以採取相應的操作,包括透過從 LVGL GUI 應用程式呼叫 API 來刷新 GUI,以獲取函數 _InferComplete_Vision() 中人臉註冊和識別的推理結果。amp樂的設計。對於前ample,當人臉註冊成功後,
- 透過呼叫 _FaceRecProcess_Stop() 停止顯示進度;
- 透過呼叫 _SetFaceRec(kOASISLiteState_Stopped) 停止人臉註冊;
- 在 GUI 上顯示成功結果: gui_show_face_rec_result(kFaceRecResult_OK, s_UserId);
- 將人臉資料註冊到資料庫:_RegisterUserFace(s_UserId);
- 新增UI回呼函數來處理事件:preview、人臉註冊、識別和刪除用戶從GUI觸發。對於前ample,人臉註冊回呼: void UI_Registration_Callback(){ _SetFaceRec(kOASISLiteState_Registration); _FaceRecProcess_Start(); }
- 並且新增函數 _FaceRecProcess_Start() 和 _FaceRecProcess_Stop() 以顯示不同事件和結果的進度和狀態。
- 更新定時器 ISR 回呼函數 _SessionTimer_Callback() 以處理逾時情況,方法是呼叫: gui_show_face_rec_result(kFaceRecResult_TimeOut, s_UserId);
- 在 board_define.h 中新增以下定義以啟用 UI 輸出 HAL: #define ENABLE_OUTPUT_DEV_UiGUIFaceRec
注意:
為了更好地呈現人臉辨識功能,在輸出 UI HAL 中保留顯示人臉辨識過程和結果的功能。功能描述如下
- 人臉引導矩形顯示藍色,進度條顯示開始人臉註冊或辨識的進度。
- 人臉註冊成功後,人臉引導矩形顯示紅色。
- 人臉辨識成功後,人臉引導矩形顯示綠色。
- 當定時器超時後操作不成功時,臉部引導矩形保持藍色,進度條顯示完整進度。此時,停止人臉註冊或辨識。
進度條和臉部引導矩形顯示為內建於資源二進位檔案中的圖標 file 被編程到Flash中。指向 SDRAM 上圖示資料的指標在輸出 UI HAL 中的輸出 UI HAL 裝置初始化時呼叫的函數 LoadIcons(APP_ICONS_BASE) 中設定。它必須實現該功能的圖標支援。
實現圖標支持
- 將圖示與 LVGL GUI 應用程式中使用的圖像結合以建立資源:
- 克隆四個圖示標題 file智慧型 HMI 中的 process_bar_240x14.h、virtual_face_blue_420x426.h、virtual_face_green_420x426.h 和 virtual_face_red_420x426.h
\coffee machine\resource\icons\ 到ex資源資料夾下新資料夾iconsamp勒西南。 - 新增四個圖示的搜尋路徑 files 在camera_pre中view_資源.txt file 在資源資料夾中,例如ample:圖示../resource/icons/process_bar_240x14.h
- 執行camera_preview_resource_build.bat 建立映像和圖示資源以產生 bin file 相機預置view_resource.bin 和資訊 file resources_information_table.txt(請參閱圖 6)。
- 克隆四個圖示標題 file智慧型 HMI 中的 process_bar_240x14.h、virtual_face_blue_420x426.h、virtual_face_green_420x426.h 和 virtual_face_red_420x426.h
- 在app_config.h中定義SDRAM上的起始位址和圖示的大小。該位址從 GUI 應用程式圖像旁邊開始。尺寸是在資訊中產生的 file。 #define APP_ICONS_BASE (APP_RES_SHMEM_BASE + APP_LVGL_IMGS_SIZE) #define APP_ICONS_SIZE 0x107c40
- 透過在 app_config.h 中重新定義名為 res_sh_mem 的記憶體部分的分配大小,將其更新為 0x200000: #define RES_SHMEM_TOTAL_SIZE 0x200000 以及 Project > Properties > C/C++ Build > MCU settings 中的對應設定。
- 在main中的函式APP_LoadResource()中將圖示大小加入到從Flash載入到SDRAM的資源總大小中 file lvgl_gui_face_rec_cm7.cpp: memcpy((void *)APP_LVGL_IMGS_BASE, pLvglImages, APP_LVGL_IMGS_SIZE + APP_ICONS_SIZE);
注意:要完成人臉辨識功能,需要LVGL GUI應用程式支援。輸出 UI HAL 中的 UI 回調函數由 LVGL GUI 應用程式調用,用於處理來自 UI 螢幕的事件。另一方面,輸出 UI HAL 呼叫 LVGL GUI 應用程式中的 API 來更新 UI 以顯示結果和狀態。 LVGL GUI應用程式的開發相對獨立,在4.3節中介紹。
4.1.5 啟動人臉辨識的HAL設備與管理器
啟用的視覺演算法 HAL 和 UI 輸出 HAL 及其管理器在主程式中啟動 file
lvgl_gui_face_rec_cm7.cpp在框架上開發後的轉換如下:
- 包含標題 file 透過新增程式碼行與兩個 HAL 管理員相關:
- #include“fwk_output_manager.h”
- #include“fwk_vision_algo_manager.h”
- 聲明 HAL 設備:
- HAL_VALGO_DEV_DECLARE(OasisGUIFaceRec);
- HAL_OUTPUT_DEV_DECLARE(UiGUIFaceRec);
- 註冊 HAL 設備:
- HAL_VALGO_DEV_REGISTER(OasisGUIFaceRec, ret);
- HAL_OUTPUT_DEV_REGISTER(UiGUIFaceRec, ret);
- 初始化管理器:
- FWK_MANAGER_INIT(VisionAlgoManager, ret);
- FWK_MANAGER_INIT(OutputManager, ret);
- 啟動管理器:
- FWK_MANAGER_START(VisionAlgoManager, VISION_ALGO_MANAGER_TASK_PRIORITY, ret);
- FWK_MANAGER_START(OutputManager, OUTPUT_MANAGER_TASK_PRIORITY, ret);
- 定義經理任務的優先順序:
- #define VISION_ALGO_MANAGER_TASK_PRIORITY 3
- #define OUTPUT_MANAGER_TASK_PRIORITY 1
框架添加人臉資料庫支持
透過一點點存取儲存在Flash上的人臉資料庫中註冊的人臉特徵數據 file 系統。新增人臉資料庫支援的步驟如下所述。
新增閃存驅動程式
複製Flash介面FlexSPI驅動程式 filefsl_flexspi.c 和 fsl_flexspi.h,以及資料加密驅動程式 files fsl_caam.c 和 fsl_caam.h 從路徑 SDK_2_13_0_MIMXRT1170-EVK\devices \MIMRX1176\drivers\ 到 ex 的 drivers 資料夾amp勒西南。
新增板級支援
- 在board.h中加入用於板載Flash設備的FlexSPI的定義:
- #define BOARD_FLEXSPI FLEXSPI1
- #define BOARD_FLEXSPI_CLOCK kCLOCK_FlexSpi1
- #define BOARD_FLEXSPI_AMBA_BASE FlexSPI1_AMBA_BASE
- 複製運算子和配置 file將 Flash 裝置的 flexspi_nor_flash_ops.c、flexspi_nor_flash_ops.h、sln_flash_config.c、sln_flash_config_w25q256jvs.h、sln_flash_ops.h 放在 smart Hboard\coffee_machine\cmfee_machine\cm\amp勒西南。
- 右鍵單擊“C/C++ 建置 > 設定”中取消選取“從建置中排除資源” files 的名稱並打開屬性以使它們能夠內建在專案中。
- 更改包含的標題 file將 sln_flash_config.c 和 flexspi_nor_flash_ops.h 中的 sln_flash_config.h 命名為 sln_flash_config_w25q256jvs.h。
- 設定FlexSPI1時脈源 file Clock_config.c 指的是咖啡機應用程式。
添加適配器和中層支持
- 複製 filesln_flash.c、sln_flash.h、sln_encrypt.c 和 sln_encrypt.h 作為適配器驅動程式 file system和app從smart HMI\coffee_machine\cm7\source\路徑下到ex的資料夾source下amp勒。更新新的 files:
- 取消選取「從建置中排除資源」以進行建置。
- 更改所有包含的標頭 file 將 sln_flash_config.h 命名為 sln_flash_config_w25q256jvs.h。
- 複製資料夾 file包含適用於小型應用程式的 API 的系統 file系統和HAL驅動程式從智慧型HMI\coffee_machine\cm7\source\到examp勒西南。並更新新資料夾:
- 取消選取「從建置中排除資源」以進行建置。
- 在專案設定中加入它的包含路徑:"${workspace_loc:/${ProjName}/file系統}”
- 更改包含的標題 file 將 sln_flash_config.h 命名為 sln_flash_config_w25q256jvs.h,將 fica_definition.h 命名為 app_config.h file sln_flash_littlefs.h。
- 複製包含中間件的資料夾littlefs – Little file系統從路徑 SDK_2_13_0_ MIMXRT1170-EVK\middleware\ 到 examp勒西南。並更新新資料夾:
- 取消選取「從建置中排除資源」以進行建置。
- 在專案設定中新增它的包含路徑:“${workspace_loc:/${ProjName}/littlefs}”
新增 HAL 驅動程式
- 有兩個 HAL 設備 – file 系統和人臉資料庫HAL支援資料庫存取功能,並且它們已經在框架中實現,沒有任何改變。透過在 board_define.h 中新增以下定義來啟用它們:
- #define ENABLE_FLASH_DEV_Littlefs
- #定義ENABLE_FACEDB
並將人臉資料庫名稱更改為example: #define OASIS_FACE_DB_DIR “oasis_gui_face_rec”
添加應用程式級支援
- 更新主要內容 file lvgl_gui_face_rec_cm7.cpp:
- 包含標題 file 與快閃記憶體相關 file 系統 HAL 管理器,新增程式碼行:#include “fwk_flash.h”
- 申報並登記 file 系統HAL設備:
- HAL_FLASH_DEV_DECLARE(Littlefs);
- HAL_FLASH_DEV_REGISTER(Littlefs, ret);
筆記: 這 file 在函數 APP_InitFramework() 中初始化所有裝置管理員之前,必須註冊系統 HAL 裝置。
- 呼叫APP_BoardInit()中的函數BOARD_ConfigMPU()來配置MPU。
- 設定 file Flash 中的系統分配 file app_config.h中透過定義使用的巨集定義 file sln_flash_littlefs.h:
- #定義FICA_IMG_FILE_SYS_ADDR(FLASH_IMG_SIZE + RES_SHMEM_TOTAL_SIZE)
- #定義FICA_FILE_SYS_大小(0x280000)
配置
一些與Flash相關的程式碼在SRAM ITC區域中執行以獲得足夠的效能。將包含連結器配置的資料夾 linkscripts 從路徑 smart HMI\coffee_machine\cm7\ 複製到 examp勒西南。
實作 LVGL GUI 應用程式
基於框架的LVGL GUI應用程式的開發呼叫輸出UI HAL的API,並提供輸出UI HAL的API(輸出UI HAL的實作請參考4.1.3節)。
但是,LVGL GUI 應用程式的詳細實作取決於應用程式的要求和設計。本例中的 GUI 應用程式amp文件的設計如第 4 節開頭所述。
以下是實作介紹:
- 客製化的程式碼在GUI Guider給予的custom.c和custom.h中實現,作為GUI Guider專案和嵌入式系統專案之間的介面。
- 在custom.c中新增函數gui_xxx(),實現以下功能:
- 用於輸出 UI HAL 和 GUI 應用程式來更新 UI。
- GUI 應用程式透過從輸出 UI HAL 呼叫 UI 回調函數來觸發事件。
對於前amp在檔案中,新函數 gui_event_face_rec_action() 呼叫 UI 回呼函數來處理點擊相關按鈕時從 GUI 應用程式觸發的人臉註冊、人臉辨識和刪除使用者事件之一。
注意:在輸出 UI HAL 中呼叫函數 gui_set_virtual_face() 進行預渲染view mode需要在custom.c中實作:
- 從 smart HMI\coffee_machine\cm4\custom \custom.c 克隆函數 gui_set_virtual_face()。
- 更改小部件的名稱 home_img_cameraPreview 到 screen_img_camera_preview 在函數中。
- 在custom.c中的巨集定義#ifndef RT_PLATFORM的控制下,對輸出UI HAL中的所有UI回呼函數實作具有相同原型的UI回呼函數,以相容於GUI Guider項目,因為輸出UI HAL中的這些函數依賴於嵌入式平台。在custom.c中,它們依賴GUI引導器上的模擬器,並且獨立於嵌入式平台。對於前amp在 GUI Guider 模擬器執行時,人臉註冊回呼的實作如下: #ifndef RT_PLATFORM void UI_Registration_Callback() { gui_hide_del_user_btn(true); s_InAction = false;返回; }
筆記:參考6節第4.1.3步驟介紹的函數相同原型
巨集定義 RT_PLATFORM 在 MCUXpresso 的專案設定中設置,如圖 7 所示: - 在custom.h中宣告所有名為UI_xxx_Callback()和gui_xxx()的函數,並新增smart_tlhmi_event_descriptor.h中包含的custom.h以將GUI API共用到UI輸出HAL。
- 在custom.c中新增函數gui_xxx(),實現以下功能:
- 在 GUI Guider 上開發 GUI:
- 克隆資料夾camera preview 基礎軟體包lvgl_gui_camera_pre中的gui_guider資料夾中包含GUI Guider專案軟體view_cm7。更改相關名稱camera_preview 到新前任的face_recamp勒。
- 複製上面更新的custom.c和custom.c。 h 到新的 GUI Guider 專案軟體。
- 在 GUI Guider 上開啟新的face_rec 專案。更新如下:
- 新增標記為「刪除使用者」的新按鈕。新增隱藏標誌,以便在 GUI 應用程式啟動時隱藏該按鈕。
- 在所有按鈕註冊、識別、刪除使用者的事件設定中的「釋放」觸發器上新增呼叫不同事件ID參數的介面gui_event_face_rec_action()的程式碼行,用於觸發人臉註冊、人臉辨識、刪除使用者事件。圖8顯示了按鈕註冊事件的代碼:
- 將產生的程式碼從 GUI Guider 更新到 MCUXpresso 專案。
- 將 MCUXpresso 專案軟體產生的資料夾中除資料夾影像以外的內容替換為 GUI Guider 專案軟體產生的資料夾中的對應內容。
筆記:有關上述修改的更多詳細信息,請查看 examp勒軟體位於 https://mcuxpresso.nxp.com/appcodehub.
與前任核實amp項目
為了得到前任amp包含本應用說明的資源和工具的軟體包,請造訪: https://mcuxpresso.nxp.com/appcodehub。打開前任ampMCUXpresso IDE 上的專案。建置並編程 .axf file 到地址0x30000000並對資源庫進行編程 file 相機預置view_resource.bin 到位址 0x30800000。
LVGL GUI人臉辨識擴展ample 正常工作如下:
- 預view:通電後,攝影機拍攝的視訊串流顯示在攝影機預置的特定區域。view 在 GUI 螢幕上。狀態標籤顯示“Preview……」。有關詳細信息,請參見圖 3。單擊按鈕和圖像之外的區域時,會顯示預view 人臉註冊或辨識動作結束後,如上所述。
- 登記:
- 塔圖普:點選註冊按鈕時,開始臉部註冊。狀態標籤變成顯示“註冊...”,臉部引導矩形顯示藍色,進度條開始顯示進度。確保使用者的臉部顯示在藍色臉部引導矩形中以進行註冊。
- 成功:狀態標籤顯示「註冊…確定」和已註冊的使用者 ID 號,如果在進度條上顯示完整之前人臉註冊成功,則人臉引導矩形變為紅色。
- 失敗->逾時:當進度條顯示已滿時,如果人臉註冊仍然失敗,狀態標籤顯示「註冊…逾時」。
- 失敗->複製:狀態標籤顯示“註冊…失敗”,如果在進度條上顯示完整之前註冊的人臉被識別,則人臉引導矩形變為綠色。
- 認識:
- 啟動:點選「辨識」按鈕,即開始人臉辨識。狀態標籤變為顯示“識別...”,臉部引導矩形顯示藍色,進度條開始顯示進度。確保使用者的臉部顯示在藍色臉部引導矩形中以進行註冊。
- 成功:狀態標籤顯示「識別…確定」和已識別的使用者 ID 號,進度條顯示滿之前,如果人臉辨識成功,人臉引導矩形變為綠色。此時,將出現「刪除使用者」按鈕。意思是只有識別出該使用者才允許刪除。
- 艾盧爾:當進度條顯示已滿時,如果人臉辨識仍然失敗,狀態標籤會顯示「辨識…逾時」。
- 刪除用戶:點擊“刪除使用者”按鈕,人臉辨識成功後,狀態標籤變為顯示“刪除使用者…確定”,人臉引導矩形變為藍色,進度條上顯示滿。刪除使用者按鈕再次隱藏。識別出的臉孔/使用者將從資料庫中刪除。這意味著該人臉/用戶必須再次註冊才能被識別。
注意文檔中的源代碼
Examp本文檔中顯示的文件代碼具有以下版權和 BSD-3-Clause 許可證:
版權所有 2024 NXP 在滿足以下條件的情況下,允許以源代碼和二進制形式重新分發和使用(無論是否經過修改):
- 原始碼的重新散佈必須保留上述版權聲明、此條件清單和以下免責聲明。
- 以二進制形式重新分發必須在分發時提供文檔和/或其他材料中的上述版權聲明、條件列表和以下免責聲明。
- 未經事先書面許可,版權所有者及其貢獻者的姓名均不得用於認可或推廣源自本軟體的產品
本軟體由版權所有者和貢獻者「按原樣」提供,不承擔任何明示或默示的保證,包括但不限於適銷性和特定用途適用性的默示保證。在任何情況下,版權持有者或貢獻者均不對任何直接、間接、附帶、特殊、懲戒性或後果性損害(包括但不限於採購替代商品或服務;使用、數據或利潤損失;或其他損失)承擔責任。被告知可能發生此類損害。
修訂歷史
法律資訊
定義
草稿 - 文件的草稿狀態顯示內容仍在內部審查中view 並須經正式批准,這可能會導致修改或添加。恩智浦半導體不對文件草稿版本中包含的資訊的準確性或完整性做出任何陳述或保證,並且對使用此類資訊的後果不承擔任何責任。
免責聲明
- 有限保證和責任 — 本文件中的信息被認為是準確和可靠的。 但是,NXP Semiconductors 不對此類信息的準確性或完整性做出任何明示或暗示的陳述或保證,並且不對使用此類信息的後果承擔任何責任。 如果本文檔中的內容由 NXP Semiconductors 以外的信息源提供,NXP Semiconductors 不承擔任何責任。
在任何情況下,恩智浦半導體均不對任何間接、偶然、懲罰性、特殊或後果性損害(包括但不限於利潤損失、儲蓄損失、業務中斷、與任何產品的拆除或更換相關的成本或返工費用)承擔責任,無論此類損害是否基於侵權(包括疏忽)、保證、違約或任何其他法律理論。
儘管客戶可能因任何原因遭受任何損害,恩智浦半導體對本文所述產品的客戶的總和累積責任應根據恩智浦半導體的商業銷售條款和條件進行限制。 - 做出改變的權利 — NXP Semiconductors 保留隨時更改本文檔中發布的信息的權利,包括但不限於規格和產品描述,恕不另行通知。 本文檔取代並替換在此發布之前提供的所有信息。
- 使用適合性 — NXP Semiconductors 產品的設計、授權或保證不適用於生命支持、生命關鍵或安全關鍵系統或設備,也不適用於可合理預期 NXP Semiconductors 產品故障或故障會導致人身傷害、死亡或嚴重的財產或環境損害。 NXP Semiconductors 及其供應商對在此類設備或應用中包含和/或使用 NXP Semiconductors 產品不承擔任何責任,因此此類包含和/或使用的風險由客戶自行承擔。
- 應用領域 — 此處描述的任何這些產品的應用僅用於說明目的。 NXP Semiconductors 不聲明或保證此類應用無需進一步測試或修改即可適用於指定用途。
客戶負責使用恩智浦半導體產品設計和操作其應用程序和產品,恩智浦半導體對應用程序或客戶產品設計方面的任何幫助不承擔任何責任。 客戶自行負責確定恩智浦半導體產品是否適合客戶的應用和計劃產品,以及客戶的第三方客戶的計劃應用和使用。 客戶應提供適當的設計和操作保障措施,以盡量減少與其應用和產品相關的風險。 恩智浦半導體不承擔因客戶的應用程序或產品、或客戶的第三方客戶的應用程序或使用中的任何缺陷或缺陷而導致的任何違約、損害、成本或問題相關的任何責任。 客戶負責使用恩智浦半導體產品對客戶的應用程序和產品進行所有必要的測試,以避免應用程序和產品或客戶的第三方客戶的應用程序或使用出現故障。 恩智浦不承擔這方面的任何責任。 - 商業銷售條款和條件 — 恩智浦半導體產品的銷售須遵守 https://www.nxp.com/pro 上發布的一般商業銷售條款和條件file/條款,除非在有效的書面個人協議中另有約定。 如果簽訂了單獨的協議,則僅適用相應協議的條款和條件。 恩智浦半導體特此明確反對在客戶購買恩智浦半導體產品時應用客戶的一般條款和條件。
- 出口管制 — 本文件以及此處描述的項目可能受出口管制法規的約束。 出口可能需要主管當局的事先授權。
- 適用於非汽車合格產品 — 除非本文件明確聲明該特定恩智浦半導體產品符合汽車標準,否則該產品不適合汽車使用。它既不符合汽車測試或應用要求,也不經過測試。恩智浦半導體對於在汽車設備或應用中包含和/或使用非汽車合格產品不承擔任何責任。
如果客戶根據汽車規格和標準將產品用於汽車應用的設計和使用,客戶 (a) 應在沒有 NXP Semiconductors 對此類汽車應用、用途和規格的產品保證的情況下使用該產品,以及 ( b) 每當客戶將產品用於超出 NXP Semiconductors 規範的汽車應用時,此類使用的風險應完全由客戶自行承擔,並且 (c) 對於因客戶設計和使用該產品適用於超出 NXP Semiconductors 標准保修和 NXP Semiconductors 產品規格的汽車應用。 - 翻譯 — 文件的非英文(翻譯)版本,包括該文件中的法律信息,僅供參考。 如果翻譯版本與英文版本之間存在任何差異,則以英文版本為準。
- 安全 — 客戶了解所有 NXP 產品都可能存在未識別的漏洞,或者可能支持具有已知限制的既定安全標准或規範。 客戶負責其應用程序和產品整個生命週期的設計和操作,以減少這些漏洞對客戶應用程序和產品的影響。 客戶的責任還延伸至恩智浦產品支持的用於客戶應用的其他開放和/或專有技術。 恩智浦對任何漏洞不承擔任何責任。 客戶應定期檢查 NXP 的安全更新並適當跟進。 客恩智浦可能提供的任何信息或支持。
恩智浦有一個產品安全事件響應小組 (PSIRT)(可通過 PSIRT@nxp.com 聯繫)負責管理針對恩智浦產品安全漏洞的調查、報告和解決方案發布。
NXP BV — NXP BV 不是一家營運公司,也不分銷或銷售產品。
商標
注意:所有引用的品牌、產品名稱、服務名稱和商標均為其各自所有者的財產。
NXP — 文字標記和標誌是 NXP BV 的商標
AMBA、Arm、Arm7、Arm7TDMI、Arm9、Arm11、Artisan、big.LITTLE、Cordio、CoreLink、CoreSight、Cortex、DesignStart、DynamIQ、Jazelle、Keil、Mali、Mbed、Mbed Enabled、NEON、POP、RealView、SecurCore、Socrates、Thumb、TrustZone、ULINK、ULINK2、ULINK-ME、ULINK-PLUS、ULINKpro、μVision、Versatile — 是Arm Limited(或其子公司或附屬公司)在美國和/或的商標和/或註冊商標別處。 相關技術可能受到任何或所有專利、版權、設計和商業機密的保護。 版權所有。
- i.MX— 是 NXP BV 的商標
- J鏈接 — 是 SEGGER Microcontroller GmbH 的商標。
Microsoft、Azure 和 ThreadX — 是 Microsoft 集團公司的商標。
請注意,有關本文檔和此處所述的產品的重要聲明已包含在「法律資訊」部分中。
© 2024 NXP BV
欲了解更多信息,請訪問: https://www.nxp.com
- 發布日期: 19 年 2024 月 XNUMX 日
- 文件標識符:AN14263
常問問題
Q:這個產品的主要用途是什麼?
答:主要目的是使用 AI&ML 視覺演算法模型和簡單的 LVGL GUI ex 來實現人臉辨識功能ampSLN-TLHMI-IOT 板上的檔案。
Q:開發人員如何從本應用說明中受益?
A:開發者可以使用提供的ex逐步學習如何在框架上實現人臉識別amp文件並了解所涉及的裝置管理員、HAL 裝置和事件機制。
文件/資源
![]() |
NXP AN14263 在 Framewor 上實作 LVGL GUI 人臉識別 [pdf] 使用者指南 AN14263 在 Framewor 上實作 LVGL GUI 人臉辨識, AN14263, 在 Framewor 上實作 LVGL GUI 人臉辨識, 在 Framewor 上實作 LVGL GUI 人臉辨識, 在 Framewor 上實作人臉辨識, 在 Framewor 上實作 LVGL GUI 人臉辨識, 在 Framewor 上實作人臉辨識, 在 Framewor 上辨識, Framewor 上辨識, |