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,ulaboraz 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ącyImageReader/ImageWriter.Niekompatybilne wstecznie: moduł CMSIS-NN
nnorazimage.ImageReader/image.ImageWriterzostały usunięte, a zachowaniefind_lines()/firuległ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łączonymulaboraz zamrożonymi sterownikami sensorówapds9960/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_LEPTONzfir.radiometric(),fir.trigger_ffc()ifir.register_vsync_cb().Sensory termiczne — dodano obsługę MLX90641 (
FIR_MLX90641) i termostosu MLX90621 (oficjalne sterowniki Melexis).palety / orientacja
fir— dodano stałefir.PALETTE_RAINBOW/PALETTE_IRONBOW/GRAYSCALE/RGB565, afir.read_ir()przyjmuje terazhmirror/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
typewfir.init()automatycznie wykrywa teraz sensor poprzez skanowanie magistrali I2C, gdy zostanie pominięty; wyjątekxallocraportuje teraz liczbę żądanych bajtów; UART 8 został włączony na Portenta; przykłady FIR skonsolidowano dothermal_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
firget_ir()/draw_ir()orazimage.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_collectna nRF oraz wczesną inicjalizację/deinicjalizację płytki, a także zaprzestano wypisywania błędnego komunikatu „uh oh, no preference for overlapping detection” podczasfind_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:
Przenieś wnioskowanie modeli CMSIS-NN
nndo modułu TensorFlow Litetf(usunięcie nn).Zastąp
image.ImageReader/image.ImageWriterprzezimage.ImageIO(zmiana ImageIO).Usuń słowo kluczowe
scale=(min, max)zfir.draw_ir()i użyj nowych argumentów (zmiana draw_ir).Dostrój ponownie parametry
find_lines()względem przybliżonej metryki wielkości (zmiana find_lines).Przenieś skrypty FIR na nowe API słów kluczowych
fir.snapshot()(zmiana fir.snapshot) i obsłuż zgłaszanie wyjątku przezfir.init()przy braku sensora (zmiana fir.init).
Wszystkie pozostałe skrypty działają bez zmian.