v3.0.0

v3.0.0 to główne wydanie v2 → v3. Wprowadza OpenMV Cam M7 (STM32F7) oraz nowy moduł sieci neuronowej CMSIS-NN nn (zastępujący stare, zakodowane na stałe metody find_number() / classify_object()), dodaje wsparcie sensorów MT9V034 z migawką globalną i FLIR Lepton, rozmiary ramek sensor.WVGA oraz aktualizuje rdzeń do MicroPython 1.9.4. Zmieniło się kilka zachowań image / sensor / WiFi — przeczytaj poniższe zmiany powodujące niezgodność.

Najważniejsze zmiany

  • OpenMV Cam M7 — nowa płytka STM32F7.

  • Moduł nn — wnioskowanie CMSIS-NN: nn.load(), Net.forward(), Net.search(), z konwerterem modeli i przykładami.

  • Nowe sensory — MT9V034 z migawką globalną (wyzwalany przez FSIN) oraz FLIR Lepton.

  • Aktualizacja rdzenia MicroPython 1.9.4.

  • Niezgodność: zakodowane na stałe image.find_number() / image.classify_object() zostały usunięte, sensor.sleep() zgłasza teraz wyjątek, gniazda WINC zwracają rzeczywistą liczbę bajtów, image.binary() zwraca nowy obraz, a find_apriltags() jest ograniczone do 64K pikseli — zobacz zmiany powodujące niezgodność.

Nowe funkcje

  • nn — nowy moduł sieci neuronowej CMSIS-NN: nn.load(path), Net.forward(img, roi=, softmax=, dry_run=) (zwraca liczby zmiennoprzecinkowe 0.0–1.0), Net.search() do wykrywania w wielu skalach/pozycjach oraz Net.test(), a także konwerter modeli CMSIS-NN (nn_convert.py / nn_quantizer.py), dołączone modele CIFAR-10 / LeNet / smile oraz przykładowe skrypty NN i NN-search.

  • Sensory — wsparcie MT9V034 z migawką globalną (zrzut obrazu wyzwalany przez FSIN) na OpenMV 4, zaktualizowany sterownik FLIR Lepton ze zrzutem obrazu Lepton oraz nowe rozmiary ramek sensor.WVGA (720x480) / sensor.WVGA2 (752x480).

  • Obrazowanieimage.find_circles() zyskało słowa kluczowe r_min / r_max / r_step (szybsze Hough), find_keypoints() oraz funkcja Haar find_features() akceptują teraz obrazy RGB, a image.compress() / kodowanie JPEG obsługuje teraz obrazy binarne (bitmapy).

  • Rozruchboot.py uruchamia się teraz przed inicjalizacją USB, dzięki czemu może nadpisać tryb USB (np. HID).

  • Przykłady — dodano przykłady AprilTag w małej i wysokiej rozdzielczości, przykład I2C LIDAR-Lite V3 oraz narzędzia do zbiorów danych (augment_images.py / make_patches.py).

Inne zmiany i usprawnienia

  • Zaktualizowano dołączony MicroPython do 1.9.4 (z cofnięciem zmiany parse/compile/exec w pyexec i poprawką PendSV); czytelniejsze komunikaty o braku pamięci fb_alloc / xalloc; wyciszono szum printf z nn podczas ładowania sieci; zreorganizowano repozytorium (przykłady → scripts/, narzędzia → tools/, kaskady Haar → ml/). Moduł nn jest niedostępny na OpenMV 2 (niewystarczająca pamięć flash).

Poprawki błędów

Obrazowanie:

  • Naprawiono fast_atan2f dla x≤0 (wcześniej zawsze 0 — ponownie sprawdź kąty plam (blob) / linii / punktów kluczowych), obsługę pamięci find_apriltags() (utracona zawartość i błędne realloc przy braku pamięci), wskaźniki wierszy binarnych/bitmapowych dla każdej wartości bpp (uszkodzone wyniki binarne), find_edges(EDGE_CANNY) z ROI, makro TO_GS_PIXEL (integral / morph), strumieniowanie bitmap/JPEG dla ramek w skali szarości (bpp==0), pop_front listy punktów kluczowych/plam (blob) oraz wyniki match_descriptor.

