logo nxp

NXP AN14263 Implementuje rozpoznawanie twarzy LVGL GUI w środowisku Framewor

NXP-AN14263-Implement-LVGL-GUI Rozpoznawanie twarzy na produkcie-ramowym

Informacje o produkcie

Specyfikacje

  • Nazwa produktu: Rozpoznawanie twarzy LVGL GUI na platformie
  • Wersja dokumentu: 1 – 19 kwietnia 2024
  • Słowa kluczowe: Rozpoznawanie twarzy, GUI LVGL, Framework

Instrukcje użytkowania produktu

  1. Nadview
    Ten produkt umożliwia model algorytmu wizyjnego AI&ML do rozpoznawania twarzy w ramach implementacji funkcji rozpoznawania twarzy za pomocą prostego interfejsu GUI LVGL np.ample na płycie SLN-TLHMI-IOT.
  2. Koniec ramview
    Oprogramowanie rozwiązania zostało zaprojektowane w oparciu o architekturę framework, która obejmuje menedżerów urządzeń odpowiedzialnych za zarządzanie urządzeniami, urządzenia HAL w celu wyodrębnienia podstawowych szczegółów oraz zdarzenia służące do komunikacji między różnymi urządzeniami.
  3. Cechy
    Produkt pozwala na realizację funkcji rozpoznawania twarzy za pośrednictwem przedwzmacniacza kameryview na ekranie GUI z przyciskami uruchamiającymi rejestrację, rozpoznawanie i usuwanie twarzy. Zarejestrowane dane twarzy są przechowywane w pamięci Flash za pośrednictwem: file system.
  4. Treść notatki aplikacyjnej
    Notatka aplikacyjna przedstawia ekran GUI LVGL z przedwzmacniaczem kameryview oraz przyciski umożliwiające czynności związane z twarzą. Pomaga programistom zrozumieć framework i sposób implementacji rozpoznawania twarzy za pomocą dostarczonego example.

Nadview

Firma NXP wprowadziła na rynek zestaw rozwiązań rozwojowych o nazwie SLN-TLHMI-IOT, który koncentruje się na inteligentnych aplikacjach HMI. Umożliwia inteligentne HMI z interfejsem wizyjnym, głosowym i graficznym ML zaimplementowanym w jednym MCU NXP i.MX RT117H. Oprogramowanie rozwiązania opiera się na pakiecie SDK i opiera się na projekcie zwanym frameworkiem, który obsługuje elastyczne projekty i dostosowywanie funkcji wizyjnych i głosowych. Aby pomóc użytkownikom w lepszym korzystaniu z platformy oprogramowania, udostępniane są podstawowe dokumenty, npample, podręcznik użytkownika tworzenia oprogramowania. Przewodnik przedstawia podstawowy projekt oprogramowania i architekturę aplikacji, obejmującą wszystkie komponenty rozwiązania, w tym framework, który pomaga programistom łatwiej i wydajniej wdrażać aplikacje za pomocą SLN-TLHMI-IOT.
Więcej szczegółów na temat rozwiązania i odpowiednich dokumentów można znaleźć na stronie web strona inteligentnego rozwiązania HMI NXP EdgeReady opartego na i.MX RT117H z ML Vision, głosem i graficznym interfejsem użytkownika. Jednakże programistom nadal nie jest tak łatwo wdrożyć inteligentne aplikacje HMI, korzystając z tych podstawowych przewodników. Planowana jest seria not aplikacyjnych, które pomogą krok po kroku zbadać rozwój platformy. Niniejsza notatka aplikacyjna opiera się na wersji Implement LVGL GUI Camera Preview na platformie Framework (dokument AN14147). W tej notatce aplikacyjnej opisano, jak włączyć model algorytmu wizyjnego AI&ML do rozpoznawania twarzy w środowisku, aby zaimplementować funkcję rozpoznawania twarzy za pośrednictwem kamery wstępnejview na ekranie GUI za pomocą prostego interfejsu GUI LVGL, npample na płycie SLN-TLHMI-IOT. W nocie aplikacyjnej npample przedstawia ekran GUI LVGL z przedwzmacniaczem kameryview oraz kilka przycisków uruchamiających rejestrację, rozpoznawanie i usuwanie twarzy. Zarejestrowane dane twarzy są przechowywane w pamięci Flash za pośrednictwem małego urządzenia file system.

Na wysokim poziomie nota aplikacyjna zawiera następującą treść:

  • Włącz funkcję rozpoznawania twarzy w frameworku.
  • Dodaj obsługę bazy danych twarzy w ramach poprzez file system na Flashu.
  • Zaimplementuj aplikację GUI LVGL. Dzięki powyższym wstępom dokument ten pomaga programistom:
  • Zrozum głębiej strukturę i oprogramowanie inteligentnego rozwiązania HMI.
  • Rozwijaj rozpoznawanie twarzy AI i ML w ramach aplikacji LVGL GUI.

Ramy się skończyłyview
Oprogramowanie rozwiązania zostało zaprojektowane przede wszystkim w oparciu o architekturę framework, która składa się z kilku różnych części:

  • Menedżerowie urządzeń – główna część
  • Urządzenia warstwy abstrakcji sprzętu (HAL).
  • Wiadomości/Wydarzenia

Jak pokazano na rysunku 1, overview mechanizmu ramy jest:

Menedżerowie urządzeń odpowiadają za zarządzanie urządzeniami używanymi przez system. Każdy typ urządzenia (wejście, wyjście itd.) ma własnego menedżera urządzeń specyficznego dla typu. Gdy menedżer urządzeń uruchamia się po zarejestrowaniu w nim urządzeń, czeka i sprawdza komunikat o przesłaniu danych do urządzeń i innych menedżerów po inicjalizacji i uruchomieniu zarejestrowanych urządzeń. Urządzenia HAL są zapisywane na kodzie sterownika niższego poziomu, co pomaga zwiększyć zrozumiałość kodu poprzez abstrakcję wielu podstawowych szczegółów.

Zdarzenia to sposób przekazywania informacji pomiędzy różnymi urządzeniami za pośrednictwem ich menedżerów. Po wyzwoleniu zdarzenia urządzenie, które jako pierwsze odebrało zdarzenie, przekazuje je swojemu menedżerowi, a następnie powiadamia innych menedżerów wyznaczonych do odebrania zdarzenia.

NXP-AN14263-Implement-LVGL-GUI Rozpoznawanie twarzy na ramie-rys.- (1)

Projekt architektoniczny ramy skupiał się na trzech głównych celach:

  1. Łatwość użytkowania
  2. Elastyczność/przenośność
  3. Wydajność

Framework zaprojektowano z myślą o skróceniu czasu wprowadzania na rynek rozwiązań wizyjnych i innych aplikacji do uczenia maszynowego. Aby zapewnić szybkie wprowadzenie produktu na rynek, niezwykle ważne jest, aby samo oprogramowanie było łatwe do zrozumienia i modyfikowania. Mając ten cel na uwadze, architekturę frameworka można łatwo modyfikować, nie będąc ograniczającą i nie kosztem wydajności.
Więcej szczegółów na temat struktury można znaleźć w Podręczniku użytkownika oprogramowania Smart HMI Software Development (dokument MCU-SMHMI-SDUG).

Lekka i wszechstronna biblioteka graficzna (LVGL)
LVGL (Light and Versatile Graphics Library) to bezpłatna biblioteka graficzna o otwartym kodzie źródłowym, zapewniająca wszystko, czego potrzebujesz do stworzenia wbudowanego interfejsu GUI z łatwymi w użyciu elementami graficznymi, pięknymi efektami wizualnymi i niewielkim zużyciem pamięci.

Przewodnik GUI
GUI Guider to przyjazne dla użytkownika narzędzie do tworzenia graficznego interfejsu użytkownika firmy NXP, które umożliwia szybkie tworzenie wysokiej jakości wyświetlaczy przy użyciu biblioteki graficznej LVGL typu open source. Edytor „przeciągnij i upuść” GUI Guider ułatwia korzystanie z wielu funkcji LVGL, takich jak widżety, animacje i style, w celu stworzenia GUI z minimalnym kodowaniem lub w ogóle bez niego.

