v4.8.1

Wersja v4.8.1 jest oparta na Qt Creator 14.0.2 i koncentruje się na nowym, wysoce niezawodnym protokole kamery OpenMV V2, wbudowanym Code Profiler oraz na procesie zapisu, który utrzymuje kamerę zamontowaną zamiast ją odłączać. Dołączone oprogramowanie układowe oraz pełny zestaw przykładów zostały zaktualizowane do wersji 4.8.1. Nie ma żadnych zmian łamiących API skryptów, ale zachowanie polegające na tym, że zapis nie odłącza już urządzenia, oraz usunięcie kilku flag szeregowych uruchamianych przy starcie to widoczne dla użytkownika zmiany w sposobie pracy.

Najważniejsze zmiany

  • OpenMV Protocol V2 to nowy, wysoce niezawodny stos kamery (OMVCamera/OMVTransport/OMVDebug) z CRC32, sekwencjonowaniem, ACK/NAK, retransmisją, zdarzeniami i fragmentacją. Jest on automatycznie negocjowany przy połączeniu i obsługuje reset, rozruch, strumieniowanie, wykonywanie skryptów oraz statystyki.

  • Code Profiler to nowe okno (Window > Show Code Profiler), które odczytuje rekordy profilowania dla poszczególnych funkcji z kamery i pokazuje liczbę wywołań, min/maks/sumę/średnią mikrosekund (μs), średnią liczbę cykli, procent oraz liczniki zdarzeń w sortowalnej tabeli.

  • Save in place nie odłącza już dysku kamery; IDE zapisuje teraz main.py i opróżnia wolumin na dysk, dzięki czemu urządzenie pozostaje zamontowane.

  • Wykrywanie wielu sensorów raportuje każdą kamerę na płytce, wyświetlając ją na pasku stanu jako Sensors: X, Y, z głównym sensorem na pierwszej pozycji.

  • Dynamic Frame Reading ponownie oblicza najlepiej dopasowaną surową rozdzielczość strumieniowania dla każdego formatu pikseli i automatycznie rekonfiguruje strumień.

  • Dołączone oprogramowanie układowe i przykłady zostały zaktualizowane do wersji 4.8.1 na wszystkich płytkach, z dodaniem nowych przykładów dla kamery zdarzeniowej GenX320, TensorFlow ML, Alif OLED oraz nakładek LCD/Touch-LCD.

Nowe funkcje

  • Dodano protokół komunikacyjny OpenMV V2: pełną warstwę transportu i transakcji z CRC32, sekwencjonowaniem, ACK/NAK, retransmisją, zdarzeniami i fragmentacją, a także klasę OMVCamera automatycznie negocjowaną przy połączeniu i zintegrowaną ze sterownikiem szeregowym (2fde9eb3f, fff1bf2ba, 8c41fcfad, 7fc7ed4bc, 84c3956af, 669039adf, a49259852, 07af1922a, 85f0c7c87, 5070cc213, e314459cc, e0367ca95, 0da2f79d0, 2b6fc9866, 534ecffbe).

  • Dodano okno Code Profiler (Window > Show Code Profiler), które odczytuje rekordy profilowania dla poszczególnych funkcji i wyświetla liczbę wywołań, min/maks/sumę/średnią mikrosekund (μs), średnią liczbę cykli, procent oraz liczniki zdarzeń, rozwiązując adresy do symboli za pomocą dołączonego parsera ELF ELFIO (019d3cd2c, 57cd9e1cc).

  • Dodano okno dialogowe Debug Protocol Settings pokazujące na żywo System Info, Host Stats oraz Device Stats odświeżane co sekundę, udostępniające częstotliwości odpytywania dla poszczególnych kanałów oraz przełączniki sterujące odpytywaniem łączonym lub rozdzielonym (5220a6125, 0da2f79d0).

  • Dodano wykrywanie wielu sensorów: płytka z więcej niż jedną kamerą raportuje je wszystkie na pasku stanu jako Sensors: X, Y, z głównym sensorem na początku (cebc79ce7).

  • Dodano Dynamic Frame Reading (domyślnie włączone), które ponownie oblicza najlepiej dopasowaną surową rozdzielczość strumieniowania dla każdego formatu pikseli (BINARY, GRAY, RGB565, ARGB8, JPEG, PNG) i rekonfiguruje strumień (75c073bdb, 0da2f79d0).

  • Dodano dekodowanie bufora ramki dla surowych formatów pikseli BINARY (1-bpp mono) oraz ARGB8 (32-bitowa alfa), dzięki czemu te typy obrazów są teraz renderowane w podglądzie (dabb82062).

  • W systemie Windows funkcja Connect skanuje teraz urządzenia USB oznaczone przez system operacyjny jako problematyczne i ostrzega listą wadliwych urządzeń, które mogą blokować połączenie (1a5beb081, 1b59cd78e).

  • Dodano wskaźnik rejestracji na pasku stanu: zielony przycisk Registered lub koralowy Unregistered dla podłączonej kamery, klikalny w celu zarejestrowania płytki (a8c98a4b9).

  • Podgląd bufora ramki może teraz wyświetlać wyśrodkowany komunikat tekstowy wysłany z działającego skryptu za pomocą nowego kodu ucieczki FB_MESSAGE zamiast obrazu (530048201).

  • Dodano nowe pozycje do model-zoo: modele estymacji głębi ST FastDepth (224/256/320), model pozy punktów charakterystycznych głowy ST, modele dłoni do wykrywania dłoni i punktów charakterystycznych ręki oraz model wykrywania twarzy z przodu BlazeFace (551668410, 4d64556d4, fadd6c4ed, b8277bb88, a8c98a4b9).

  • Dodano skrypt autotestu dostępny wyłącznie w kompilacji fabrycznej (kamera, IMU, ToF, WiFi, LAN), który jest dołączany i automatycznie otwierany przy uruchomieniu w fabrycznym wariancie IDE (0db7fbbb0); część testu dotycząca LAN dla RT1060 jest obecnie wyłączona (48370d022).

Inne zmiany i usprawnienia

  • Save in place: zapis skryptu nie odłącza już dysku kamery; IDE zapisuje main.py i opróżnia wolumin na dysk (FlushFileBuffers w systemie Windows, syncfs w systemie Linux, sync_volume_np/F_FULLFSYNC w systemie macOS), dzięki czemu urządzenie pozostaje zamontowane (1614c572f, 6928b51ea, 35ed53967).

  • Akcje na pasku narzędzi klikane, gdy kamera jest zajęta (wyłączenie bufora ramki, kompresja JPEG, zapis skryptu, konfiguracja ustawień), są teraz kolejkowane i uruchamiane automatycznie, gdy urządzenie jest wolne, zamiast wyświetlać okno dialogowe błędu Busy (f4315f0a4).

  • Podgląd bufora ramki domyślnie dopasowuje teraz obraz do widoku, dzięki czemu przy uruchomieniu jest on automatycznie skalowany do okna, a panel wyjścia terminala szeregowego jest teraz domyślnie wyświetlany przy starcie (f3ce4dc75).

  • Skompilowane pliki modeli z rozszerzeniem .lite są teraz rozpoznawane wszędzie: przy filtrowaniu i wyświetlaniu w przeglądarce model-zoo, przy wyrównywaniu ROMFS oprogramowania układowego, a kompilatory Vela/STEdge AI generują teraz wyjście .lite (f3ce4dc75).

  • Okno dialogowe kompilacji modelu STEdge AI (N6) analizuje teraz i raportuje procentowe zużycie pamięci RAM NPU oraz hyperRAM, a także kopiuje przeniesione wyjście sieci do pliku zgodnego z rozszerzeniem modelu (f3ce4dc75).

  • Przeglądarka model-zoo pokazuje teraz kolumnę Size z rozmiarem pliku i rozciąga kolumnę nazwy, aby ją dopasować, zamiast ukrywać rozmiar (f3ce4dc75).

  • Szablon nowego skryptu został zaktualizowany do nowego API modułu csi i domyślnie używa rozmiaru ramki VGA, a dołączony przykład Hello World przełączono z rozmiaru ramki QVGA na VGA (f3ce4dc75).

  • Okno dialogowe Convert Video zostało przepisane tak, aby korzystało ze wspólnego okna ładowania z kolorowym wyjściem, komunikatami o powodzeniu/niepowodzeniu, przyciskiem OK do zamknięcia oraz czytelnym błędem, gdy FFMPEG jest niedostępny na danej platformie (f56efc7be).

  • Podgląd bufora ramki pokazuje teraz migające ostrzeżenie, gdy obraz JPEG/PNG jest zbyt duży, aby go zbuforować i wysłać, za pomocą nowego kodu ucieczki FB_BUFFER_ERROR (fda826126).

  • Wejście do bootloadera DFU wymusza teraz pozostanie bootloadera rezydentnego w oprogramowaniu układowym z protokołem V2, z wykrywaniem wersji, które wraca do zwykłego resetu na starszych bootloaderach (<1.0.2), które mogłyby się zawiesić przy wymuszeniu (975857221).

  • Zmieniono nazwy i zreorganizowano foldery modeli wykrywania obiektów ST (st_yolo_lc_v1 na yolo_lc, tiny_yolo_v2 na yolo_v2, modele osób yolov8n na pliki o prostych nazwach zawierających rozmiar) oraz usunięto duże warianty int8 tiny_yolo_v2 (34240cc3c).

  • Czasy transmisji szeregowej są teraz dostrajane za pomocą kluczy nadpisania protocol w pliku settings.json oprogramowania układowego (overrideReadTimeout, overrideReadStallTimeout, overridePerCommandWait oraz kluczy V2 overrideCRC/overrideSEQ/overrideACK) zamiast za pomocą flag wiersza poleceń przy uruchomieniu (019d8bf1d).

  • Ustawiono limit długości wiersza serwera języka Python na 120 kolumn dla flake8 i pycodestyle, dzięki czemu długie wiersze nie są już oznaczane przy domyślnej wartości 79 (dabb82062).

  • Zmniejszono dołączony zestaw modeli uczenia maszynowego, przenosząc kolekcję modeli Qualcomm oraz google/mobilenet_v1 do models_unused, aby zmniejszyć instalator (c44ddba20).

Poprawki błędów

  • Okna dialogowe postępu pobierania oprogramowania układowego i aktualizacji zasobów zabezpieczono przed awarią za pomocą strażników QPointer, dzięki czemu nie używają już usuniętego okna dialogowego, jeśli zostanie ono zamknięte w trakcie pobierania (f3ce4dc75).

  • Skanowanie dysków ponawia teraz próby aż do znalezienia dysku USB kamery i czyści nieaktualne wpisy dysków przy rozłączeniu, usuwając wcześniejszą prowizorkę z jednorazowym licznikiem czasu (a31d41b4e).

  • Kilka poprawek połączenia i komunikacji szeregowej: ukryte sensory (np. SoftCSI) nie zaśmiecają już wyświetlanego typu sensora, licznik czasu podtrzymujący połączenie szeregowe w systemie Windows zapobiega zawieszeniom USB, Start nie uruchamia ponownie już działającego skryptu, a kanał kamery jest czysto rozłączany przy zamknięciu portu (a8e467be6).

  • Widok profilera przywrócił wybór licznika zdarzeń PMU dla poszczególnych kolumn (zaznaczalne menu zdarzeń) oraz zapisywanie stanu licznika/nagłówka, które zostało tymczasowo wyłączone (40c679e90).

Obsługa platform i narzędzi

  • Baza Qt Creator: 14.0.2.

  • Dołączone oprogramowanie układowe: zaktualizowane z 4.7.0 do 4.8.1, z ponowną kompilacją oprogramowania układowego dla OPENMV2/3/4/4P/PT, OPENMV_N6, OPENMV_AE3, OPENMV_RT1060 oraz płytek Arduino GIGA/Nicla Vision/Portenta H7 (2657818ca).

  • Naprawiono uzgadnianie wersji protokołu w systemie macOS dla płytek RT1062 i AE3 poprzez podzielenie wielokomendowego transferu USB na części o rozmiarze USBDBG_LEN, które te płytki potrafią obsłużyć (6b9d5f842).

  • Przebudowano dołączony pakiet sterowników dla systemu Windows: dodano podpisane pliki sterowników .cat/.inf dla poszczególnych płytek (AE3, H7, H7Plus, M4, M7, N6, Pico/PT, RT1062) i przeniesiono sterowniki szeregowe CDC do nowego folderu openmvcdc z automatycznym instalatorem opartym na dpinst (439557829, ba3b01bfb).

  • Dodano obsługę starszych rewizji sensora kamery MT9V032 poprzez zarejestrowanie identyfikatorów sensorów 0x1311 i 0x1312 (obok istniejącego 0x1313) jako MT9V0X2 (eaaa624e3).

Zmiany łamiące zgodność

To wydanie nie wprowadza żadnych zmian łamiących API skryptów, ale zawiera kilka widocznych dla użytkownika zmian w sposobie pracy:

  • Zapis skryptu nie odłącza już ani nie demontuje dysku USB kamery. IDE opróżnia teraz bufory woluminu w miejscu, dzięki czemu urządzenie pozostaje zamontowane po zapisie.

  • Flagi szeregowe uruchamiane przy starcie -override_read_timeout (domyślnie 5000 ms), -override_read_stall_timeout (domyślnie 1000 ms) oraz -override_per_command_wait (domyślnie 1 ms, 2 ms w systemie macOS) zostały usunięte; czasy transmisji szeregowej są teraz konfigurowane za pomocą kluczy nadpisania protocol w pliku settings.json oprogramowania układowego (019d8bf1d).

  • Dołączone bootloadery są teraz dostarczane wyłącznie jako .bin; pliki oprogramowania układowego i bootloadera .dfu dla poszczególnych płytek zostały usunięte.