NXP AN14263 Triển khai nhận dạng khuôn mặt GUI LVGL trên Framewor
Thông tin sản phẩm
Thông số kỹ thuật
- Tên sản phẩm: Nhận dạng khuôn mặt GUI LVGL trên khung
- Sửa đổi tài liệu: 1 – 19 tháng 2024 năm XNUMX
- Từ khóa: Nhận dạng khuôn mặt, GUI LVGL, Khung
Hướng dẫn sử dụng sản phẩm
- Quaview
Sản phẩm này hỗ trợ mô hình thuật toán thị giác AI&ML để nhận dạng khuôn mặt trên khung nhằm triển khai chức năng nhận dạng khuôn mặt với GUI LVGL đơn giản.amptập tin trên bảng SLN-TLHMI-IOT. - Khung trênview
Phần mềm giải pháp được thiết kế dựa trên kiến trúc khung bao gồm các trình quản lý thiết bị chịu trách nhiệm quản lý thiết bị, thiết bị HAL đến các chi tiết cơ bản trừu tượng và các sự kiện để liên lạc giữa các thiết bị khác nhau. - Đặc trưng
Sản phẩm cho phép thực hiện chức năng nhận diện khuôn mặt thông qua camera trướcview trên màn hình GUI với các nút để kích hoạt đăng ký, nhận dạng và xóa khuôn mặt. Dữ liệu khuôn mặt đã đăng ký được lưu trữ trên Flash thông qua một file hệ thống. - Nội dung ghi chú ứng dụng
Ghi chú ứng dụng trình bày màn hình GUI LVGL với cài đặt trước camera.view và các nút cho các hành động liên quan đến khuôn mặt. Nó giúp các nhà phát triển hiểu khuôn khổ và cách triển khai nhận dạng khuôn mặt bằng cách sử dụng ví dụ được cung cấp.amplà.
Quaview
NXP đã ra mắt bộ công cụ phát triển giải pháp có tên SLN-TLHMI-IOT tập trung vào các ứng dụng HMI thông minh. Nó hỗ trợ HMI thông minh với giao diện người dùng thị giác, giọng nói và đồ họa ML được triển khai trên một MCU NXP i.MX RT117H. Dựa trên SDK, phần mềm giải pháp được xây dựng trên một thiết kế được gọi là khung hỗ trợ các thiết kế linh hoạt và tùy chỉnh các chức năng thị giác và giọng nói. Để giúp người dùng sử dụng nền tảng phần mềm tốt hơn, một số tài liệu cơ bản được cung cấp, ví dụ:ample, hướng dẫn sử dụng phát triển phần mềm. Hướng dẫn giới thiệu kiến trúc và thiết kế phần mềm cơ bản của các ứng dụng bao gồm tất cả các thành phần của giải pháp, bao gồm cả khung để giúp các nhà phát triển triển khai ứng dụng của họ dễ dàng và hiệu quả hơn bằng cách sử dụng SLN-TLHMI-IOT.
Để biết thêm chi tiết về giải pháp và các tài liệu liên quan, hãy truy cập web trang của Giải pháp HMI thông minh NXP EdgeReady Dựa trên i.MX RT117H với giao diện người dùng ML Vision, Voice và Graphical. Tuy nhiên, các nhà phát triển vẫn không dễ dàng triển khai các ứng dụng HMI thông minh của mình khi tham khảo các hướng dẫn cơ bản này. Một loạt các ghi chú ứng dụng được lên kế hoạch để giúp nghiên cứu từng bước phát triển trên khuôn khổ. Ghi chú ứng dụng này dựa trên Triển khai LVGL GUI Camera Preview trên Framework (tài liệu AN14147). Ghi chú ứng dụng này mô tả cách kích hoạt mô hình thuật toán tầm nhìn AI&ML để nhận dạng khuôn mặt trên khung nhằm triển khai chức năng nhận dạng khuôn mặt thông qua camera trướcview trên màn hình GUI với GUI LVGL đơn giảnamptập tin trên bảng SLN-TLHMI-IOT. Trong ghi chú ứng dụng, cựuamptập tin trình bày màn hình GUI LVGL với giao diện camera trướcview và một số nút để kích hoạt đăng ký, nhận dạng và xóa khuôn mặt. Dữ liệu khuôn mặt đã đăng ký được lưu trữ trên Flash thông qua một chút file hệ thống.
Ở mức độ cao, ghi chú ứng dụng chứa các nội dung dưới đây:
- Kích hoạt tính năng nhận diện khuôn mặt trên framework.
- Thêm hỗ trợ cơ sở dữ liệu khuôn mặt trên khung thông qua file hệ thống trên Flash.
- Triển khai ứng dụng GUI LVGL. Thông qua những phần giới thiệu ở trên, tài liệu này giúp các nhà phát triển:
- Hiểu sâu hơn về framework và phần mềm giải pháp HMI thông minh.
- Phát triển tính năng nhận dạng khuôn mặt AI&ML của họ trên khung bằng ứng dụng GUI LVGL.
Kết thúc khungview
Phần mềm giải pháp được thiết kế chủ yếu xoay quanh việc sử dụng kiến trúc khung bao gồm một số phần khác nhau:
- Trình quản lý thiết bị – phần cốt lõi
- Thiết bị lớp trừu tượng phần cứng (HAL)
- Tin nhắn/Sự kiện
Như được hiển thị trong Hình 1, trênview về cơ chế của khung là:
Người quản lý thiết bị có trách nhiệm quản lý các thiết bị được hệ thống sử dụng. Mỗi loại thiết bị (đầu vào, đầu ra, v.v.) có trình quản lý thiết bị dành riêng cho từng loại. Với trình quản lý thiết bị bắt đầu sau khi các thiết bị được đăng ký với nó, nó sẽ chờ và kiểm tra thông báo để truyền dữ liệu đến các thiết bị và các trình quản lý khác sau khi khởi tạo và khởi động các thiết bị đã đăng ký. Các thiết bị HAL được viết trên mã trình điều khiển cấp thấp hơn, giúp tăng khả năng hiểu mã bằng cách trừu tượng hóa nhiều chi tiết cơ bản.
Sự kiện là phương tiện để truyền đạt thông tin giữa các thiết bị khác nhau thông qua người quản lý chúng. Khi một sự kiện được kích hoạt, thiết bị nhận sự kiện đầu tiên sẽ truyền đạt sự kiện đó đến người quản lý của nó, sau đó thiết bị sẽ thông báo cho những người quản lý khác được chỉ định nhận sự kiện.
Thiết kế kiến trúc của khung tập trung vào ba mục tiêu chính:
- Dễ sử dụng
- Tính linh hoạt/Tính di động
- Hiệu suất
Khung này được thiết kế với mục tiêu đẩy nhanh thời gian tiếp thị thị giác và các ứng dụng học máy khác. Để đảm bảo thời gian đưa ra thị trường nhanh chóng, điều quan trọng là bản thân phần mềm phải dễ hiểu và dễ sửa đổi. Hãy ghi nhớ mục tiêu này, kiến trúc của khung rất dễ sửa đổi mà không bị hạn chế và không ảnh hưởng đến hiệu suất.
Để biết thêm chi tiết về khung này, hãy xem Hướng dẫn sử dụng Phát triển phần mềm HMI thông minh (tài liệu MCU-SMHMI-SDUG).
Thư viện đồ họa nhẹ và linh hoạt (LVGL)
LVGL (Thư viện đồ họa nhẹ và linh hoạt) là thư viện đồ họa mã nguồn mở và miễn phí cung cấp mọi thứ bạn cần để tạo GUI nhúng với các thành phần đồ họa dễ sử dụng, hiệu ứng hình ảnh đẹp mắt và dung lượng bộ nhớ thấp.
Hướng dẫn GUI
GUI Guider là một công cụ phát triển giao diện người dùng đồ họa thân thiện với người dùng của NXP, cho phép phát triển nhanh chóng các màn hình chất lượng cao với thư viện đồ họa LVGL mã nguồn mở. Trình chỉnh sửa kéo và thả của GUI Guider giúp bạn dễ dàng sử dụng nhiều tính năng của LVGL như widget, hoạt ảnh và kiểu để tạo GUI với mức tối thiểu hoặc không cần mã hóa.
Chỉ cần nhấp vào nút, bạn có thể chạy ứng dụng của mình trong môi trường mô phỏng hoặc xuất nó sang dự án mục tiêu. Mã được tạo từ GUI Guider có thể dễ dàng được thêm vào dự án của bạn, đẩy nhanh quá trình phát triển và cho phép bạn thêm liền mạch giao diện người dùng được nhúng vào ứng dụng của mình. GUI Guider được sử dụng miễn phí với các MCU chéo và mục đích chung của NXP, đồng thời bao gồm các mẫu dự án tích hợp sẵn cho một số nền tảng được hỗ trợ. Để tìm hiểu thêm về cách phát triển LVGL và GUI trên GUI Guider, hãy xem Thư viện đồ họa nhẹ và linh hoạt và GUI Guider.
Môi trương phat triển
Đầu tiên, chuẩn bị và thiết lập môi trường phần cứng và phần mềm để triển khai hệ thống cũ.amptập tin trên khuôn khổ.
Môi trường phần cứng
Môi trường phần cứng được thiết lập để xác minhamplê:
- Bộ công cụ phát triển HMI thông minh dựa trên NXP i.MX RT117H (bộ SLN_TLHMI_IOT)
- SEGGER J-Link với bộ chuyển đổi Cortex-M 9 chân và V7.84a hoặc phiên bản trình điều khiển mới hơn
Môi trường phần mềm
Môi trường phần mềm được thiết lập để phát triển ứng dụng cũamplê:
- MCUXpresso IDE V11.7.0
- Hướng dẫn GUI V1.6.1-GA
- lvgl_gui_máy ảnh_preview_cm7 – cũample mã của ghi chú ứng dụng thứ hai làm phần mềm cơ sở của sự phát triển. Để biết chi tiết, xem https://mcuxpresso.nxp.com/appcodehub.
- RT1170 SDK V2.13.0 – làm nguồn mã để phát triển.
- Phần mềm SLN-TLHMI-IOT V1.1.2 – mã nguồn HMI thông minh được phát hành trên kho NXP GitHub làm tài nguyên mã cho sự phát triển. Để biết chi tiết, xem: GitHub – NXP/mcu-smhmi tại v1.1.2
Để biết chi tiết về việc thu thập và thiết lập môi trường phần mềm, hãy xem: Bắt đầu với SLN-TLHMI-IOT.
Kiến trúc tầm nhìn trên khung
Kiến trúc tầm nhìn trên khung được hiển thị trong Hình 2. Thuật toán tầm nhìn HAL (OASIS_HAL) có các quy trình dưới đây:
- Thực hiện đăng ký và nhận dạng khuôn mặt thông qua mô hình thuật toán thị giác AI&ML sau khi nhận được các sự kiện liên quan từ UI HAL đầu ra. Thông báo kết quả suy luận từ mô hình thuật toán đến UI HAL đầu ra.
- Truy cập (thêm, xóa…) cơ sở dữ liệu đặc điểm khuôn mặt dựa trên file hệ thống bằng cách gọi các API của FaceDB HAL sau khi nhận được các sự kiện liên quan từ UI HAL đầu ra.
- Yêu cầu khung hình video camera từ camera HAL khi thực hiện đăng ký và nhận dạng khuôn mặt.
Triển khai nhận dạng khuôn mặt trên framework
Nhận dạng khuôn mặt GUI LVGL cũample (người yêu cũamptập tin được cung cấp sau) trên khung được triển khai dựa trênamptập tin của Triển khai LVGL GUI Camera Preview trên Framework (tài liệu AN14147).
Để thể hiện khả năng nhận dạng khuôn mặt trong ví dụ cũample, chức năng cơ bản của ứng dụng GUI (xem màn hình chính trong Hình 3) được thiết kế như mô tả bên dưới:
- Ứng dụng GUI kích hoạt sự kiện nhận dạng hoặc đăng ký khuôn mặt cho giao diện người dùng HAL đầu ra khi nhấp vào nút Đăng ký hoặc Nhận dạng. Và UI HAL đầu ra thông báo sự kiện thêm người dùng vào thuật toán thị giác HAL sau khi đăng ký khuôn mặt thành công.
- Ứng dụng GUI kích hoạt sự kiện xóa người dùng khỏi UI HAL đầu ra khi nhấp vào nút Xóa người dùng sau khi khuôn mặt của người dùng được nhận dạng.
- Ứng dụng GUI kích hoạt sự kiện dừng thuật toán ốc đảo chạy đến giao diện người dùng HAL đầu ra khi nhấp vào màn hình bên ngoài các nút và hình ảnh.
Chuẩn bị gói phần mềm để thực hiệnamplà.
- Sao chép phần mềm cơ sở lvgl_gui_Camera_preview_cm7. Thay đổi tên dự án và tên chính fileđặt tên cho lvgl_gui_face_rec_cm7.
- Khung này cần được cập nhật trong phần mềm vì mã nguồn của lõi khung đã bắt đầu được công khai trên GitHub từ phiên bản 1.1.2.
- Thay thế thư mục khung bằng bản sao V1.1.2 từ GitHub ngoại trừ files fwk_log.h và fwk_common.h trong inc\ vì chúng đã được sửa đổi cho loạt ghi chú ứng dụng. Các thao tác được thể hiện trong Hình 4:
- Xóa thư mục framework_cm7 trong nhóm libs và xóa thư viện framework_cm7 cũng như đường dẫn tìm kiếm của nó được định cấu hình trong Project > Properties > C/C++ Build > settings > Tool Setting > MCU C++ Linker > Libraries vì mã nguồn của lõi được cung cấp.
Kích hoạt tính năng nhận diện khuôn mặt trên framework
Tính năng nhận dạng khuôn mặt được xây dựng trên mô hình thuật toán thị giác ML được cung cấp dưới dạng thư viện tĩnh – thư viện thời gian chạy oasis lite của NXP. Thư viện này là một thư viện AI nhỏ, hiệu quả cao, được tùy chỉnh và tối ưu hóa. Mô hình này bao gồm nhận diện khuôn mặt, nhận dạng khuôn mặt, phát hiện kính và phát hiện sự sống. Nó chủ yếu cung cấp API OASISLT_run_extends() để chạy quy trình nhận dạng khuôn mặt trong khi cập nhật kết quả cho người gọi thông qua lệnh gọi lại sự kiện và thêm/cập nhật/xóa khuôn mặt trong cơ sở dữ liệu thông qua lệnh gọi lại cơ sở dữ liệu khuôn mặt sau khi chỉ định thông tin khung nguồn, lệnh gọi lại và bộ nhớ pool được thư viện sử dụng bằng cách gọi một API khác OASISLT_init() khi khởi tạo. Việc gọi các API và các chức năng gọi lại được triển khai trong thuật toán tầm nhìn HAL của khung.
Thêm thư viện mô hình thuật toán tầm nhìn
- Copy thư mục oasis chứa thư viện và header liên quan file từ HMI\coffee_machine\cm7\libs\ thông minh vào thư mục libs của examplê SW.
- Thêm đường dẫn tìm kiếm của tiêu đề file trong Dự án > Thuộc tính > Bản dựng C/C++ > cài đặt > Cài đặt công cụ > Trình biên dịch MCU C > Bao gồm và trình biên dịch MCU C++ > Bao gồm: “${workspace_loc:/${ProjName}/libs/oasis/include}”
- Thêm lib và đường dẫn tìm kiếm của nó trên Project > Properties > C/C++ Build > settings > MCU C+ + Linker > Libraries: liboasis_lite2D_DEFAULT_117f_ae.a “${workspace_loc:/${ProjName}/libs/oasis}” và định nghĩa macro vào bật tính năng trên Dự án > Thuộc tính > Bản dựng C/C++ > cài đặt > Cài đặt công cụ > Trình biên dịch MCU C > Bộ tiền xử lý và trình biên dịch MCU C++ > Bộ tiền xử lý: SMART_TLHMI_2D
Kích hoạt thuật toán tầm nhìn HAL
Thuật toán tầm nhìn HAL điều khiển mô hình thuật toán tầm nhìn hoạt động và phản hồi kết quả cho HAL đầu ra giao diện người dùng sau khi nhận được các sự kiện từ nó.
Để kích hoạt nó, hãy sao chép trình điều khiển HAL tương tự hiện có file nơi các chức năng dưới đây được thực hiện:
- Triển khai các lệnh gọi lại của các hoạt động cơ sở dữ liệu khuôn mặt và xử lý sự kiện.
- Thúc đẩy thuật toán tầm nhìn hoạt động bằng cách gọi các API của thư viện oasis.
- Truy cập cơ sở dữ liệu khuôn mặt người dùng và cơ sở dữ liệu ứng dụng (không cần thiết trongample).
- Nhận sự kiện từ và gửi kết quả đến đầu ra UI HAL.
Các công việc chính để triển khai HAL cho thị trường cũample là:
- Sao chép trình điều khiển HAL tương tự đã tồn tại file và thay đổi các tên liên quan.
- Xóa các mã liên quan đến hoạt động dữ liệu ứng dụng.
- Cập nhật các định nghĩa và hàm để xử lý các sự kiện từ UI HAL đầu ra theo ví dụ cũampthiết kế le.
- Thêm các cấu hình cần thiết trong quá trình khởi tạo oasis.
Các bước chi tiết như sau:
- Bản sao hal_vision_algo_oasis_coffeemachine.c. Thay đổi fileđặt tên cho hal_vision_algo_oasis_guifacerec.c. Và thay thế tất cả các chuỗi CoffeeMachine bằng GUIFaceRec trong file.
- Ví dụ: Xóa các mã chứa chuỗi Coffeedb (không phân biệt chữ hoa chữ thường) liên quan đến cơ sở dữ liệu ứng dụngamptập tin, #include hal_sln_coffeedb.h.
- Sửa đổi hàm HAL_VisionAlgoDev_OasisGUIFaceRec_InputNotify() để xử lý các sự kiện từ giao diện người dùng HAL đầu ra.
- Thay đổi định nghĩa sự kiện kEventFaceRecId_RegisterCoffeeSelection thành kEventFaceRecId_RegisterUserFace và chuỗi cấu trúc regCoffeeSelection thành regGUIFaceRec để xử lý sự kiện nhằm thêm dữ liệu đặc điểm khuôn mặt mới vào cơ sở dữ liệu.
- Để hiển thị quy trình tiêu chuẩn của các hành động nhận dạng khuôn mặt trong ví dụamptập tin, hãy sửa đổi cách xử lý trong trường hợp kEventFaceRecID_OasisSetState với định nghĩa về các trạng thái:
- kOASISLiteState
- Đăng ký koOASISLiteState
- Công nhận koOASISLiteState
- Đã dừng lại
- Thêm và sửa đổi định nghĩa của các sự kiện được đề cập ở bước trên.
- Sao chép tiêu đề file smart_tlhmi_event_descriptor.h từ smart HMI\coffee_machine \cm7\source\event_handlers\ vào thư mục nguồn của examplê SW. Cập nhật file như sau:
- Thay đổi định nghĩa sự kiện kEventFaceRecId_RegisterCoffeeSelection thành kEventFaceRecId_RegisterUserFace trong kiểu enum _event_smart_tlhmi_id và chuỗi cấu trúc regCoffeeSelection thành regGUIFaceRec trong struct _event_smart_tlhmi. Vì vậy, hãy thay đổi cấu trúc register_coffee_selection_event_t cho regCoffeeSelection thành register_gui_facerec_event_t.
- Ví dụ: xóa các nội dung khác được sử dụng cho ứng dụng máy pha cà phêample, dòng mã về giọng nói: #include “hal_event_descriptor_voice.h”.
- Thêm các loại kOASISLiteState_Stopped và kOASISLiteState_Running vào loại enum oasis_lite_state_t trong hal_vision_algo.h trong framework>hal>vision trong dự án như sau:
typedef enum _oasis_lite_state {- kOASISLiteState
- Đang chạy, koOASISLiteState
- Đã dừng, koOASISLiteState
- Sự công nhận,
- kOASISLiteState
- Đăng ký, koOASISLiteState
- Hủy đăng ký, koOASISLiteState
- Đăng ký từ xa, koOASISLiteState
- Đếm
- Sử dụng cấu trúc oasis_lite_state_t được cập nhật ở trên để tinh chỉnh cấu trúc oasis_state_event_t trong hal_event_descriptor_face_rec.h trong framework>hal>vision trong dự án như sau: typedef struct _oasis_state_event_t { oasis_lite_state_t state; } oasis_state_event_t;
- Thay đổi tất cả kEventInfo_Remote thành kEventInfo_Local để gửi các sự kiện từ thuật toán tầm nhìn HAL sang các HAL khác chạy trên cùng lõi với lõi đơn thay vì lõi kép được sử dụng trong examplà.
- Thêm và sửa đổi các cấu hình bên dưới để khởi tạo ốc đảo trong OASISLT_init():
- Thêm định nghĩa macro và phần bộ nhớ cho khung hình video trong board_define.h: #define OASIS_RGB_FRAME_WIDTH 800
- #xác định OASIS_RGB_FRAME_HEIGHT 600
- #define OASIS_RGB_FRAME_SRC_FORMAT kPixelFormat_YUV1P444_RGB
- #xác định OASIS_RGB_FRAME_BYTE_PER_PIXEL 3
- #define AT_FB_SHMEM_SECTION_ALIGN(var, căn chỉnh byte) \
- __attribute__((section(“.bss.$fb_sh_mem,\”aw\”,%nobits @”))) var
- __attribute__((căn chỉnh(alignbyte)))
- Định cấu hình gán bộ nhớ cho phần bộ nhớ trên fb_sh_mem trên Project > Properties > C/C++ Build > MCU Setting được hiển thị trong Hình 5:
- Khai báo biến toàn cục g_DTCOPBuf trong lvgl_gui_face_rec_cm7.cpp: AT_NONCACHEABLE_SECTION_ALIGN_DTC (uint8_t g_DTCOPBuf[DTC_OPTIMIZE_BUFFER_SIZE], 4);
- Tiếp tục thêm các định nghĩa được sử dụng trong biến trên:
- Xác định phần trên trong board_define.h:
- #define AT_NONCACHEABLE_SECTION_ALIGN_DTC(var, căn chỉnh byte) \
- thuộc tính__((section(“.bss.$SRAM_DTC_cm7,\”aw\",%nobits @"))) var
- thuộc tính__((căn chỉnh(alignbyte)))
- Bao gồm tiêu đề file hal_vision_algo.h chứa định nghĩa macro DTC_OPTIMIZE_BUFFER_SIZE trong app_config.h được bao gồm trong lvgl_gui_face_rec_cm7.cpp.
- Thêm định nghĩa macro và phần bộ nhớ cho khung hình video trong board_define.h: #define OASIS_RGB_FRAME_WIDTH 800
- Đặt biến s_debugOption thành true để hiển thị trạng thái tiến trình nhận dạng khuôn mặt.
- Thêm đường dẫn tìm kiếm của tiêu đề files của tầm nhìn HAL trên Dự án > Thuộc tính > Bản dựng C/C++ > cài đặt > Cài đặt công cụ > Trình biên dịch MCU C > Bao gồm và trình biên dịch MCU C++ > Bao gồm: “${workspace_loc:/${ProjName}/framework/hal/vision}”
- Thêm định nghĩa bên dưới để kích hoạt thuật toán thị giác HAL trong board_define.h: #define ENABLE_VISIONALGO_DEV_Oasis_GUIFaceRec
Kích hoạt giao diện người dùng đầu ra HAL
UI HAL đầu ra thông báo các sự kiện cho thuật toán tầm nhìn HAL và phản hồi các kết quả suy luận từ thuật toán tầm nhìn HAL. Với ứng dụng GUI, các sự kiện thường được ứng dụng kích hoạt và kết quả được hiển thị trên ứng dụng.
Để kích hoạt nó, hãy sao chép trình điều khiển HAL tương tự hiện có file trong đó các chức năng dưới đây thường được triển khai:
- Thông báo các sự kiện để nhận dạng khuôn mặt và truy cập cơ sở dữ liệu.
- Triển khai các lệnh gọi lại cho ứng dụng GUI để kích hoạt các sự kiện.
- Xử lý các kết quả suy luận từ mô-đun thuật toán tầm nhìn.
- Hiển thị quy trình và kết quả xử lý sự kiện trên giao diện người dùng bằng thanh tiến trình được điều khiển bằng bộ hẹn giờ và hình chữ nhật hướng dẫn khuôn mặt.
Các công việc chính để triển khai HAL cho thị trường cũamptập tin được sử dụng trong tài liệu này là:
- Sao chép trình điều khiển HAL tương tự đã tồn tại file và thay đổi các tên liên quan.
- Xóa các mã liên quan đến ứng dụng.
- Cập nhật các chức năng thông báo sự kiện và phản hồi kết quả theo từng phiên bản cũampthiết kế le.
- Thêm lệnh gọi lại cho ứng dụng GUI để kích hoạt sự kiện.
Các bước chi tiết như sau:
- Bản sao hal_output_ui_coffee_machine.c. Thay đổi fileđặt tên cho hal_out_ui_guifacerec.c.
- Thay thế tất cả các chuỗi CoffeeMachine bằng GUIFaceRec trong file.
- Xóa các mã liên quan đến ứng dụng – máy pha cà phê.
- Xóa các hàm WakeUp() và _StandBy() và các mã liên quan (có thể tìm kiếm chuỗi Wake_up và chế độ chờ cho chúng).
- Xóa trướcview sự kiện chế độ xử lý các mã liên quan trong HAL_OutputDev_UiGUIFaceRec_Input Notify().
- Xóa các hàm UI_xxx_Callback() và các mã chứa chuỗi gui_ và màn hình liên quan đến GUI của máy pha cà phê ngoại trừ gui_set_virtual_face() cho preview tính năng chế độ.
- Xóa tất cả các mã liên quan đến các biến s_IsWaitingAnotherSelection và s_IsWaitingRegisterSelection liên quan đến ứng dụng máy pha cà phê.
- Xóa các mã liên quan đến giọng nói, âm thanh và ngôn ngữ. Dành cho người yêu cũamplê:
- #include “hal_voice_algo_asr_local.h”,
- #include “hal_event_descriptor_voice.h”
- Đối với các thông báo sự kiện khác nhau, hãy triển khai các hàm mới _OutputManagerNotify(), _SetFaceRec(), _RegisterGUIFaceRec() và DeregisterGUIFaceRec() tham chiếu đến các hàm _StopFaceRec(), _RegisterCoffeeSelection() và DeregisterCoffeeSelection() trước khi xóa chúng.
- _OutputManagerNotify() triển khai chức năng đầu ra sự kiện cơ bản để gửi một sự kiện đến thuật toán tầm nhìn HAL. Các hàm bên dưới gọi nó để gửi các sự kiện của riêng chúng.
- _SetFaceRec() gửi sự kiện kEventFaceRecID_OasisSetState để kích hoạt thuật toán tầm nhìn để đăng ký, nhận dạng khuôn mặt và dừng thuật toán.
- _RegisterGUIFaceRec() gửi sự kiện kEventFaceRecId_RegisterGUIFaceRec được xác định trong smart_tlhmi_event_descriptor.h để thêm dữ liệu tính năng khuôn mặt vào cơ sở dữ liệu khi đăng ký OK.
- DeregisterGUIFaceRec() gửi sự kiện kEventFaceRecID_DelUser để xóa dữ liệu đặc điểm khuôn mặt khỏi cơ sở dữ liệu khi chuyển nhận dạng khuôn mặt.
- Cập nhật mã để thực hiện các hành động tương ứng, bao gồm làm mới GUI bằng cách gọi các API từ ứng dụng GUI LVGL để biết kết quả suy luận về đăng ký và nhận dạng khuôn mặt trong hàm _InferComplete_Vision() theo ví dụampthiết kế của le. Dành cho người yêu cũample, khi đăng ký khuôn mặt thành công,
- Dừng hiển thị tiến trình bằng cách gọi _FaceRecProcess_Stop();
- Dừng đăng ký khuôn mặt bằng cách gọi _SetFaceRec(kOASISLiteState_Stopped);
- Hiển thị kết quả thành công trên GUI: gui_show_face_rec_result(kFaceRecResult_OK, s_UserId);
- Đăng ký dữ liệu khuôn mặt vào cơ sở dữ liệu: _RegisterUserFace(s_UserId);
- Thêm chức năng gọi lại UI để xử lý các sự kiện: preview, đăng ký khuôn mặt, nhận dạng và xóa người dùng được kích hoạt từ GUI. Dành cho người yêu cũample, lệnh gọi lại đăng ký khuôn mặt: void UI_Registration_Callback(){ _SetFaceRec(kOASISLiteState_Registration); _FaceRecProcess_Start(); }
- Và thêm các hàm _FaceRecProcess_Start() và _FaceRecProcess_Stop() để hiển thị tiến trình và trạng thái trong các sự kiện và kết quả khác nhau.
- Cập nhật hàm gọi lại ISR hẹn giờ _SessionTimer_Callback() để xử lý trường hợp hết thời gian chờ bằng cách gọi: gui_show_face_rec_result(kFaceRecResult_TimeOut, s_UserId);
- Thêm các định nghĩa bên dưới để bật HAL đầu ra giao diện người dùng trong board_define.h: #define ENABLE_OUTPUT_DEV_UiGUIFaceRec
Để ý:
Để trình bày tính năng nhận dạng khuôn mặt tốt hơn, hãy giữ chức năng hiển thị quá trình và kết quả nhận dạng khuôn mặt trong UI HAL đầu ra. Chức năng được mô tả như dưới đây
- Hình chữ nhật hướng dẫn khuôn mặt hiển thị màu xanh lam và thanh tiến trình hiển thị tiến trình khi bắt đầu đăng ký hoặc nhận dạng khuôn mặt.
- Hình chữ nhật hướng dẫn khuôn mặt hiển thị màu đỏ khi đăng ký khuôn mặt thành công.
- Hình chữ nhật hướng dẫn khuôn mặt hiển thị màu xanh lục khi nhận dạng khuôn mặt thành công.
- Hình chữ nhật hướng dẫn khuôn mặt giữ màu xanh lam và thanh tiến trình hiển thị toàn bộ tiến trình khi hành động không thành công sau khi hết giờ. Tại thời điểm đó, hãy dừng đăng ký hoặc nhận dạng khuôn mặt.
Thanh tiến trình và hình chữ nhật hướng dẫn khuôn mặt được trình bày dưới dạng các biểu tượng được tích hợp vào tệp nhị phân tài nguyên file được lập trình thành Flash. Các con trỏ tới dữ liệu biểu tượng trên SDRAM được thiết lập trong hàm LoadIcons(APP_ICONS_BASE) được gọi khi khởi tạo thiết bị UI HAL đầu ra trong UI HAL đầu ra. Nó phải triển khai các biểu tượng hỗ trợ cho chức năng.
Triển khai hỗ trợ biểu tượng
- Xây dựng tài nguyên kết hợp các biểu tượng với hình ảnh được sử dụng trong ứng dụng GUI LVGL:
- Sao chép tiêu đề bốn biểu tượng files process_bar_240x14.h, virtual_face_blue_420x426.h, virtual_face_green_420x426.h và virtual_face_red_420x426.h từ HMI thông minh
\coffee machine\resource\icons\ vào các biểu tượng thư mục mới trong thư mục tài nguyên của cũamplê SW. - Thêm đường dẫn tìm kiếm cho biểu tượng bốn files trong máy ảnh_preview_resource.txt file trong thư mục tài nguyên, ví dụample: biểu tượng ../resource/icons/process_bar_240x14.h
- Thực thi camera_preview_resource_build.bat để xây dựng tài nguyên hình ảnh và biểu tượng để tạo thùng file máy ảnh_preview_resource.bin và thông tin file Resource_information_table.txt (Xem Hình 6).
- Sao chép tiêu đề bốn biểu tượng files process_bar_240x14.h, virtual_face_blue_420x426.h, virtual_face_green_420x426.h và virtual_face_red_420x426.h từ HMI thông minh
- Xác định địa chỉ bắt đầu trên SDRAM và kích thước của các biểu tượng trong app_config.h. Địa chỉ bắt đầu bên cạnh hình ảnh của ứng dụng GUI. Kích thước được tạo trong thông tin file. #define APP_ICONS_BASE (APP_RES_SHMEM_BASE + APP_LVGL_IMGS_SIZE) #define APP_ICONS_SIZE 0x107c40
- Cập nhật kích thước được chỉ định của phần bộ nhớ có tên res_sh_mem thành 0x200000 bằng cách xác định lại nó trong app_config.h: #define RES_SHMEM_TOTAL_SIZE 0x200000 và cài đặt tương ứng trong Project > Properties > C/C++ Build > MCU settings.
- Thêm kích thước biểu tượng vào tổng kích thước của tài nguyên được tải từ Flash sang SDRAM trong hàm APP_LoadResource() trong main file lvgl_gui_face_rec_cm7.cpp: memcpy((void *)APP_LVGL_IMGS_BASE, pLvglImages, APP_LVGL_IMGS_SIZE + APP_ICONS_SIZE);
Để ý: Để hoàn thiện tính năng nhận dạng khuôn mặt, cần có hỗ trợ ứng dụng GUI LVGL. Các chức năng gọi lại giao diện người dùng trong giao diện người dùng đầu ra HAL được ứng dụng GUI LVGL gọi để xử lý các sự kiện từ màn hình giao diện người dùng. Mặt khác, giao diện người dùng đầu ra HAL gọi các API từ ứng dụng GUI LVGL để cập nhật giao diện người dùng nhằm hiển thị kết quả và trạng thái. Việc phát triển ứng dụng GUI LVGL tương đối độc lập và được giới thiệu trong Phần 4.3.
4.1.5 Khởi động thiết bị và trình quản lý HAL để nhận dạng khuôn mặt
Thuật toán tầm nhìn được kích hoạt HAL và giao diện người dùng đầu ra HAL và các trình quản lý của chúng được bắt đầu trong phần chính file
lvgl_gui_face_rec_cm7.cpp sau khi chuyển đổi phát triển trên khung như sau:
- Bao gồm tiêu đề file liên quan đến hai trình quản lý HAL bằng cách thêm dòng mã:
- #include ” fwk_output_manager.h “
- #include “fwk_vision_algo_manager.h”
- Khai báo các thiết bị HAL:
- HAL_VALGO_DEV_DECLARE(OasisGUIFaceRec);
- HAL_OUTPUT_DEV_DECLARE(UiGUIFaceRec);
- Đăng ký thiết bị HAL:
- HAL_VALGO_DEV_REGISTER(OasisGUIFaceRec, ret);
- HAL_OUTPUT_DEV_REGISTER(UiGUIFaceRec, ret);
- Khởi tạo các trình quản lý:
- FWK_MANAGER_INIT(VisionAlgoManager, ret);
- FWK_MANAGER_INIT(Trình quản lý đầu ra, ret);
- Bắt đầu các nhà quản lý:
- FWK_MANAGER_START(VisionAlgoManager, VISION_ALGO_MANAGER_TASK_PRIORITY, ret);
- FWK_MANAGER_START(Trình quản lý đầu ra, OUTPUT_MANAGER_TASK_PRIORITY, ret);
- Xác định mức độ ưu tiên của nhiệm vụ người quản lý:
- #define VISION_ALGO_MANAGER_TASK_PRIORITY 3
- #define OUTPUT_MANAGER_TASK_PRIORITY 1
Thêm hỗ trợ cơ sở dữ liệu khuôn mặt trên framework
Dữ liệu tính năng khuôn mặt đã đăng ký được truy cập trong cơ sở dữ liệu khuôn mặt được lưu trữ trên Flash thông qua một chút file hệ thống. Các bước để thêm hỗ trợ cơ sở dữ liệu khuôn mặt được mô tả bên dưới.
Thêm trình điều khiển cho bộ nhớ Flash
Sao chép trình điều khiển FlexSPI giao diện Flash files fsl_flexspi.c và fsl_flexspi.h và trình điều khiển mã hóa dữ liệu files fsl_caam.c và fsl_caam.h từ đường dẫn SDK_2_13_0_MIMXRT1170-EVK\devices \MIMRX1176\drivers\ tới thư mục trình điều khiển của examplê SW.
Thêm hỗ trợ cấp bảng
- Thêm các định nghĩa về FlexSPI được sử dụng cho thiết bị Flash trên bo mạch.h:
- #define BOARD_FLEXSPI FLEXSPI1
- #xác định BOARD_FLEXSPI_CLOCK kCLOCK_FlexSpi1
- #define BOARD_FLEXSPI_AMBA_BASE FlexSPI1_AMBA_BASE
- Sao chép các toán tử và cấu hình files của thiết bị Flash flexspi_nor_flash_ops.c, flexspi_nor_flash_ops.h, sln_flash_config.c, sln_flash_config_w25q256jvs.h, andsln_flash_ops.h theo đường dẫn smart HMI\coffee_machine\cm7\source\flash_config\ tới bảng thư mục của examplê SW.
- Bỏ chọn “Loại trừ tài nguyên khỏi bản dựng” trong C/C++ Build> Cài đặt sau khi nhấp chuột phải vào files' và mở Thuộc tính để cho phép chúng được tích hợp vào dự án.
- Thay đổi tiêu đề đi kèm fileđặt tên sln_flash_config.h thành sln_flash_config_w25q256jvs.h trong sln_flash_config.c và flexspi_nor_flash_ops.h.
- Đặt nguồn đồng hồ FlexSPI1 trong file clock_config.c đề cập đến ứng dụng máy pha cà phê.
Thêm bộ chuyển đổi và hỗ trợ cấp trung
- Sao chép files sln_flash.c, sln_flash.h, sln_encrypt.c và sln_encrypt.h làm trình điều khiển bộ chuyển đổi cho file hệ thống và ứng dụng từ đường dẫn của HMI\coffee_machine\cm7\source\ thông minh đến nguồn thư mục cũample. Cập nhật cái mới files:
- Bỏ chọn “Loại trừ tài nguyên khỏi bản dựng” trên chúng để xây dựng.
- Thay đổi tất cả tiêu đề đi kèm file đặt tên sln_flash_config.h thành sln_flash_config_w25q256jvs.h.
- Sao chép thư mục filehệ thống chứa các API dành cho nhỏ filehệ thống và trình điều khiển HAL từ HMI thông minh \coffee_machine\cm7\source\ đến thiết bị cũamplê SW. Và cập nhật cho thư mục mới:
- Bỏ chọn “Loại trừ tài nguyên khỏi bản dựng” trên đó để xây dựng.
- Thêm đường dẫn bao gồm nó trong cài đặt dự án: “${workspace_loc:/${ProjName}/filehệ thống}"
- Thay đổi tiêu đề đi kèm file tên sln_flash_config.h thành sln_flash_config_w25q256jvs.h và fica_deflash.h thành app_config.h trong file sln_flash_littlefs.h.
- Copy thư mục littlefs chứa middleware – little filehệ thống từ đường dẫn SDK_2_13_0_ MIMXRT1170-EVK\middleware\ tới hệ thống cũample SW. Và cập nhật thư mục mới:
- Bỏ chọn “Loại trừ tài nguyên khỏi bản dựng” trên đó để xây dựng.
- Thêm đường dẫn bao gồm nó trong cài đặt dự án: “${workspace_loc:/${ProjName}/littlefs}”
Thêm trình điều khiển HAL
- Có hai thiết bị HAL – file Cơ sở dữ liệu hệ thống và khuôn mặt HAL được hỗ trợ cho tính năng truy cập cơ sở dữ liệu và chúng đã được triển khai trong khung mà không có bất kỳ thay đổi nào. Kích hoạt chúng bằng cách thêm các định nghĩa bên dưới vào board_define.h:
- #define ENABLE_FLASH_DEV_Littlefs
- #define ENABLE_FACEDB
Và thay đổi tên cơ sở dữ liệu khuôn mặt cho người yêu cũample: #define OASIS_FACE_DB_DIR “oasis_gui_face_rec”
Thêm hỗ trợ cấp ứng dụng
- Cập nhật phần chính file lvgl_gui_face_rec_cm7.cpp:
- Bao gồm tiêu đề file liên quan đến Flash file trình quản lý HAL hệ thống bằng cách thêm dòng mã: #include “fwk_flash.h”
- Khai báo và đăng ký file thiết bị HAL của hệ thống:
- HAL_FLASH_DEV_DECLARE(Littlefs);
- HAL_FLASH_DEV_REGISTER(Littlefs, ret);
Ghi chú: Các file Thiết bị HAL của hệ thống phải được đăng ký trước khi tất cả trình quản lý thiết bị được khởi tạo trong hàm APP_InitFramework().
- Gọi hàm BOARD_ConfigMPU() trong APP_BoardInit() để định cấu hình MPU.
- Đặt file phân công hệ thống trên Flash trong file app_config.h bằng cách xác định các định nghĩa macro được sử dụng trong file sln_flash_littlefs.h:
- #xác định FICA_IMG_FILE_SYS_ADDR (FLASH_IMG_SIZE + RES_SHMEM_TOTAL_SIZE)
- #xác định FICA_FILE_SYS_SIZE (0x280000)
Cấu hình
Một số mã liên quan đến Flash được thực thi trong vùng SRAM ITC để có đủ hiệu suất. Sao chép thư mục linkscripts chứa cấu hình trình liên kết từ đường dẫn smart HMI\coffee_machine\cm7\ sang examplê SW.
Triển khai ứng dụng GUI LVGL
Việc phát triển ứng dụng GUI LVGL dựa trên khung gọi các API từ UI HAL đầu ra và cung cấp các API cho UI HAL đầu ra (Xem Phần 4.1.3 để biết cách triển khai UI HAL đầu ra).
Tuy nhiên, việc triển khai chi tiết ứng dụng GUI LVGL phụ thuộc vào yêu cầu và thiết kế của ứng dụng. Ứng dụng GUI trong ví dụ nàyamptập tin được thiết kế như mô tả ở đầu phần Phần 4.
Dưới đây là phần giới thiệu thực hiện:
- Các mã tùy chỉnh được triển khai trong custom.c và custom.h do GUI Guider cung cấp dưới dạng giao diện giữa dự án GUI Guider và dự án hệ thống nhúng.
- Thêm các hàm mới có tên gui_xxx() trong custom.c để đạt được các hàm dưới đây:
- Để đầu ra ứng dụng UI HAL và GUI cập nhật UI.
- Để ứng dụng GUI kích hoạt các sự kiện bằng cách gọi các hàm gọi lại giao diện người dùng từ giao diện người dùng đầu ra HAL.
Ví dụample, hàm mới gui_event_face_rec_action() gọi các hàm gọi lại giao diện người dùng để xử lý một trong các sự kiện đăng ký khuôn mặt, nhận dạng khuôn mặt và xóa người dùng được kích hoạt từ ứng dụng GUI khi nhấp vào nút liên quan.
Lưu ý: Hàm gui_set_virtual_face() được gọi trong giao diện người dùng đầu ra HAL cho preview chế độ cần được triển khai trong custom.c:
- Sao chép hàm gui_set_virtual_face() từ HMI\coffee_machine\cm4\custom \custom.c thông minh.
- Thay đổi tên của tiện ích home_img_CameraPreview tới màn hình_img_máy ảnh_preview trong chức năng.
- Triển khai các hàm gọi lại UI với cùng một nguyên mẫu cho tất cả các hàm trong UI HAL đầu ra dưới sự kiểm soát của định nghĩa macro #ifndef RT_PLATFORM trong custom.c để tương thích với dự án GUI Guider vì các hàm này trong UI HAL đầu ra phụ thuộc vào nền tảng nhúng. Trong custom.c, chúng phụ thuộc vào trình mô phỏng trên trình hướng dẫn GUI và độc lập với nền tảng được nhúng. Dành cho người yêu cũample, lệnh gọi lại đăng ký khuôn mặt được triển khai như bên dưới để trình mô phỏng GUI Guider đang chạy: #ifndef RT_PLATFORM void UI_Registration_Callback() { gui_hide_del_user_btn(true); s_InAction = sai; trở lại; }
Ghi chú: Tham khảo nguyên mẫu tương tự của hàm được giới thiệu ở bước 6 Mục 4.1.3
Định nghĩa macro RT_PLATFORM được đặt trên cài đặt dự án của MCUXpresso như trong Hình 7: - Khai báo tất cả các hàm có tên UI_xxx_Callback() và gui_xxx() trong custom.h và thêm custom.h có trong smart_tlhmi_event_descriptor.h để chia sẻ API GUI với đầu ra UI HAL.
- Thêm các hàm mới có tên gui_xxx() trong custom.c để đạt được các hàm dưới đây:
- Phát triển GUI trên GUI Guider:
- Sao chép thư mục camera trướcview chứa phần mềm dự án GUI Guider trong thư mục gui_guider trong gói phần mềm cơ sở lvgl_gui_Camera_preview_cm7. Thay đổi tên liên quan camera_preview tới face_rec cho người yêu cũ mớiamplà.
- Sao chép custom.c và custom.c được cập nhật ở trên. h sang phần mềm dự án GUI Guider mới.
- Mở dự án face_rec mới trên GUI Guider. Cập nhật như sau:
- Thêm nút mới có nhãn Xóa người dùng. Thêm cờ Ẩn vào đó để nút sẽ bị ẩn khi ứng dụng GUI khởi động.
- Thêm dòng mã gọi API gui_event_face_rec_action() với tham số ID sự kiện khác trên trình kích hoạt “Đã phát hành” trong Cài đặt sự kiện của tất cả các nút Đăng ký, Nhận dạng và Xóa Người dùng để kích hoạt các sự kiện đăng ký khuôn mặt, nhận dạng khuôn mặt và xóa người dùng. Hình 8 hiển thị mã cho sự kiện của nút Đăng ký:
- Cập nhật mã được tạo từ GUI Guider vào dự án MCUXpresso.
- Thay thế nội dung ngoại trừ hình ảnh thư mục trong thư mục được tạo của dự án MCUXpresso SW bằng nội dung tương ứng trong thư mục được tạo của dự án GUI Guider SW.
Ghi chú: Để biết thêm chi tiết về các sửa đổi được giới thiệu ở trên, hãy kiểm tra ví dụampphần mềm tại https://mcuxpresso.nxp.com/appcodehub.
Xác minh với người yêu cũampdự án le
Để có được người yêu cũampgói phần mềm chứa các tài nguyên và công cụ dành cho ứng dụng này. Ghi chú, hãy truy cập: https://mcuxpresso.nxp.com/appcodehub. Mở người yêu cũampdự án trên MCUXpresso IDE. Xây dựng và lập trình .axf file đến địa chỉ 0x30000000 và lập trình thùng tài nguyên file máy ảnh_preview_resource.bin đến địa chỉ 0x30800000.
Nhận dạng khuôn mặt GUI LVGL cũample hoạt động bình thường như sau:
- Trướcview: Khi bật nguồn, các luồng video được camera ghi lại sẽ hiển thị trên khu vực cụ thể của camera trướcview trên màn hình GUI. Nhãn trạng thái hiển thị “Trướcview…”. Để biết chi tiết, xem Hình 3. Nút Xóa Người dùng bị ẩn. Khi nhấp vào khu vực bên ngoài các nút và hình ảnh, nó sẽ hiển thị trướcview trạng thái như trên sau khi hành động đăng ký hoặc nhận dạng khuôn mặt kết thúc.
- Sự đăng ký:
- khởi động: Khi nhấp vào nút Đăng ký, quá trình đăng ký khuôn mặt sẽ bắt đầu. Nhãn trạng thái thay đổi để hiển thị “Đăng ký…”, hình chữ nhật hướng dẫn khuôn mặt hiển thị màu xanh lam và thanh tiến trình bắt đầu hiển thị tiến trình. Đảm bảo khuôn mặt của người dùng hiển thị trong hình chữ nhật hướng dẫn khuôn mặt màu xanh lam để đăng ký.
- thành công: Nhãn trạng thái hiển thị “Đăng ký…OK” và số ID người dùng đã đăng ký, hình chữ nhật hướng dẫn khuôn mặt sẽ chuyển sang màu đỏ nếu đăng ký khuôn mặt thành công trước khi tiến trình hiển thị đầy đủ trên thanh.
- Thất bại -> Hết thời gian: Nhãn trạng thái hiển thị “Đăng ký…Hết thời gian” nếu đăng ký khuôn mặt vẫn không thành công khi tiến trình hiển thị đầy đủ trên thanh.
- Thất bại -> Sao chép: Nhãn trạng thái hiển thị “Đăng ký…Không thành công”, hình chữ nhật hướng dẫn khuôn mặt sẽ chuyển sang màu xanh nếu khuôn mặt đã đăng ký được nhận dạng trước khi tiến trình hiển thị đầy đủ trên thanh.
- nhận thức:
- Khởi động: Khi nhấp vào nút Nhận dạng, quá trình nhận dạng khuôn mặt sẽ bắt đầu. Nhãn trạng thái thay đổi để hiển thị “Nhận dạng…”, hình chữ nhật hướng dẫn khuôn mặt hiển thị màu xanh lam và thanh tiến trình bắt đầu hiển thị tiến trình. Đảm bảo khuôn mặt của người dùng được hiển thị trong hình chữ nhật hướng dẫn khuôn mặt màu xanh lam để đăng ký.
- thành công: Nhãn trạng thái hiển thị “Nhận dạng…OK” và số ID người dùng được nhận dạng, hình chữ nhật hướng dẫn khuôn mặt sẽ chuyển sang màu xanh lục nếu nhận dạng khuôn mặt thành công trước khi tiến trình hiển thị đầy đủ trên thanh. Tại thời điểm này, nút Xóa người dùng xuất hiện. Điều đó có nghĩa là người dùng chỉ được phép xóa khi được nhận dạng.
- sự đau khổ: Nhãn trạng thái hiển thị “Nhận dạng…Hết thời gian” nếu nhận dạng khuôn mặt vẫn không thành công khi tiến trình hiển thị đầy đủ trên thanh.
- Xóa người dùng: Khi nhấp vào nút “Xóa người dùng”, sau khi nhận dạng khuôn mặt thành công, nhãn trạng thái sẽ chuyển sang hiển thị “Xóa người dùng…OK” với hình chữ nhật hướng dẫn khuôn mặt trở thành màu xanh lam và tiến trình hiển thị đầy đủ trên thanh. Nút Xóa người dùng lại bị ẩn. Khuôn mặt/người dùng được nhận dạng sẽ bị xóa khỏi cơ sở dữ liệu. Điều đó có nghĩa là khuôn mặt/người dùng này không thể được nhận dạng cho đến khi được đăng ký lại.
Lưu ý về mã nguồn trong tài liệu
Exampmã hiển thị trong tài liệu này có bản quyền và giấy phép BSD-3-Khoản sau:
Bản quyền 2024 NXP Việc phân phối lại và sử dụng ở dạng nguồn và dạng nhị phân, có hoặc không có sửa đổi, được cho phép với điều kiện đáp ứng các điều kiện sau:
- Việc phân phối lại mã nguồn phải giữ nguyên thông báo bản quyền ở trên, danh sách các điều kiện này và tuyên bố từ chối trách nhiệm sau đây.
- Việc phân phối lại ở dạng nhị phân phải sao chép thông báo bản quyền ở trên, danh sách các điều kiện này và tuyên bố từ chối trách nhiệm sau đây trong tài liệu và/hoặc các tài liệu khác phải được cung cấp cùng với việc phân phối.
- Không được sử dụng tên của người giữ bản quyền cũng như tên của những người đóng góp để xác nhận hoặc quảng bá các sản phẩm có nguồn gốc từ phần mềm này mà không có sự cho phép cụ thể trước bằng văn bản
PHẦN MỀM NÀY ĐƯỢC CUNG CẤP BỞI NHỮNG NGƯỜI CÓ BẢN QUYỀN VÀ NHỮNG NGƯỜI ĐÓNG GÓP “NGUYÊN TRẠNG” VÀ BẤT KỲ BẢO HÀNH RÕ RÀNG HAY NGỤ Ý NÀO, BAO GỒM NHƯNG KHÔNG GIỚI HẠN Ở, CÁC BẢO HÀNH NGỤ Ý NÀO VỀ KHẢ NĂNG THƯƠNG MẠI VÀ SỰ PHÙ HỢP CHO MỘT MỤC ĐÍCH CỤ THỂ ĐỀU BỊ TỪ CHỐI. TRONG MỌI TRƯỜNG HỢP, NGƯỜI CÓ BẢN QUYỀN HOẶC NGƯỜI ĐÓNG GÓP KHÔNG CHỊU TRÁCH NHIỆM ĐỐI VỚI BẤT KỲ THIỆT HẠI TRỰC TIẾP, GIÁN TIẾP, NGẪU NHIÊN, ĐẶC BIỆT, MANG TÍNH MẪU HOẶC HẬU QUẢ NÀO (BAO GỒM NHƯNG KHÔNG GIỚI HẠN Ở VIỆC MUA SẮM HÀNG HÓA HOẶC DỊCH VỤ THAY THẾ; MẤT QUYỀN SỬ DỤNG, DỮ LIỆU HOẶC LỢI NHUẬN; HOẶC GIÁN ĐOẠN KINH DOANH) BẤT KỂ DO NGUYÊN NHÂN GÌ VÀ THEO BẤT KỲ LÝ THUYẾT NÀO VỀ TRÁCH NHIỆM, CHO DÙ LÀ TRONG HỢP ĐỒNG, TRÁCH NHIỆM NGHIÊM NGẶT HOẶC HÀNH VI PHẠM PHÁP LÝ (BAO GỒM CẢ SỰ CẨU THẢ HOẶC CÁCH KHÁC) PHÁT SINH THEO BẤT KỲ CÁCH NÀO TỪ VIỆC SỬ DỤNG PHẦN MỀM NÀY, NGAY CẢ KHI ĐÃ ĐƯỢC THÔNG BÁO VỀ KHẢ NĂNG XẢY RA THIỆT HẠI NHƯ VẬ
Lịch sử sửa đổi
Thông tin pháp lý
Định nghĩa
Bản nháp — Trạng thái bản nháp trên một tài liệu cho biết nội dung vẫn đang được xem xét lại nội bộ.view và tùy thuộc vào sự chấp thuận chính thức, có thể dẫn đến việc sửa đổi hoặc bổ sung. NXP Semiconductors không đưa ra bất kỳ tuyên bố hoặc bảo đảm nào về tính chính xác hoặc đầy đủ của thông tin có trong bản thảo của một tài liệu và sẽ không chịu trách nhiệm về hậu quả của việc sử dụng thông tin đó.
Tuyên bố miễn trừ trách nhiệm
- Bảo hành và trách nhiệm có giới hạn - Thông tin trong tài liệu này được cho là chính xác và đáng tin cậy. Tuy nhiên, NXP Semiconductors không đưa ra bất kỳ tuyên bố hoặc bảo đảm nào, được thể hiện hoặc ngụ ý, về tính chính xác hoặc đầy đủ của thông tin đó và sẽ không chịu trách nhiệm về hậu quả của việc sử dụng thông tin đó. NXP Semiconductors không chịu trách nhiệm về nội dung trong tài liệu này nếu được cung cấp bởi một nguồn thông tin bên ngoài NXP Semiconductors.
Trong mọi trường hợp, NXP Semiconductors sẽ không chịu trách nhiệm pháp lý đối với bất kỳ thiệt hại gián tiếp, ngẫu nhiên, trừng phạt, đặc biệt hoặc do hậu quả nào (bao gồm - nhưng không giới hạn - lợi nhuận thấp nhất, tiết kiệm bị mất, gián đoạn kinh doanh, chi phí liên quan đến việc loại bỏ hoặc thay thế bất kỳ sản phẩm nào hoặc phí làm lại) cho dù hoặc không phải những thiệt hại đó dựa trên hành vi sai trái (bao gồm cả sơ suất), bảo hành, vi phạm hợp đồng hoặc bất kỳ lý thuyết pháp lý nào khác.
Bất chấp mọi thiệt hại mà khách hàng có thể phải chịu vì bất kỳ lý do gì, trách nhiệm tổng hợp và tích lũy của NXP Semiconductors đối với khách hàng đối với các sản phẩm được mô tả ở đây sẽ bị giới hạn theo các Điều khoản và điều kiện bán thương mại của NXP Semiconductors. - Quyền thực hiện thay đổi - NXP Semiconductors có quyền thực hiện các thay đổi đối với thông tin được công bố trong tài liệu này, bao gồm nhưng không giới hạn thông số kỹ thuật và mô tả sản phẩm, bất kỳ lúc nào và không cần thông báo. Tài liệu này thay thế và thay thế tất cả thông tin được cung cấp trước khi xuất bản tài liệu này.
- Phù hợp để sử dụng - Các sản phẩm Chất bán dẫn NXP không được thiết kế, ủy quyền hoặc bảo hành để phù hợp cho việc sử dụng trong các hệ thống hoặc thiết bị hỗ trợ sự sống, quan trọng về tính mạng hoặc an toàn, cũng như trong các ứng dụng mà sản phẩm Chất bán dẫn NXP có thể bị hỏng hoặc trục trặc một cách hợp lý. thương tích cá nhân, tử vong hoặc thiệt hại nghiêm trọng về tài sản hoặc môi trường. NXP Semiconductors và các nhà cung cấp của nó không chịu bất kỳ trách nhiệm pháp lý nào đối với việc đưa và / hoặc sử dụng các sản phẩm NXP Semiconductors trong các thiết bị hoặc ứng dụng đó và do đó việc đưa vào và / hoặc sử dụng đó là rủi ro của riêng khách hàng.
- Ứng dụng - Các ứng dụng được mô tả ở đây cho bất kỳ sản phẩm nào trong số này chỉ dành cho mục đích minh họa. NXP Semiconductors không tuyên bố hoặc bảo đảm rằng các ứng dụng đó sẽ phù hợp với mục đích sử dụng được chỉ định mà không cần thử nghiệm hoặc sửa đổi thêm.
Khách hàng chịu trách nhiệm về thiết kế và vận hành các ứng dụng và sản phẩm của họ bằng cách sử dụng các sản phẩm của NXP Semiconductors và NXP Semiconductors không chịu trách nhiệm pháp lý đối với bất kỳ hỗ trợ nào về ứng dụng hoặc thiết kế sản phẩm của khách hàng. Khách hàng hoàn toàn chịu trách nhiệm xác định xem sản phẩm NXP Semiconductors có phù hợp và phù hợp với các ứng dụng và sản phẩm được lên kế hoạch của khách hàng hay không, cũng như cho ứng dụng và việc sử dụng được lên kế hoạch của (các) khách hàng bên thứ ba của khách hàng. Khách hàng nên cung cấp các biện pháp bảo vệ thiết kế và vận hành phù hợp để giảm thiểu rủi ro liên quan đến các ứng dụng và sản phẩm của họ. NXP Semiconductors không chấp nhận bất kỳ trách nhiệm pháp lý nào liên quan đến bất kỳ lỗi, hư hỏng, chi phí hoặc vấn đề nào dựa trên bất kỳ điểm yếu hoặc lỗi nào trong các ứng dụng hoặc sản phẩm của khách hàng, hoặc ứng dụng hoặc việc sử dụng của (các) khách hàng bên thứ ba của khách hàng. Khách hàng chịu trách nhiệm thực hiện tất cả các thử nghiệm cần thiết cho các ứng dụng và sản phẩm của khách hàng bằng cách sử dụng các sản phẩm của NXP Semiconductors để tránh lỗi mặc định của ứng dụng và sản phẩm hoặc của ứng dụng hoặc việc sử dụng của (các) khách hàng bên thứ ba của khách hàng. NXP không chịu bất kỳ trách nhiệm pháp lý nào về mặt này. - Điều khoản và điều kiện bán hàng thương mại — Các sản phẩm của NXP Semiconductors được bán tuân theo các điều khoản và điều kiện chung về bán hàng thương mại, được công bố tại https://www.nxp.com/profile/terms, trừ khi có thỏa thuận khác trong một thỏa thuận cá nhân bằng văn bản hợp lệ. Trong trường hợp một thỏa thuận cá nhân được ký kết, chỉ các điều khoản và điều kiện của thỏa thuận tương ứng sẽ được áp dụng. NXP Semiconductors theo đây phản đối rõ ràng việc áp dụng các điều khoản và điều kiện chung của khách hàng liên quan đến việc khách hàng mua sản phẩm NXP Semiconductors.
- Kiểm soát xuất khẩu - Tài liệu này cũng như (các) mặt hàng được mô tả ở đây có thể phải tuân theo các quy định kiểm soát xuất khẩu. Việc xuất khẩu có thể cần có sự cho phép trước của các cơ quan có thẩm quyền.
- Tính phù hợp để sử dụng cho các sản phẩm không đủ tiêu chuẩn dành cho ô tô — Trừ khi tài liệu này nêu rõ rằng sản phẩm Bán dẫn NXP cụ thể này đủ tiêu chuẩn dành cho ô tô, sản phẩm này không phù hợp để sử dụng trong ô tô. Nó không đủ tiêu chuẩn cũng như không được thử nghiệm theo các yêu cầu ứng dụng hoặc thử nghiệm ô tô. NXP Semiconductors không chịu trách nhiệm pháp lý về việc đưa vào và/hoặc sử dụng các sản phẩm không đạt tiêu chuẩn dành cho ô tô trong các ứng dụng hoặc thiết bị ô tô.
Trong trường hợp khách hàng sử dụng sản phẩm để thiết kế và sử dụng trong các ứng dụng ô tô theo các thông số kỹ thuật và tiêu chuẩn ô tô, khách hàng (a) sẽ sử dụng sản phẩm mà không có bảo hành của NXP Semiconductors đối với sản phẩm cho các ứng dụng, sử dụng và thông số kỹ thuật ô tô đó, và ( b) bất cứ khi nào khách hàng sử dụng sản phẩm cho các ứng dụng ô tô vượt quá thông số kỹ thuật của NXP Semiconductors, việc sử dụng đó sẽ hoàn toàn do khách hàng tự chịu rủi ro và (c) khách hàng hoàn toàn bồi thường cho NXP Semiconductors đối với bất kỳ trách nhiệm pháp lý, thiệt hại hoặc khiếu nại sản phẩm không thành công do khách hàng thiết kế và sử dụng sản phẩm dành cho các ứng dụng ô tô ngoài bảo hành tiêu chuẩn của NXP Semiconductors và thông số kỹ thuật của sản phẩm NXP Semiconductors. - Bản dịch - Phiên bản không phải tiếng Anh (đã dịch) của tài liệu, bao gồm thông tin pháp lý trong tài liệu đó, chỉ mang tính chất tham khảo. Bản tiếng Anh sẽ được ưu tiên trong trường hợp có bất kỳ sự khác biệt nào giữa bản dịch và bản tiếng Anh.
- Bảo vệ — Khách hàng hiểu rằng tất cả các sản phẩm của NXP có thể có các lỗ hổng không xác định hoặc có thể hỗ trợ các tiêu chuẩn hoặc thông số kỹ thuật bảo mật đã thiết lập với các giới hạn đã biết. Khách hàng chịu trách nhiệm thiết kế và vận hành các ứng dụng và sản phẩm của mình trong suốt vòng đời của chúng để giảm tác động của các lỗ hổng này đối với các ứng dụng và sản phẩm của khách hàng. Trách nhiệm của khách hàng cũng mở rộng sang các công nghệ mở và/hoặc độc quyền khác được hỗ trợ bởi các sản phẩm của NXP để sử dụng trong các ứng dụng của khách hàng. NXP không chịu trách nhiệm pháp lý đối với bất kỳ lỗ hổng nào. Khách hàng nên thường xuyên kiểm tra các bản cập nhật bảo mật từ NXP và theo dõi một cách thích hợp. Khách hàng sẽ chọn các sản phẩm có tính năng bảo mật đáp ứng tốt nhất các quy tắc, quy định và tiêu chuẩn của ứng dụng dự định và đưa ra quyết định thiết kế cuối cùng liên quan đến sản phẩm của mình và tự chịu trách nhiệm tuân thủ tất cả các yêu cầu pháp lý, quy định và bảo mật liên quan đến sản phẩm của mình, bất kể về bất kỳ thông tin hoặc hỗ trợ nào có thể được cung cấp bởi NXP.
NXP có Nhóm ứng phó sự cố bảo mật sản phẩm (PSIRT) (có thể truy cập tại PSIRT@nxp.com) quản lý việc điều tra, báo cáo và đưa ra giải pháp cho các lỗ hổng bảo mật của sản phẩm NXP.
NXP BV — NXP BV không phải là công ty điều hành và không phân phối hoặc bán sản phẩm.
Nhãn hiệu
Để ý: Tất cả các nhãn hiệu, tên sản phẩm, tên dịch vụ và nhãn hiệu được tham chiếu đều là tài sản của chủ sở hữu tương ứng.
NXP — chữ và logo là thương hiệu của 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 — là các nhãn hiệu và/hoặc nhãn hiệu đã đăng ký của Arm Limited (hoặc các công ty con hoặc chi nhánh của nó) tại Hoa Kỳ và/hoặc nơi khác. Công nghệ liên quan có thể được bảo vệ bởi bất kỳ hoặc tất cả bằng sáng chế, bản quyền, thiết kế và bí mật thương mại. Đã đăng ký Bản quyền.
- i.MX — là thương hiệu của NXP BV
- Liên kết J — là nhãn hiệu của SEGGER Vi điều khiển GmbH.
Microsoft, Azure và ThreadX — là các nhãn hiệu của tập đoàn Microsoft.
Xin lưu ý rằng những thông báo quan trọng liên quan đến tài liệu này và sản phẩm được mô tả trong tài liệu này đã được đưa vào phần 'Thông tin pháp lý'.
© 2024 NXP BV
Để biết thêm thông tin, vui lòng truy cập: https://www.nxp.com
- Ngày phát hành: Ngày 19 tháng 2024 năm XNUMX
- Mã định danh tài liệu: AN14263
Câu hỏi thường gặp
Hỏi: Mục đích chính của sản phẩm này là gì?
Trả lời: Mục đích chính là kích hoạt chức năng nhận dạng khuôn mặt bằng mô hình thuật toán thị giác AI&ML với GUI LVGL đơn giản.amptập tin trên bảng SLN-TLHMI-IOT.
Hỏi: Các nhà phát triển có thể hưởng lợi như thế nào từ ghi chú ứng dụng này?
Đáp: Nhà phát triển có thể tìm hiểu cách triển khai nhận dạng khuôn mặt trên khung theo từng bước bằng cách sử dụng ví dụ được cung cấp.amptập tin và hiểu các trình quản lý thiết bị, thiết bị HAL và các cơ chế sự kiện có liên quan.
Tài liệu / Tài nguyên
![]() |
NXP AN14263 Triển khai nhận dạng khuôn mặt GUI LVGL trên Framewor [tập tin pdf] Hướng dẫn sử dụng AN14263 Triển khai nhận dạng khuôn mặt GUI LVGL trên Framewor, AN14263, Triển khai nhận dạng khuôn mặt GUI LVGL trên Framewor, Nhận dạng khuôn mặt GUI LVGL trên Framewor, Nhận dạng khuôn mặt trên Framewor, Nhận dạng trên Framewor, Framewor |