Jednym kliknięciem możesz uruchomić aplikację w symulowanym środowisku lub wyeksportować ją do projektu docelowego. Kod wygenerowany z GUI Guidera można łatwo dodać do swojego projektu, przyspieszając proces rozwoju i umożliwiając bezproblemowe dodanie wbudowanego interfejsu użytkownika do aplikacji. GUI Guider można używać bezpłatnie z MCU ogólnego przeznaczenia i crossoverami NXP i zawiera wbudowane szablony projektów dla kilku obsługiwanych platform. Aby dowiedzieć się więcej o rozwoju LVGL i GUI w GUI Guider, sprawdź Bibliotekę Lekkiej i Wszechstronnej Grafiki oraz GUI Guider.

Środowisko programistyczne

Najpierw przygotuj i skonfiguruj środowisko sprzętowe i programowe do wdrożenia example na frameworku.

Środowisko sprzętowe
Środowisko sprzętowe jest skonfigurowane do weryfikacji exampna:

  • Zestaw deweloperski inteligentnego HMI oparty na NXP i.MX RT117H (zestaw SLN_TLHMI_IOT)
  • SEGGER J-Link z 9-pinowym adapterem Cortex-M i sterownikiem V7.84a lub nowsza wersja

Środowisko oprogramowania
Środowisko oprogramowania jest skonfigurowane do rozwijania exampna:

  • MCUXpresso IDE V11.7.0
  • Przewodnik GUI V1.6.1-GA
  • lvgl_gui_camera_preview_cm7 – npampkod drugiej noty aplikacyjnej jako oprogramowanie bazowe rozwoju. Aby uzyskać szczegółowe informacje, zobacz https://mcuxpresso.nxp.com/appcodehub.
  • RT1170 SDK V2.13.0 – jako źródło kodu do rozwoju.
  • Oprogramowanie SLN-TLHMI-IOT V1.1.2 – kod źródłowy inteligentnego HMI opublikowany w repozytorium NXP GitHub jako źródło kodu do rozwoju. Aby uzyskać szczegółowe informacje, zobacz: GitHub – NXP/mcu-smhmi w wersji 1.1.2

Aby uzyskać szczegółowe informacje na temat nabycia i konfiguracji środowiska oprogramowania, zobacz: Pierwsze kroki z SLN-TLHMI-IOT.

Architektura wizji na frameworku

Architekturę wizji w frameworku pokazano na rysunku 2. Algo wizji HAL (OASIS_HAL) obejmuje następujące procesy:

  • Wykonaj rejestrację i rozpoznawanie twarzy za pomocą modelu algorytmu wizyjnego AI&ML po otrzymaniu powiązanych zdarzeń z wyjściowego interfejsu użytkownika HAL. Powiadom wyniki wnioskowania z modelu algorytmu do wyjściowego interfejsu użytkownika HAL.
  • Dostęp (dodawanie, usuwanie…) do bazy danych cech twarzy w oparciu o małe file systemu, wywołując interfejsy API FaceDB HAL po otrzymaniu powiązanych zdarzeń z wyjściowego interfejsu użytkownika HAL.
  • Żądaj klatki wideo kamery z HAL kamery podczas rejestracji i rozpoznawania twarzy.

NXP-AN14263-Implement-LVGL-GUI Rozpoznawanie twarzy na ramie-rys.- (3)

Zaimplementuj rozpoznawanie twarzy w frameworku

Rozpoznawanie twarzy LVGL GUI, npample (npampplik zostanie dostarczony później) na frameworku jest zaimplementowany w oparciu o exampkody plików Implement LVGL GUI Camera Preview na platformie Framework (dokument AN14147).

Za demonstrację rozpoznawania twarzy w example podstawowa funkcja aplikacji GUI (patrz ekran główny na rysunku 3) została zaprojektowana w sposób opisany poniżej:

  • Aplikacja GUI wyzwala zdarzenie rejestracji lub rozpoznawania twarzy w wyjściowym interfejsie użytkownika HAL po kliknięciu przycisku Rejestracja lub Rozpoznanie. Natomiast wyjściowy interfejs użytkownika HAL powiadamia o zdarzeniu dodania użytkownika do algorytmu wizyjnego HAL po pomyślnej rejestracji twarzy.
  • Aplikacja GUI wyzwala zdarzenie usunięcia użytkownika do wyjściowego interfejsu użytkownika HAL po kliknięciu przycisku Usuń użytkownika po rozpoznaniu twarzy użytkownika.
  • Aplikacja GUI wyzwala zdarzenie zatrzymania działania algorytmu oazy do wyjściowego interfejsu użytkownika HAL po kliknięciu ekranu poza przyciskami i obrazami.

NXP-AN14263-Implement-LVGL-GUI Rozpoznawanie twarzy na ramie-rys.- (10)

Przygotuj pakiet oprogramowania do wdrożenia example.

  • Sklonuj podstawowe oprogramowanie lvgl_gui_camera_preview_cm7. Zmień nazwę projektu i plik main filenazwę na lvgl_gui_face_rec_cm7.
  • Należy zaktualizować framework w oprogramowaniu, ponieważ kody źródłowe rdzenia frameworku zaczęły być publiczne w GitHub od wersji 1.1.2.
  • Zastąp folder framework kopią wersji 1.1.2 z GitHub, z wyjątkiem pliku files fwk_log.h i fwk_common.h w inc\, ponieważ zostały one zmodyfikowane na potrzeby serii not aplikacyjnych. Operacje pokazano na rysunku 4:NXP-AN14263-Implement-LVGL-GUI Rozpoznawanie twarzy na ramie-rys.- (11)
  • Usuń folder framework_cm7 w grupie libs i usuń bibliotekę framework_cm7 i jej ścieżkę wyszukiwania skonfigurowaną w Project > Properties > C/C++ Build > settings > Tool Settings > MCU C++ Linker > Libraries, ponieważ dostarczony jest kod źródłowy rdzenia.

Włącz funkcję rozpoznawania twarzy w frameworku
Funkcja rozpoznawania twarzy jest zbudowana w oparciu o model algorytmu wizyjnego ML dostarczany w postaci biblioteki statycznej – biblioteki wykonawczej Oasis Lite firmy NXP. Biblioteka to niewielka, bardzo wydajna, dostosowana i zoptymalizowana biblioteka AI. Model obejmuje wykrywanie twarzy, rozpoznawanie twarzy, wykrywanie szkła i wykrywanie aktywności. Udostępnia głównie funkcję API OASISLT_run_extended() do uruchamiania potoku rozpoznawania twarzy podczas aktualizowania wyników dla osoby wywołującej za pomocą wywołań zwrotnych zdarzeń oraz dodawania/aktualizowania/usuwania twarzy w bazie danych za pomocą wywołań zwrotnych bazy danych twarzy po określeniu informacji o ramce źródłowej, wywołań zwrotnych i pamięci pulę używaną przez bibliotekę, wywołując inną funkcję API OASISLT_init() podczas inicjalizacji. Wywoływanie API i funkcje zwrotne są zaimplementowane w algo HAL frameworka.

Dodaj bibliotekę modeli Vision Algo

  1. Skopiuj folder oaza zawierający bibliotekę i powiązany nagłówek file z inteligentnego HMI\coffee_machine\cm7\libs\ do folderu libs example SW.
  2. Dodaj ścieżkę wyszukiwania nagłówka file w Projekt > Właściwości > Kompilacja C/C++ > ustawienia > Ustawienia narzędzia > Kompilator MCU C > Zawiera i kompilator MCU C++ > Zawiera: „${workspace_loc:/${ProjName}/libs/oasis/include}”
  3. Dodaj bibliotekę i jej ścieżkę wyszukiwania w Projekt > Właściwości > Kompilacja C/C++ > ustawienia > MCU C+ + Linker > Biblioteki: liboasis_lite2D_DEFAULT_117f_ae.a „${workspace_loc:/${ProjName}/libs/oasis}” i definicję makra do włącz tę funkcję w Projekt > Właściwości > Kompilacja C/C++ > ustawienia > Ustawienia narzędzi > Kompilator MCU C > Preprocesor i kompilator MCU C++ > Preprocesor: SMART_TLHMI_2D

Włącz wizję algo HAL
Algo wizji HAL uruchamia model algo wizji i odpowiada na wyniki do wyjścia HAL interfejsu użytkownika po otrzymaniu od niego zdarzeń.