System i kamera:

  • Naprawiono numery interfejsu/punktu końcowego USB HID, dynamiczną zmianę częstotliwości XCLK w czasie działania, zwracanie przez Net.forward() poprawnej liczby wyjść oraz hardfault podczas przerywania parsowania skryptu.

Wsparcie sprzętu i płytek

  • OpenMV Cam M7 (STM32F7) — nowa płytka.

  • Sensor MT9V034 z migawką globalną (OpenMV 4, wyzwalany przez FSIN).

  • FLIR Lepton — zaktualizowany sterownik ze wsparciem zrzutu obrazu.

Zmiany API powodujące niezgodność

Widoczne dla użytkownika zmiany API powodujące niezgodność pomiędzy v2.9.0 a v3.0.0. Zakres: C-moduły Pythona w modules/ oraz biblioteki Pythona w scripts/libraries/.

Każda zmiana jest oznaczona swoim wpływem:

  • major — dotyczy większości skryptów używających danej funkcji; konieczne będzie przeniesienie kodu.

  • minor — wąskie API; dotyczy wyłącznie skryptów, które go używały.

  • behavior — to samo API, inne wyniki; ponownie sprawdź dostrojone skrypty.

Zmiany są pogrupowane według wpływu w tej kolejności. Jeśli chcesz po prostu przenieść swój kod, przejdź do listy kontrolnej migracji na końcu. Każdy skrót hasza commita prowadzi do jego diffu na GitHubie.

Usunięto image.find_number() / image.classify_object() (major)

Zakodowane na stałe metody image.find_number() (LeNet) oraz image.classify_object() (CMSIS CNN) zostały usunięte na rzecz nowego modułu nn. Zastąp je przez net = nn.load('/model.network'); out = net.forward(img).

Commity: d151f7e38

sensor.sleep() / sensor.reset() zgłaszają wyjątek przy niepowodzeniu (minor)

sensor.sleep() i sensor.reset() zgłaszają teraz wyjątek przy niepowodzeniu zamiast zwracać True / False. Kod, który sprawdzał wartość logiczną zwracaną przez sensor.sleep(), musi zamiast tego opakować wywołanie w try / except.

Commity: 7d16d008f

Gniazda WINC zwracają rzeczywistą liczbę bajtów (behavior)

Metody gniazd WINC1500 send / recv / sendto / recvfrom wcześniej zawsze zwracały 0; teraz zwracają rzeczywistą liczbę przesłanych bajtów. Kod, który zakładał zwracanie 0 (lub zapętlał się/blokował na tej wartości), musi obsłużyć rzeczywiste liczby.

Commity: a07fb2f60

image.binary() zwraca nowy obraz (behavior)

image.binary() zyskało słowa kluczowe to_bitmap / copy i zwraca teraz nowy obiekt obrazu zamiast zwracać/modyfikować obraz źródłowy w miejscu. Kod, który polegał na modyfikowaniu oryginalnego obrazu przez binary(), powinien używać zwróconego obiektu (i przekazywać copy=True dla zachowania bez modyfikacji w miejscu).

Commity: 8a44f0cd9

find_apriltags() ograniczone do 64K pikseli (behavior)

image.find_apriltags() zgłasza teraz wyjątek, jeśli obraz (lub ROI) przekracza 64K pikseli, i zwraca pustą listę dla obrazów mniejszych niż 4x4. Zmniejsz duże obrazy (użyj mniejszego framesize lub przekaż jawne roi) przed wywołaniem find_apriltags().

Commity: bd77afbc0

Lista kontrolna migracji

Dla czystego przeniesienia na v3.0.0 typowa praca to:

  1. Zastąp image.find_number() / image.classify_object() modułem nn (migracja nn).

  2. Opakuj sensor.sleep() / sensor.reset() w try / except zamiast sprawdzać zwracaną wartość logiczną (zmiana sensor.sleep).

  3. Obsłuż rzeczywiste liczby bajtów z gniazda WINC send / recv (zmiana gniazda WINC).

  4. Używaj obrazu zwracanego przez image.binary() zamiast oczekiwać modyfikacji w miejscu (zmiana binary).

  5. Zmniejszaj obrazy przed find_apriltags(), aby pozostać poniżej 64K pikseli (ograniczenie find_apriltags).

Wszystkie pozostałe skrypty działają bez zmian.