v3.9.0

v3.9.0 to wydanie główne. Dodaje port nRF z Arduino Nano 33 BLE Sense (kamera, moduł PDM audio, ulab, zamrożone sterowniki sensorów), wprowadza sensory termiczne FLIR Lepton oraz MLX90641 / MLX90621 i gruntownie przebudowany moduł fir, ioctle autofokusu OV5640 oraz nowy typ strumieniowania image.ImageIO. Usunięto przestarzały moduł CMSIS-NN nn oraz stare klasy ImageReader / ImageWriter — przeczytaj poniżej o zmianach niekompatybilnych wstecznie.

Najważniejsze zmiany

  • Arduino Nano 33 BLE Sense — nowy port nRF52840 z kamerą, modułem PDM audio, ulab oraz zamrożonymi sterownikami sensorów.

  • Termowizja — obsługa FLIR Lepton, MLX90641 i MLX90621 z przebudowanym modułem fir (palety, lustrzane odbicie, skalowanie, radiometria, FFC).

  • Autofokus OV5640 — nowe ioctle sensor.IOCTL_*_AUTO_FOCUS.

  • image.ImageIO — ujednolicony typ strumienia obrazu (pamięć lub plik; read/write/seek/size/close) zastępujący ImageReader / ImageWriter.

  • Niekompatybilne wstecznie: moduł CMSIS-NN nn oraz image.ImageReader / image.ImageWriter zostały usunięte, a zachowanie find_lines() / fir uległo zmianie — zobacz zmiany niekompatybilne wstecznie.

Nowe funkcje

  • Port nRF / Arduino Nano 33 BLE Sense — nowy port nRF52840 i obsługa płytki, z nowym modułem audio (audio.init(), audio.start_streaming(), audio.stop_streaming()), włączonym ulab oraz zamrożonymi sterownikami sensorów apds9960 / lps22h / lsm9ds1 / hts221.

  • image.ImageIO — nowy typ strumienia obrazu obsługujący zarówno strumienie pamięciowe, jak i plikowe za pomocą read() / write() / seek() / size() / close(), wraz z przykładami odczytu/zapisu/pamięci ImageIO.

  • FLIR Lepton — dodano obsługę FIR_LEPTON z fir.radiometric(), fir.trigger_ffc() i fir.register_vsync_cb().

  • Sensory termiczne — dodano obsługę MLX90641 (FIR_MLX90641) i termostosu MLX90621 (oficjalne sterowniki Melexis).

  • palety / orientacja fir — dodano stałe fir.PALETTE_RAINBOW / PALETTE_IRONBOW / GRAYSCALE / RGB565, a fir.read_ir() przyjmuje teraz hmirror / vflip / transpose.

  • Autofokus OV5640 — dodano sensor.IOCTL_TRIGGER_AUTO_FOCUS / IOCTL_PAUSE_AUTO_FOCUS / IOCTL_RESET_AUTO_FOCUS / IOCTL_WAIT_ON_AUTO_FOCUS (OpenMV 2/3/4/4 Plus/PT/Portenta).

  • Zreorganizowano przykłady Arduino do katalogów dla poszczególnych płytek.

Inne zmiany i ulepszenia

  • Przełączono na skompresowane komunikaty błędów MicroPython (krótsze ciągi wyjątków); argument type w fir.init() automatycznie wykrywa teraz sensor poprzez skanowanie magistrali I2C, gdy zostanie pominięty; wyjątek xalloc raportuje teraz liczbę żądanych bajtów; UART 8 został włączony na Portenta; przykłady FIR skonsolidowano do thermal_camera.py / thermal_overlay.py / thermal_overlay_lcd.py. Aby zmieścić się w pamięci flash, image.get_similarity() oraz wyszukiwanie selektywne wyłączono w buildzie OpenMV 4, a bibliotekę obrazu można teraz zbudować bez systemu plików (dla płytek bez systemu plików).

Poprawki błędów

Kamera i sensory:

  • Naprawiono obliczanie PCLK OV5640, dodano brakujące procedury obsługi przerwań I2C (naprawiając zawieszanie transferów I2C), przebudowano odczyt/zapis I2C cambus dla niezawodności, umożliwiono wybór magistrali I2C Lepton, przeniesiono piny przywracania magistrali cambus do konfiguracji dla poszczególnych płytek, ponawianie skanowania cambus raz przed niepowodzeniem oraz uruchomiono OpenMV PT (Lepton + kamera dzielące I2C).

Termowizja:

  • Naprawiono obliczanie wartości maksymalnej w fir get_ir() / draw_ir() oraz image.get_similarity() (FLT_MIN-FLT_MAX), obsługę AMG8833 12→16-bit oraz dokładność MLX90621 (oficjalny sterownik Melexis).

Wyświetlacz, audio i system:

  • Przeniesiono transfery STM32 SPI LCD na wywołania zwrotne HAL SPI (niezawodność wyświetlacza), naprawiono audio.init() na Nano 33 (oscylator HF + współczynnik PDM, aby mikrofon działał), stan licznika czasu H7 z nowym HAL, gc_collect na nRF oraz wczesną inicjalizację/deinicjalizację płytki, a także zaprzestano wypisywania błędnego komunikatu „uh oh, no preference for overlapping detection” podczas find_apriltags() / find_rects().

Sprzęt i obsługa płytek

  • Arduino Nano 33 BLE Sense — nowa płytka nRF52840 (kamera, audio PDM, ulab, zamrożone sterowniki sensorów).

  • Sensory termiczne FLIR Lepton, MLX90641 i MLX90621.

  • Autofokus OV5640 — OpenMV 2/3/4/4 Plus/PT/Portenta.

  • Portenta — włączono UART 8.

Niekompatybilne zmiany API

Widoczne dla użytkownika zmiany niekompatybilne wstecznie w API między v3.8.0 a v3.9.0. Zakres: moduły C 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; będziesz musiał przenieść kod.

  • minor — wąskie API; dotyczy tylko 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 commita prowadzi do jego diffu na GitHubie.

moduł CMSIS-NN nn usunięty (major)

Moduł CMSIS-NN nn został usunięty, w tym nn.load(), net.forward(), net.search() oraz pomocnik nn_class. Wnioskowanie modeli przenosi się do modułu TensorFlow Lite (tf). Skrypty, które ładowały modele .network za pomocą nn, muszą zostać przeniesione na tf z modelem TensorFlow Lite.

Commity: fbc767b36

ImageReader / ImageWriter zastąpione przez image.ImageIO (major)

image.ImageReader / image.ImageWriter oraz ich metody next_frame() / add_frame() zostały usunięte i zastąpione nowym typem image.ImageIO, który obsługuje zarówno strumienie pamięciowe, jak i plikowe za pomocą read() / write() / seek() / size() / close(). Kod używający starych klas reader/writer musi zostać przeniesiony na image.ImageIO (zobacz przemianowane przykłady imageio_read.py / imageio_write.py).

Commity: 783a78754

słowo kluczowe scale w fir.draw_ir() usunięte (minor)

fir.draw_ir() zostało przepisane na bazie nowego potoku rysowania obrazu. Słowo kluczowe scale=(min, max) zostało usunięte, a dodano hint, x_scale, y_scale, roi oraz pozycyjne argumenty przesunięcia x/y. Skrypty przekazujące scale=(min, max) do fir.draw_ir() muszą je usunąć i użyć nowych argumentów.

Commity: 0a29103b1

aproksymacja find_lines() (behavior)

image.find_lines() aproksymuje teraz wielkość gradientu jako (abs(gx) + abs(gy)) / 2 i pomija wielkości poniżej 126. Jest to szybsze, ale zmienia zbiór wykrytych linii i wartości akumulatora, więc ponownie sprawdź i dostrój threshold / theta_margin / rho_margin.

Commity: 902ae3c98

fir.snapshot() przebudowane (behavior)

fir.snapshot() zostało znacząco przebudowane z nowym API słów kluczowych (hmirror, vflip, transpose, x_scale, y_scale, x_size, y_size, scale, rgb_channel, alpha, color_palette, hint, pixformat, copy_to_fb), a dołączone przykłady przepisano. Poprzednie zachowanie oparte na argumentach pozycyjnych / wyłącznie na pixformat uległo zmianie; przenieś skrypty FIR na nową postać ze słowami kluczowymi (zobacz zaktualizowane przykłady dla nakładki thermopile).

Commity: 53f2248b8

fir.init() zgłasza wyjątek przy niepowodzeniu (behavior)

fir.init() zgłasza teraz wyjątek (i czysto deinicjalizuje), gdy sensor termiczny nie zostanie wykryty, zamiast cicho kontynuować. Otocz fir.init() blokiem try / except (lub upewnij się, że sensor jest podłączony) tam, gdzie wcześniej polegałeś na tym, że nie zgłasza wyjątku.

Commity: 4b2f972f3

Lista kontrolna migracji

Dla czystego przeniesienia do v3.9.0 typowa praca to:

  1. Przenieś wnioskowanie modeli CMSIS-NN nn do modułu TensorFlow Lite tf (usunięcie nn).

  2. Zastąp image.ImageReader / image.ImageWriter przez image.ImageIO (zmiana ImageIO).

  3. Usuń słowo kluczowe scale=(min, max) z fir.draw_ir() i użyj nowych argumentów (zmiana draw_ir).

  4. Dostrój ponownie parametry find_lines() względem przybliżonej metryki wielkości (zmiana find_lines).

  5. Przenieś skrypty FIR na nowe API słów kluczowych fir.snapshot() (zmiana fir.snapshot) i obsłuż zgłaszanie wyjątku przez fir.init() przy braku sensora (zmiana fir.init).

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