Aby to włączyć, sklonuj istniejący podobny sterownik HAL file gdzie zaimplementowane są poniższe funkcje:

  • Zaimplementuj wywołania zwrotne operacji na bazie danych twarzy i obsługi zdarzeń.
  • Uruchom algorytm wizji, wywołując interfejsy API biblioteki oasis.
  • Uzyskaj dostęp do bazy danych twarzy użytkownika i bazy danych aplikacji (nie jest to potrzebne w example).
  • Odbieraj zdarzenia i wysyłaj wyniki do wyjściowego interfejsu użytkownika HAL.

Główne prace nad wdrożeniem HAL npampsą:

  • Sklonuj istniejący podobny sterownik HAL file i zmień powiązane nazwy.
  • Usuń kody związane z operacjami na danych aplikacji.
  • Zaktualizuj definicje i funkcje do obsługi zdarzeń z wyjściowego interfejsu użytkownika HAL na przykładampprojekt.
  • Dodaj konfiguracje wymagane do inicjalizacji oazy.

Szczegółowe kroki przedstawiono poniżej:

  1. Klon hal_vision_algo_oasis_coffeemachine.c. Zmienić filenazwę na hal_vision_algo_oasis_guifacerec.c. I zamień wszystkie ciągi CoffeeMachine na GUIFaceRec w pliku file.
  2. Usuń kody zawierające ciąg kawowy (wielkość liter nie ma znaczenia) powiązane z bazą danych aplikacji, npample, #include hal_sln_coffeedb.h.
  3. Zmodyfikuj funkcję HAL_VisionAlgoDev_OasisGUIFaceRec_InputNotify() do obsługi zdarzeń z wyjściowego interfejsu użytkownika HAL.
    • Zmień definicję zdarzenia kEventFaceRecId_RegisterCoffeeSelection na kEventFaceRecId_RegisterUserFace i ciąg struktury regCoffeeSelection na regGUIFaceRec w celu obsługi zdarzenia w celu dodania nowych danych cech twarzy do bazy danych.
    • Aby pokazać standardowy proces rozpoznawania twarzy w example zmodyfikuj obsługę w przypadku kEventFaceRecID_OasisSetState o definicje stanów:
      • kOASISLiteState
      • Rejestracja kOASISLiteState
      • Uznanie kOASISLiteState
      • Zatrzymany
  4. Dodaj i zmodyfikuj definicje zdarzeń wymienionych w powyższym kroku.
    • Skopiuj nagłówek file smart_tlhmi_event_descriptor.h z smart HMI\coffee_machine \cm7\source\event_handlers\ do folderu source example SW. Zaktualizuj file jak poniżej:
    • Zmień definicję zdarzenia kEventFaceRecId_RegisterCoffeeSelection na kEventFaceRecId_RegisterUserFace w typie wyliczeniowym _event_smart_tlhmi_id i ciąg struktury regCoffeeSelection na regGUIFaceRec w strukturze _event_smart_tlhmi. Zmień więc strukturę Register_coffee_selection_event_t dla regCoffeeSelection na Register_gui_facerec_event_t.
    • Usuń zawartość else używaną w aplikacji ekspresu do kawy, npample, linia kodu dotycząca głosu: #include „hal_event_descriptor_voice.h”.
    • Dodaj typy kOASISLiteState_Stopped i kOASISLiteState_Running do typu wyliczeniowego oasis_lite_state_t w hal_vision_algo.h w ramach framework>hal>vision w projekcie, jak poniżej:
      typedef enum _oasis_lite_state {
      • kOASISLiteState
      • Uruchomiony, kOASISLiteState
      • Zatrzymano, kOASISLiteState
      • Uznanie,
      • kOASISLiteState
      • Rejestracja, kOASISLiteState
      • Wyrejestrowanie, kOASISLiteState
      • Zdalna rejestracja, kOASISLiteState
      • Liczyć
    • Użyj powyższej zaktualizowanej struktury oasis_lite_state_t, aby udoskonalić strukturę oasis_state_event_t w hal_event_descriptor_face_rec.h w ramach framework>hal>vision w projekcie jak poniżej: typedef struct _oasis_state_event_t { stan oasis_lite_state_t; } oasis_state_event_t;
  5. Zmień wszystkie kEventInfo_Remote na kEventInfo_Local w celu wysyłania zdarzeń z algorytmu wizyjnego HAL do innych HAL działających na tym samym rdzeniu, ponieważ w ex używany jest pojedynczy rdzeń zamiast dwurdzeniowegoample.
  6. Dodaj i zmodyfikuj poniższe konfiguracje inicjalizacji oazy w OASISLT_init():
    • Dodaj definicje makr i sekcje pamięci dla klatki wideo w board_define.h: #define OASIS_RGB_FRAME_WIDTH 800
      • #zdefiniuj OASIS_RGB_FRAME_HEIGHT 600
      • #zdefiniuj OASIS_RGB_FRAME_SRC_FORMAT kPixelFormat_YUV1P444_RGB
      • #zdefiniuj OASIS_RGB_FRAME_BYTE_PER_PIXEL 3
      • #define AT_FB_SHMEM_SECTION_ALIGN(var, wyrównane bajty) \
      • __attribute__((sekcja(“.bss.$fb_sh_mem,\”aw\”,%nobits @”))) var
      • __attribute__((wyrównane(alignbytes)))
    • Skonfiguruj przypisanie pamięci do powyższej sekcji pamięci fb_sh_mem w menu Projekt > Właściwości > Kompilacja C/C++ > Ustawienia MCU pokazane na rysunku 5:NXP-AN14263-Implement-LVGL-GUI Rozpoznawanie twarzy na ramie-rys.- (12)
    • Zadeklaruj zmienną globalną g_DTCOPBuf w lvgl_gui_face_rec_cm7.cpp: AT_NONCACHEABLE_SECTION_ALIGN_DTC (uint8_t g_DTCOPBuf[DTC_OPTIMIZE_BUFFER_SIZE], 4);
    • Kontynuuj dodawanie definicji użytych w powyższej zmiennej:
    • Zdefiniuj powyższą sekcję w board_define.h:
      • #define AT_NONCACHEABLE_SECTION_ALIGN_DTC(var, wyrównane bajty) \
      • atrybut__((sekcja(„.bss.$SRAM_DTC_cm7,\”aw\”,%nobits @”))) var
      • atrybut__((wyrównane(alignbytes)))
    • Dołącz nagłówek file hal_vision_algo.h zawierający definicję makra DTC_OPTIMIZE_BUFFER_SIZE w app_config.h zawartym w lvgl_gui_face_rec_cm7.cpp.
  7. Ustaw zmienną s_debugOption na true, aby wyświetlić stan postępu rozpoznawania twarzy.
  8. Dodaj ścieżkę wyszukiwania nagłówka filewizji HAL w projekcie > Właściwości > Kompilacja C/C++ > ustawienia > Ustawienia narzędzi > Kompilator MCU C > Zawiera i kompilator MCU C++ > Zawiera: „${workspace_loc:/${ProjName}/framework/hal/vision}”
  9. Dodaj poniższą definicję, aby włączyć algorytm wizyjny HAL w board_define.h: #define ENABLE_VISIONALGO_DEV_Oasis_GUIFaceRec

Włącz wyjściowy interfejs użytkownika HAL
Wyjściowy interfejs użytkownika HAL powiadamia o zdarzeniach algorytm wizyjny HAL i odpowiada na wyniki wniosków z algorytmu wizyjnego HAL. W przypadku aplikacji GUI zdarzenia są zwykle wyzwalane przez aplikację, a wyniki są wyświetlane w aplikacji.

Aby to włączyć, sklonuj istniejący podobny sterownik HAL file gdzie generalnie zaimplementowane są poniższe funkcje:

  • Powiadamiaj o zdarzeniach w celu rozpoznawania twarzy i dostępu do bazy danych.
  • Zaimplementuj wywołania zwrotne dla aplikacji GUI, aby wywołać zdarzenia.
  • Obsługuj wyniki wnioskowania z modułu algorytmu wizyjnego.
  • Pokaż proces i wyniki obsługi zdarzeń w interfejsie użytkownika za pomocą paska postępu kontrolowanego za pomocą liczników czasu i prostokąta przewodnika po twarzy.

Główne prace nad wdrożeniem HAL npamppliki użyte w tym dokumencie to:

  • Sklonuj istniejący podobny sterownik HAL file i zmień powiązane nazwy.
  • Usuń kody powiązane z aplikacją.
  • Zaktualizuj funkcje powiadamiania o zdarzeniach i reagowania na wyniki na przykładampprojekt.
  • Dodaj wywołania zwrotne dla aplikacji GUI, aby wywołać zdarzenia.

Szczegółowe kroki przedstawiono poniżej:

  1. Sklonuj hal_output_ui_coffee_machine.c. Zmienić filenazwa na hal_output_ui_guifacerec.c.
  2. Zamień wszystkie ciągi CoffeeMachine na GUIFaceRec w pliku file.
  3. Usuń kody powiązane z aplikacją – ekspresem do kawy.
    • Usuń funkcje WakeUp() i _StandBy() oraz powiązane kody (można wyszukać dla nich ciągi wake_up i standby).
    • Usuń wstępnieview zdarzenia trybu obsługujące powiązane kody w HAL_OutputDev_UiGUIFaceRec_Input Notify().
    • Usuń funkcje UI_xxx_Callback() i kody zawierające ciąg gui_ i ekran powiązane z GUI ekspresu do kawy, z wyjątkiem gui_set_virtual_face() dla preview Funkcja trybu.
    • Usuń wszystkie kody związane ze zmiennymi s_IsWaitingAnotherSelection i s_IsWaitingRegisterSelection związanymi z aplikacją ekspresu do kawy.
    • Usuń kody związane z głosem, dźwiękiem i językiem. Na przykładampna:
      • #include „hal_voice_algo_asr_local.h”,
      • #include „hal_event_descriptor_voice.h”
  4. W przypadku powiadamiania o różnych zdarzeniach zaimplementuj nowe funkcje _OutputManagerNotify(), _SetFaceRec(), _RegisterGUIFaceRec() i DeregisterGUIFaceRec() odwołujące się do funkcji _StopFaceRec(), _RegisterCoffeeSelection() i DeregisterCoffeeSelection() przed ich usunięciem.
    • Funkcja _OutputManagerNotify() implementuje podstawową funkcję wyjścia zdarzeń, aby wysłać zdarzenie do algorytmu wizyjnego HAL. Poniższe funkcje wywołują go w celu wysyłania własnych zdarzeń.
    • Funkcja _SetFaceRec() wysyła zdarzenie kEventFaceRecID_OasisSetState w celu uruchomienia algorytmu wizyjnego w celu rejestracji twarzy, rozpoznawania i zatrzymania algo.
    • Funkcja _RegisterGUIFaceRec() wysyła zdarzenie kEventFaceRecId_RegisterGUIFaceRec zdefiniowane w smart_tlhmi_event_descriptor.h w celu dodania danych cech twarzy do bazy danych, gdy rejestracja przebiegnie pomyślnie.
    • Funkcja DeregisterGUIFaceRec() wysyła zdarzenie kEventFaceRecID_DelUser w celu usunięcia danych cech twarzy z bazy danych podczas przekazywania rozpoznawania twarzy.
  5. Zaktualizuj kody, aby podjąć odpowiednie działania, w tym odświeżyć GUI, wywołując interfejsy API z aplikacji LVGL GUI w celu uzyskania wyników wnioskowania rejestracji twarzy i rozpoznawania w funkcji _InferComplete_Vision() na przykładampprojekt LE. Na przykładample, gdy rejestracja twarzy zakończy się pomyślnie,
    • Zatrzymaj wyświetlanie postępu, wywołując funkcję _FaceRecProcess_Stop();
    • Zatrzymaj rejestrację twarzy, wywołując funkcję _SetFaceRec(kOASISLiteState_Stopped);
    • Pokaż pomyślny wynik w GUI: gui_show_face_rec_result(kFaceRecResult_OK, s_UserId);
    • Zarejestruj dane twarzy w bazie danych: _RegisterUserFace(s_UserId);
  6. Dodaj funkcje wywołania zwrotnego interfejsu użytkownika do obsługi zdarzeń: preview, rejestracja twarzy, rozpoznawanie i usuwanie użytkownika wywołane z poziomu GUI. Na przykładample, wywołanie zwrotne rejestracji twarzy: void UI_Registration_Callback(){ _SetFaceRec(kOASISLiteState_Registration); _FaceRecProcess_Start(); }
    • Dodaj także funkcje _FaceRecProcess_Start() i _FaceRecProcess_Stop(), aby pokazać postęp i status różnych zdarzeń i wyników.
    • Zaktualizuj funkcję wywołania zwrotnego ISR timera _SessionTimer_Callback(), aby obsłużyć przypadek przekroczenia limitu czasu, wywołując: gui_show_face_rec_result(kFaceRecResult_TimeOut, s_UserId);
  7. Dodaj poniższe definicje, aby włączyć wyjście HAL interfejsu użytkownika w board_define.h: #define ENABLE_OUTPUT_DEV_UiGUIFaceRec

Ogłoszenie:
Aby lepiej zaprezentować funkcję rozpoznawania twarzy, należy zachować funkcję, która będzie pokazywać proces i wyniki rozpoznawania twarzy w wyjściowym interfejsie użytkownika HAL. Funkcja jest opisana poniżej

  • Prostokąt prowadnicy twarzy ma kolor niebieski, a pasek postępu pokazuje postęp podczas rozpoczynania rejestracji lub rozpoznawania twarzy.
  • Prostokąt prowadnicy twarzy zmieni kolor na czerwony, jeśli rejestracja twarzy zakończy się pomyślnie.
  • Prostokąt prowadnicy twarzy zmienia kolor na zielony, gdy rozpoznanie twarzy zakończy się pomyślnie.
  • Prostokąt prowadnicy twarzy pozostaje niebieski, a pasek postępu pokazuje pełny postęp, jeśli akcja zakończy się niepowodzeniem po upływie limitu czasu. W tym momencie zatrzymaj rejestrację lub rozpoznawanie twarzy.

Pasek postępu i prostokąt przewodnika po ekranie są prezentowane jako ikony wbudowane w plik binarny zasobu file do zaprogramowania we Flashu. Wskaźniki do danych ikon w SDRAM-ie są ustawiane w funkcji LoadIcons(APP_ICONS_BASE) wywoływanej podczas inicjalizacji urządzenia wyjściowego UI HAL w wyjściowym UI HAL. Musi implementować obsługę ikon dla tej funkcji.

Zaimplementuj obsługę ikon

  1. Zbuduj zasób łączący ikony z obrazami używanymi w aplikacji LVGL GUI:
    • Sklonuj nagłówek z czterema ikonami files Process_bar_240x14.h, virtual_face_blue_420x426.h, virtual_face_green_420x426.h i virtual_face_red_420x426.h z inteligentnego HMI
      \ekspres do kawy\resource\icons\ do nowych ikon folderów w folderze zasobów example SW.
    • Dodaj ścieżkę wyszukiwania dla ikony czterech filejest w kamerze_preview_resource.txt file w folderze zasobów, npampplik: ikona ../resource/icons/process_bar_240x14.h
    • Uruchom kamerę_preview_resource_build.bat do tworzenia zasobów obrazów i ikon w celu wygenerowania kosza file kamera_preview_resource.bin i informacje file Resource_information_table.txt (patrz rysunek 6).NXP-AN14263-Implement-LVGL-GUI Rozpoznawanie twarzy na ramie-rys.- (13)
  2. Zdefiniuj adres początkowy SDRAM-u i rozmiar ikon w app_config.h. Adres zaczyna się obok obrazów aplikacji GUI. Rozmiar jest generowany w informacjach file. #zdefiniuj APP_ICONS_BASE (APP_RES_SHMEM_BASE + APP_LVGL_IMGS_SIZE) #zdefiniuj APP_ICONS_SIZE 0x107c40
  3. Zaktualizuj przypisany rozmiar sekcji pamięci o nazwie res_sh_mem do 0x200000, ponownie definiując go w app_config.h: #define RES_SHMEM_TOTAL_SIZE 0x200000 i odpowiednie ustawienie w Projekt > Właściwości > C/C++ Build > Ustawienia MCU.
  4. Dodaj rozmiar ikony do całkowitego rozmiaru zasobu załadowanego z Flash do SDRAM-u w funkcji APP_LoadResource() w głównym file lvgl_gui_face_rec_cm7.cpp: memcpy((void *)APP_LVGL_IMGS_BASE, pLvglImages, APP_LVGL_IMGS_SIZE + APP_ICONS_SIZE);

Ogłoszenie: Aby móc korzystać z funkcji rozpoznawania twarzy, wymagana jest obsługa aplikacji LVGL GUI. Funkcje wywołania zwrotnego interfejsu użytkownika w wyjściowym interfejsie użytkownika HAL są wywoływane przez aplikację LVGL GUI w celu obsługi zdarzeń z ekranu interfejsu użytkownika. Z drugiej strony wyjściowy interfejs użytkownika HAL wywołuje interfejsy API z aplikacji LVGL GUI w celu zaktualizowania interfejsu użytkownika w celu pokazania wyniku i stanu. Rozwój aplikacji LVGL GUI jest stosunkowo niezależny i przedstawiony w sekcji 4.3.

4.1.5 Uruchom urządzenia i menedżery HAL do rozpoznawania twarzy
Włączony algorytm wizyjny HAL i wyjściowy interfejs użytkownika HAL oraz ich menedżerowie są uruchamiani w trybie głównym file
lvgl_gui_face_rec_cm7.cpp po konwersji rozwoju na framework jak poniżej:

  1. Dołącz nagłówek file powiązane z dwoma menedżerami HAL, dodając linię kodu:
    • #include ”fwk_output_manager.h”
    • #include „fwk_vision_algo_manager.h”
  2. Zadeklaruj urządzenia HAL:
    • HAL_VALGO_DEV_DECLARE(OasisGUIFaceRec);
    • HAL_OUTPUT_DEV_DECLARE(UiGUIFaceRec);
  3. Zarejestruj urządzenia HAL:
    • HAL_VALGO_DEV_REGISTER(OasisGUIFaceRec, ret);
    • HAL_OUTPUT_DEV_REGISTER(UiGUIFaceRec, ret);
  4. Zainicjuj menedżerów:
    • FWK_MANAGER_INIT(VisionAlgoManager, ret);
    • FWK_MANAGER_INIT(Menedżer wyjść, ret);
  5. Uruchom menedżerów:
    • FWK_MANAGER_START(VisionAlgoManager, VISION_ALGO_MANAGER_TASK_PRIORITY, ret);
    • FWK_MANAGER_START(OutputManager, OUTPUT_MANAGER_TASK_PRIORITY, ret);
  6. Zdefiniuj priorytet zadań menedżera:
    • #zdefiniuj VISION_ALGO_MANAGER_TASK_PRIORITY 3
    • #zdefiniuj WYJŚCIE_MANAGER_TASK_PRIORITY 1

Dodaj obsługę bazy danych twarzy w frameworku
Dostęp do zarejestrowanych danych cech twarzy można uzyskać w bazie danych twarzy przechowywanej w pamięci Flash za pomocą narzędzia Little file system. Poniżej opisano kroki dodawania obsługi bazy danych twarzy.

Dodaj sterowniki do pamięci Flash
Skopiuj sterownik FlexSPI interfejsu Flash files fsl_flexspi.c i fsl_flexspi.h oraz sterownik szyfrowania danych files fsl_caam.c i fsl_caam.h ze ścieżki SDK_2_13_0_MIMXRT1170-EVK\devices \MIMRX1176\drivers\ do folderu sterowników example SW.

Dodaj obsługę na poziomie płyty

  1. Dodaj definicje FlexSPI używane dla urządzenia Flash na pokładzie w board.h:
    • #zdefiniuj BOARD_FLEXSPI FLEXSPI1
    • #zdefiniuj BOARD_FLEXSPI_CLOCK kCLOCK_FlexSpi1
    • #zdefiniuj BOARD_FLEXSPI_AMBA_BASE FlexSPI1_AMBA_BASE
  2. Skopiuj operatory i konfiguracje files urządzenia Flash flexspi_nor_flash_ops.c, flexspi_nor_flash_ops.h, sln_flash_config.c, sln_flash_config_w25q256jvs.h, andsln_flash_ops.h pod ścieżką smart HMI\coffee_machine\cm7\source\flash_config\ do folderu example SW.
    • Odznacz opcję „Wyklucz zasób z kompilacji” w kompilacji C/C++ > Ustawienia po kliknięciu prawym przyciskiem myszy files i otwarcie właściwości, aby umożliwić wbudowanie ich w projekt.
  3. Zmień dołączony nagłówek filezmień nazwę sln_flash_config.h na sln_flash_config_w25q256jvs.h w sln_flash_config.c i flexspi_nor_flash_ops.h.
  4. Ustaw źródło zegara FlexSPI1 w pliku file clock_config.c odnoszący się do aplikacji ekspresu do kawy.

Dodaj obsługę adaptera i średniego poziomu

  1. Kopiuj files sln_flash.c, sln_flash.h, sln_encrypt.c i sln_encrypt.h jako sterowniki adaptera dla file system i aplikację ze ścieżki smart HMI\coffee_machine\cm7\source\ do folderu źródłowego example. Zaktualizuj nowe files:
    • Aby móc budować, odznacz na nich opcję „Wyklucz zasób z kompilacji”.
    • Zmień cały dołączony nagłówek file nazwij sln_flash_config.h na sln_flash_config_w25q256jvs.h.
  2. Skopiuj folder filesystem zawierający API dla najmłodszych filesystem i sterownik HAL z inteligentnego HMI \coffee_machine\cm7\source\ do example SW. I zaktualizuj nowy folder:
    • Aby móc budować, odznacz na nim opcję „Wyklucz zasób z kompilacji”.
    • Dodaj do niego ścieżkę dołączania w ustawieniach projektu: „${workspace_loc:/${ProjName}/filesystem}"
    • Zmień dołączony nagłówek file nazwij sln_flash_config.h na sln_flash_config_w25q256jvs.h i fica_definition.h na app_config.h w file sln_flash_littlefs.h.
  3. Skopiuj folder Littlefs zawierający oprogramowanie pośrednie – Little filesystem ze ścieżki SDK_2_13_0_ MIMXRT1170-EVK\middleware\ do example SW. I zaktualizuj nowy folder:
    • Aby móc budować, odznacz na nim opcję „Wyklucz zasób z kompilacji”.
    • Dodaj do niego ścieżkę dołączania w ustawieniach projektu: „${workspace_loc:/${ProjName}/littlefs}”

Dodaj sterowniki HAL 

  • Istnieją dwa urządzenia HAL – file system i baza danych twarzy HAL obsługiwane dla funkcji dostępu do bazy danych i są już zaimplementowane w środowisku bez żadnych zmian. Włącz je, dodając poniższe definicje w board_define.h:
    • #zdefiniuj ENABLE_FLASH_DEV_Littlefs
    • #zdefiniuj ENABLE_FACEDB

I zmień nazwę bazy danych twarzy dla exampplik: #define OASIS_FACE_DB_DIR „oasis_gui_face_rec”

Dodaj obsługę na poziomie aplikacji

  1. Zaktualizuj plik główny file lvgl_gui_face_rec_cm7.cpp:
    • Dołącz nagłówek file związane z Flashem file menedżer systemu HAL, dodając linię kodu: #include „fwk_flash.h”
    • Zadeklaruj i zarejestruj file urządzenie systemowe HAL:
      • HAL_FLASH_DEV_DECLARE(Littlefs);
      • HAL_FLASH_DEV_REGISTER(Littlefs, ret);
        Notatka:Ten file systemowe urządzenie HAL musi zostać zarejestrowane przed zainicjowaniem wszystkich menedżerów urządzeń w funkcji APP_InitFramework().
    • Wywołaj funkcję BOARD_ConfigMPU() w APP_BoardInit(), aby skonfigurować MPU.
  2. Ustaw file przypisanie systemu do Flasha w file app_config.h, definiując definicje makr używane w pliku file sln_flash_littlefs.h:
    • #zdefiniuj FICA_IMG_FILE_SYS_ADDR (FLASH_IMG_SIZE + RES_SHMEM_TOTAL_SIZE)
    • #zdefiniuj FICA_FILE_SYS_SIZE (0x280000)

Konfiguracje
Niektóre kody związane z Flashem są wykonywane w obszarze SRAM ITC w celu zapewnienia wystarczającej wydajności. Skopiuj folder linkscripts zawierający konfiguracje linkera ze ścieżki smart HMI\coffee_machine\cm7\ do example SW.

Zaimplementuj aplikację GUI LVGL
Rozwój aplikacji LVGL GUI opartej na frameworku wywołuje interfejsy API z wyjściowego interfejsu użytkownika HAL i zapewnia interfejsy API do wyjściowego interfejsu użytkownika HAL (patrz sekcja 4.1.3, aby zapoznać się z implementacją wyjściowego interfejsu użytkownika HAL).

Jednakże szczegółowa implementacja aplikacji LVGL GUI zależy od wymagań i projektu aplikacji. Aplikacja GUI w tym przykładzieampPlik został zaprojektowany w sposób opisany na początku sekcji Sekcja 4.

Poniżej wprowadzenie do wdrożenia:

  1. Dostosowane kody są zaimplementowane w plikachcustom.c icustom.h udostępnianych przez GUI Guider jako interfejs pomiędzy projektem GUI Guider a projektem systemu wbudowanego.
    •  Dodaj nowe funkcje o nazwie gui_xxx() w pliku custom.c, aby uzyskać poniższe funkcje:
      • Do wyjściowego interfejsu użytkownika HAL i aplikacji GUI do aktualizacji interfejsu użytkownika.
      • Aby aplikacja GUI mogła wyzwalać zdarzenia poprzez wywołanie funkcji wywołania zwrotnego interfejsu użytkownika z wyjściowej warstwy interfejsu użytkownika HAL.
        Na przykładample nowa funkcja gui_event_face_rec_action() wywołuje funkcje wywołania zwrotnego interfejsu użytkownika w celu obsługi jednego ze zdarzeń rejestracji twarzy, rozpoznawania twarzy i usuwania użytkownika wyzwalanych z aplikacji GUI po kliknięciu odpowiedniego przycisku.
        Uwaga: Funkcja gui_set_virtual_face() wywołana w wyjściowym interfejsie użytkownika HAL dla preview tryb musi zostać zaimplementowany w pliku niestandardowym.c:
    •  Klonuj funkcję gui_set_virtual_face() z inteligentnego HMI\coffee_machine\cm4\custom \custom.c.
    •  Zmień nazwę widżetu home_img_cameraPreview do screen_img_camera_preview w funkcji.
    •  Zaimplementuj funkcje wywołania zwrotnego interfejsu użytkownika z tym samym prototypem do wszystkich w wyjściowym interfejsie użytkownika HAL pod kontrolą definicji makra #ifndef RT_PLATFORM w pliku niestandardowe.c, aby zachować kompatybilność z projektem GUI Guider, ponieważ te funkcje w wyjściowym interfejsie użytkownika HAL są zależne od wbudowana platforma. W Custom.c zależą one od symulatora w przewodniku GUI i są niezależne od platformy wbudowanej. Na przykładample, wywołanie zwrotne rejestracji twarzy jest zaimplementowane jak poniżej dla działającego symulatora GUI Guider: #ifndef RT_PLATFORM void UI_Registration_Callback() { gui_hide_del_user_btn(true); s_InAction = fałsz; powrót; }
      Notatka: Odwołaj się do tego samego prototypu funkcji wprowadzonej w kroku 6 w rozdziale 4.1.3
      Definicja makra RT_PLATFORM jest ustawiana w ustawieniach projektu MCUXpresso, jak pokazano na rysunku 7:NXP-AN14263-Implement-LVGL-GUI Rozpoznawanie twarzy na ramie-rys.- (14)
    • Zadeklaruj wszystkie funkcje o nazwach UI_xxx_Callback() i gui_xxx() w pliku niestandardowe.h i dodaj plik niestandardowe.h zawarte w pliku smart_tlhmi_event_descriptor.h, aby udostępnić interfejsy API GUI do wyjściowej warstwy interfejsu użytkownika HAL.
  2. Opracuj GUI w GUI Guider:
    • Sklonuj folder kamery preview zawierający oprogramowanie projektowe GUI Guider w folderze gui_guider w podstawowym pakiecie oprogramowania lvgl_gui_camera_preview_cm7. Zmień powiązaną nazwę Camera_preview do face_rec dla nowego byłegoample.
    • Skopiuj powyższy zaktualizowany plik niestandardowe.c i niestandardowe. h do nowego oprogramowania projektowego GUI Guider.
    •  Otwórz nowy projekt face_rec w GUI Guider. Zaktualizuj jak poniżej:
      • Dodaj nowy przycisk o nazwie Usuń użytkownika. Dodaj do niego flagę Ukryty, aby przycisk był ukryty po uruchomieniu aplikacji GUI.
      • Dodaj linię kodu wywołującą API gui_event_face_rec_action() z innym parametrem identyfikatora zdarzenia na wyzwalaczu „Zwolniony” w Ustawieniach zdarzenia wszystkich przycisków Rejestracja, Rozpoznanie i Usuń użytkownika w celu wywołania zdarzeń rejestracji twarzy, rozpoznawania twarzy i usuwania użytkownika. Rysunek 8 przedstawia kod zdarzenia przycisku Rejestracja:NXP-AN14263-Implement-LVGL-GUI Rozpoznawanie twarzy na ramie-rys.- (15)
  3. Zaktualizuj wygenerowany kod z GUI Guidera do projektu MCUXpresso.
    • Zastąp zawartość z wyjątkiem obrazów folderów w folderze wygenerowanym oprogramowania projektu MCUXpresso odpowiednimi plikami w folderze wygenerowanym oprogramowania projektu GUI Guider.

Notatka: Więcej szczegółów na temat wprowadzonych powyżej modyfikacji można znaleźć w exampoprogramowanie pod adresem https://mcuxpresso.nxp.com/appcodehub.

Weryfikacja z byłymample projekt

Aby zdobyć byłegoample zawierający zasoby i narzędzia potrzebne do tej noty aplikacyjnej, odwiedź stronę: https://mcuxpresso.nxp.com/appcodehub. Otwórz byłegoample projekt na MCUXpresso IDE. Zbuduj i zaprogramuj plik .axf file na adres 0x30000000 i zaprogramuj pojemnik na zasoby file kamera_preview_resource.bin na adres 0x30800000.

Rozpoznawanie twarzy LVGL GUI, npample działa normalnie jak poniżej:

  • Przedview: Po włączeniu strumienie wideo przechwycone przez kamerę są wyświetlane w określonym obszarze przedwzmacniacza kameryview na ekranie GUI. Na etykiecie stanu wyświetlany jest komunikat „Wstępview…”. Szczegóły znajdziesz na rysunku 3. Przycisk Usuń użytkownika jest ukryty. Kliknięcie obszaru poza przyciskami i obrazami powoduje wyświetlenie pliku preview stan jak powyżej po zakończeniu rejestracji lub rozpoznawania twarzy.
  • Rejestracja:
    • tarta: Po kliknięciu przycisku Rejestracja rozpoczyna się rejestracja twarzy. Etykieta stanu zmieni się na „Rejestracja…”, prostokąt prowadnicy twarzy zmieni kolor na niebieski, a pasek postępu zacznie pokazywać postęp. Upewnij się, że twarz użytkownika jest widoczna w niebieskim prostokącie prowadnicy twarzy w celu rejestracji.
    • sukces: Etykieta stanu pokazuje „Rejestracja…OK” i numer identyfikacyjny zarejestrowanego użytkownika. Prostokąt prowadnicy twarzy zmienia kolor na czerwony, jeśli rejestracja twarzy przebiegła pomyślnie, zanim na pasku pojawi się pełny postęp.
    • Błąd -> Przekroczono limit czasu: Etykieta stanu pokazuje „Rejestracja… Przekroczono limit czasu”, jeśli rejestracja twarzy w dalszym ciągu nie powiodła się, a na pasku widać pełny postęp.
    • Niepowodzenie -> Duplikacja: Etykieta stanu pokazuje „Rejestracja… Nie powiodła się”, prostokąt prowadnicy twarzy staje się zielony, jeśli zarejestrowana twarz zostanie rozpoznana, zanim na pasku pojawi się pełny postęp.
  • poznanie:
    • Uruchamianie: Po kliknięciu przycisku Rozpoznawanie rozpoczyna się rozpoznawanie twarzy. Etykieta stanu zmieni się na „Rozpoznanie…”, prostokąt prowadnicy twarzy zmieni kolor na niebieski, a pasek postępu zacznie pokazywać postęp. Upewnij się, że twarz użytkownika jest widoczna w niebieskim prostokącie prowadnicy twarzy w celu rejestracji.
    • sukces: Etykieta stanu pokazuje „Rozpoznanie… OK” i rozpoznany numer identyfikacyjny użytkownika. Prostokąt przedstawiający twarz zmienia kolor na zielony, jeśli rozpoznanie twarzy zakończy się pomyślnie, zanim postęp będzie widoczny na pasku. W tym miejscu pojawia się przycisk Usuń użytkownika. Oznacza to, że użytkownik może zostać usunięty dopiero po jego rozpoznaniu.
    • choroba: Etykieta stanu pokazuje „Rozpoznanie… Przekroczono limit czasu”, jeśli rozpoznawanie twarzy w dalszym ciągu nie powiedzie się, a na pasku widać pełny postęp.
  • Usuń użytkownika: Po kliknięciu przycisku „Usuń użytkownika”, po pomyślnym rozpoznaniu twarzy, etykieta stanu zmienia się na „Usuń użytkownika… OK”, prostokąt prowadnicy twarzy zmienia kolor na niebieski, a postęp jest wyświetlany w całości na pasku. Przycisk Usuń użytkownika jest ponownie ukryty. Rozpoznana twarz/użytkownik zostanie usunięta z bazy danych. Oznacza to, że ta twarz/użytkownik nie może zostać rozpoznana, dopóki nie zostanie ponownie zarejestrowana.

Uwaga dotycząca kodu źródłowego w dokumencie
Exampkod pliku pokazany w tym dokumencie jest objęty następującymi prawami autorskimi i licencją BSD-3-Clause:

Copyright 2024 NXP Redystrybucja i wykorzystanie w formie źródłowej i binarnej, z modyfikacjami lub bez, są dozwolone pod warunkiem spełnienia następujących warunków:

  1. Przy redystrybucji kodu źródłowego należy zachować powyższą informację o prawach autorskich, niniejszą listę warunków oraz poniższe wyłączenie odpowiedzialności.
  2. Redystrybucje w formie binarnej muszą zawierać powyższą informację o prawach autorskich, niniejszą listę warunków i następujące wyłączenie odpowiedzialności w dokumentacji i/lub innych materiałach muszą być dołączone do dystrybucji.
  3. Ani nazwa właściciela praw autorskich, ani nazwiska jego współpracowników nie mogą być wykorzystywane do wspierania lub promowania produktów pochodzących z tego oprogramowania bez uprzedniej pisemnej zgody

TO OPROGRAMOWANIE JEST DOSTARCZANE PRZEZ POSIADACZY PRAW AUTORSKICH I WSPÓŁPRACOWNIKÓW „W STANIE, W JAKIM SIĘ ZNAJDUJE”, A WSZELKIE WYRAŹNE LUB DOROZUMIANE GWARANCJE, W TYM MIĘDZY INNYMI DOROZUMIANE GWARANCJE PRZYDATNOŚCI HANDLOWEJ I PRZYDATNOŚCI DO OKREŚLONEGO CELU, SĄ WYŁĄCZONE. W ŻADNYM WYPADKU POSIADACZ PRAW AUTORSKICH LUB WSPÓŁPRACOWNICY NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK BEZPOŚREDNIE, POŚREDNIE, PRZYPADKOWE, SPECJALNE, PRZYKŁADOWE LUB WTÓRNE SZKODY (W TYM, ALE NIE TYLKO, NABYCIE TOWARÓW LUB USŁUG ZASTĘPCZYCH; UTRATĘ UŻYTKOWANIA, DANYCH LUB ZYSKÓW; LUB PRZERWĘ W DZIAŁALNOŚCI), NIEZALEŻNIE OD PRZYCZYNY I NA JAKIEJKOLWIEK PODSTAWIE ODPOWIEDZIALNOŚCI, CZY TO NA PODSTAWIE UMOWY, ODPOWIEDZIALNOŚCI ŚCISŁEJ, CZY CZYNU NIEDOZWOLONEGO (W TYM ZANIEDBANIA LUB INNEGO), POWSTAŁE W JAKIKOLWIEK SPOSÓB Z UŻYTKOWANIA TEGO OPROGRAMOWANIA, NAWET JEŚLI ZOSTALI POINFORMOWANI O MOŻLIWOŚCI WYSTĄPIENIA TAKIEGO USZKODZENIA.

Historia rewizji

NXP-AN14263-Implement-LVGL-GUI Rozpoznawanie twarzy na ramie-rys.- (16)

Informacje prawne

Definicje
Wersja robocza — status wersji roboczej dokumentu wskazuje, że jego treść jest nadal poddawana wewnętrznej weryfikacji.view i podlega formalnej akceptacji, co może skutkować modyfikacjami lub uzupełnieniami. NXP Semiconductors nie składa żadnych oświadczeń ani gwarancji co do dokładności lub kompletności informacji zawartych w wersji roboczej dokumentu i nie ponosi odpowiedzialności za konsekwencje wykorzystania takich informacji.

Zastrzeżenie

  • Ograniczona gwarancja i odpowiedzialność — Uważa się, że informacje zawarte w tym dokumencie są dokładne i wiarygodne. Firma NXP Semiconductors nie udziela jednak żadnych oświadczeń ani gwarancji, wyraźnych lub dorozumianych, co do dokładności lub kompletności takich informacji i nie ponosi odpowiedzialności za konsekwencje wykorzystania takich informacji. Firma NXP Semiconductors nie ponosi odpowiedzialności za treść tego dokumentu, jeśli została dostarczona przez źródło informacji spoza firmy NXP Semiconductors.
    W żadnym wypadku firma NXP Semiconductors nie ponosi odpowiedzialności za jakiekolwiek szkody pośrednie, przypadkowe, karne, specjalne lub wynikowe (w tym – bez ograniczeń – utracone zyski, utracone oszczędności, przerwy w działalności, koszty związane z usunięciem lub wymianą jakichkolwiek produktów lub opłatami za przeróbkę), niezależnie od tego, czy lub nie, takie odszkodowania są oparte na czynie niedozwolonym (w tym zaniedbaniu), gwarancji, naruszeniu umowy lub jakiejkolwiek innej teorii prawnej.
    Niezależnie od jakichkolwiek szkód, które klient może ponieść z jakiegokolwiek powodu, łączna i skumulowana odpowiedzialność firmy NXP Semiconductors wobec klienta za produkty opisane w niniejszym dokumencie jest ograniczona zgodnie z Warunkami sprzedaży komercyjnej NXP Semiconductors.
  • Prawo do wprowadzania zmian — Firma NXP Semiconductors zastrzega sobie prawo do wprowadzania zmian w informacjach opublikowanych w tym dokumencie, w tym między innymi w specyfikacjach i opisach produktów, w dowolnym czasie i bez powiadomienia. Niniejszy dokument zastępuje i zastępuje wszystkie informacje dostarczone przed publikacją niniejszego dokumentu.
  • Przydatność do użycia — Produkty NXP Semiconductors nie są projektowane, autoryzowane ani objęte gwarancją, aby były odpowiednie do użytku w systemach lub sprzęcie podtrzymującym życie, krytycznych dla życia lub bezpieczeństwa, ani w zastosowaniach, w których można racjonalnie oczekiwać, że awaria lub nieprawidłowe działanie produktu NXP Semiconductors spowoduje obrażenia ciała, śmierć lub poważne szkody materialne lub środowiskowe. Firma NXP Semiconductors i jej dostawcy nie ponoszą odpowiedzialności za włączenie i/lub wykorzystanie produktów NXP Semiconductors w takim sprzęcie lub zastosowaniach, a zatem takie włączenie i/lub użycie odbywa się na własne ryzyko klienta.
  • Aplikacje — Aplikacje opisane w niniejszym dokumencie dla dowolnego z tych produktów służą wyłącznie celom ilustracyjnym. Firma NXP Semiconductors nie składa żadnych oświadczeń ani gwarancji, że takie aplikacje będą odpowiednie do określonego zastosowania bez dalszych testów lub modyfikacji.
    Klienci są odpowiedzialni za projektowanie i działanie swoich aplikacji i produktów wykorzystujących produkty NXP Semiconductors, a NXP Semiconductors nie ponosi żadnej odpowiedzialności za jakąkolwiek pomoc związaną z aplikacjami lub projektowaniem produktów klienta. Klient ponosi wyłączną odpowiedzialność za określenie, czy produkt NXP Semiconductors jest odpowiedni i odpowiedni do zastosowań klienta i planowanych produktów, a także do planowanego zastosowania i użytkowania przez klientów zewnętrznych klienta. Klienci powinni zapewnić odpowiednie zabezpieczenia projektowe i operacyjne, aby zminimalizować ryzyko związane z ich zastosowaniami i produktami. NXP Semiconductors nie ponosi żadnej odpowiedzialności związanej z jakimkolwiek uchybieniem, szkodami, kosztami lub problemami wynikającymi z jakichkolwiek słabości lub uchybień w aplikacjach lub produktach klienta, bądź też w zastosowaniach lub użytkowaniu przez klientów zewnętrznych klienta. Klient jest odpowiedzialny za wykonanie wszystkich niezbędnych testów swoich aplikacji i produktów przy użyciu produktów NXP Semiconductors, aby uniknąć nieprawidłowego działania aplikacji i produktów, aplikacji lub użytkowania przez klientów zewnętrznych klienta. NXP nie ponosi żadnej odpowiedzialności w tym zakresie.
  • Regulamin sprzedaży komercyjnej — Produkty NXP Semiconductors są sprzedawane zgodnie z ogólnymi warunkami sprzedaży komercyjnej opublikowanymi na stronie https://www.nxp.com/profile/warunki, o ile nie uzgodniono inaczej w ważnej pisemnej umowie indywidualnej. W przypadku zawarcia indywidualnej umowy zastosowanie mają wyłącznie warunki odpowiedniej umowy. NXP Semiconductors niniejszym wyraźnie sprzeciwia się stosowaniu ogólnych warunków klienta w odniesieniu do zakupu produktów NXP Semiconductors przez klienta.
  • Kontrola eksportu — Niniejszy dokument, jak również elementy w nim opisane, mogą podlegać przepisom dotyczącym kontroli eksportu. Wywóz może wymagać uprzedniego zezwolenia właściwych organów.
  • Przydatność do stosowania w produktach kwalifikowanych poza motoryzacją — O ile w dokumencie wyraźnie nie stwierdzono, że ten konkretny produkt NXP Semiconductors jest zakwalifikowany do zastosowań motoryzacyjnych, produkt ten nie nadaje się do użytku w motoryzacji. Nie jest kwalifikowany ani testowany zgodnie z wymaganiami testów motoryzacyjnych lub aplikacji. NXP Semiconductors nie ponosi żadnej odpowiedzialności za włączenie i/lub wykorzystanie zakwalifikowanych produktów innych niż motoryzacyjne w sprzęcie lub zastosowaniach motoryzacyjnych.
    W przypadku, gdy klient używa produktu do projektowania i użytkowania w zastosowaniach motoryzacyjnych zgodnie ze specyfikacjami i standardami motoryzacyjnymi, klient (a) będzie używał produktu bez gwarancji NXP Semiconductors na produkt do takich zastosowań motoryzacyjnych, użytkowania i specyfikacji oraz ( b) za każdym razem, gdy klient używa produktu do zastosowań motoryzacyjnych wykraczających poza specyfikacje NXP Semiconductors, takie użytkowanie odbywa się wyłącznie na własne ryzyko klienta oraz (c) klient w pełni zwalnia firmę NXP Semiconductors z wszelkiej odpowiedzialności, szkód lub roszczeń dotyczących nieudanego produktu wynikających z zaprojektowania i użytkowania przez klienta produkt do zastosowań motoryzacyjnych poza standardową gwarancją NXP Semiconductors i specyfikacjami produktów NXP Semiconductors.
  • Tłumaczenia — Nieangielska (przetłumaczona) wersja dokumentu, w tym zawarte w nim informacje prawne, służy wyłącznie jako odniesienie. Wersja angielska ma pierwszeństwo w przypadku jakichkolwiek rozbieżności między wersją przetłumaczoną a wersją angielską.
  • Bezpieczeństwo — Klient rozumie, że wszystkie produkty NXP mogą być narażone na niezidentyfikowane luki lub mogą obsługiwać ustalone standardy bezpieczeństwa lub specyfikacje ze znanymi ograniczeniami. Klient jest odpowiedzialny za projekt i działanie swoich aplikacji i produktów przez cały cykl ich życia, aby ograniczyć wpływ tych luk na aplikacje i produkty klienta. Odpowiedzialność Klienta obejmuje również inne otwarte i/lub zastrzeżone technologie obsługiwane przez produkty NXP do użytku w aplikacjach Klienta. NXP nie ponosi odpowiedzialności za jakiekolwiek luki w zabezpieczeniach. Klient powinien regularnie sprawdzać aktualizacje zabezpieczeń od NXP i podejmować odpowiednie działania następcze. Klient wybiera produkty z zabezpieczeniami, które najlepiej odpowiadają zasadom, przepisom i standardom zamierzonego zastosowania oraz podejmuje ostateczne decyzje projektowe dotyczące swoich produktów i ponosi wyłączną odpowiedzialność za zgodność ze wszystkimi wymogami prawnymi, regulacyjnymi i związanymi z bezpieczeństwem dotyczącymi swoich produktów, niezależnie od jakichkolwiek informacji lub wsparcia, które może być zapewnione przez NXP.

NXP posiada zespół reagowania na incydenty związane z bezpieczeństwem produktów (PSIRT) (dostępny pod adresem PSIRT@nxp.com), który zarządza badaniem, raportowaniem i wydawaniem rozwiązań dotyczących luk w zabezpieczeniach produktów NXP.
NXP BV — NXP BV nie jest spółką operacyjną i nie zajmuje się dystrybucją ani sprzedażą produktów.

Znaki towarowe
Ogłoszenie: Wszystkie wymienione marki, nazwy produktów, nazwy usług i znaki towarowe są własnością ich odpowiednich właścicieli.

NXP — znak słowny i logo są znakami towarowymi firmy 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 — są znakami towarowymi i/lub zastrzeżonymi znakami towarowymi firmy Arm Limited (lub jej spółek zależnych lub stowarzyszonych) w Stanach Zjednoczonych i/lub gdzie indziej. Powiązana technologia może być chroniona dowolnymi lub wszystkimi patentami, prawami autorskimi, projektami i tajemnicami handlowymi. Wszelkie prawa zastrzeżone.

  • i.MX — jest znakiem towarowym NXP BV
  • J-Link — jest znakiem towarowym firmy SEGGER Microcontroller GmbH.

Microsoft, Azure i ThreadX — są znakami towarowymi grupy firm Microsoft.

Należy pamiętać, że ważne informacje dotyczące niniejszego dokumentu i produktów w nim opisanych zostały zawarte w części „Informacje prawne”.

© 2024 NXP BV
Więcej informacji znajdziesz na stronie: https://www.nxp.com

  • Data wydania: 19 kwietnia 2024
  • Identyfikator dokumentu: AN14263

Często zadawane pytania

P: Jaki jest główny cel tego produktu?
O: Głównym celem jest włączenie funkcji rozpoznawania twarzy przy użyciu modelu algorytmu widzenia AI&ML z prostym interfejsem graficznym LVGL np.ample na płycie SLN-TLHMI-IOT.

P: W jaki sposób programiści mogą skorzystać z tej noty aplikacyjnej?
Odp.: Programiści mogą dowiedzieć się, jak krok po kroku wdrożyć rozpoznawanie twarzy w środowisku, korzystając z dostarczonego przykładuample i zrozumieć menedżerów urządzeń, urządzenia HAL i powiązane mechanizmy zdarzeń.

Dokumenty / Zasoby

NXP AN14263 Implementuje rozpoznawanie twarzy LVGL GUI w środowisku Framewor [plik PDF] Instrukcja użytkownika
AN14263 Implementacja rozpoznawania twarzy LVGL GUI na platformie Framewor, AN14263, Implementacja rozpoznawania twarzy LVGL GUI na platformie Framewor, Rozpoznawanie twarzy LVGL GUI na platformie Framewor, Rozpoznawanie twarzy na platformie Framewor, Rozpoznawanie na platformie Framewor

Odniesienia

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *