v3.3.0#
v3.3.0 to ogromne wydanie. Dodaje pełną obsługę kamery termowizyjnej FLIR Lepton wraz z nowym interfejsem sensor.ioctl() i paletami kolorów, moduł wyjścia wideo SPI tv, tryb wyzwalany globalnej migawki, dużą porcję nowych metod rysowania/analizy z modułu image (gamma_corr(), draw_ellipse(), draw_edges(), wiele właściwości plam (blob)) oraz nowe biblioteki ToF / silników / linalg. API cpufreq zostało przebudowane, a sensor.set_framesize() teraz zgłasza wyjątek — zapoznaj się z opisem zmian łamiących kompatybilność poniżej.
Najważniejsze zmiany#
FLIR Lepton — pełna obsługa kamery termowizyjnej za pośrednictwem nowego interfejsu
sensor.ioctl(), palet kolorów orazimage.to_rainbow().Moduł
tv— wyjście wideo SPI TV / kompozytowe.Tryb wyzwalany globalnej migawki — przechwytywanie wyzwalane MT9V034 za pośrednictwem
sensor.ioctl().Obrazowanie —
gamma_corr(),draw_ellipse(),draw_edges(), mieszanie alfa wdraw_image()oraz wiele nowych właściwości plam (blob).Nowe biblioteki — pomiar odległości VL53L1X ToF, sterownik silników TB6612, micro-linalg.
Zmiana łamiąca kompatybilność: API
cpufreqzostało przebudowane,sensor.set_framesize()teraz zgłasza wyjątek w razie niepowodzenia,sensor.alloc_extra_fb()usunęło obsługę Bayer/JPEG, a argumenty pozycyjneimage.replace()zostały przesunięte — patrz zmiany łamiące kompatybilność.
Nowe funkcje#
FLIR Lepton — dodano
sensor.ioctl()do sterowania specyficznego dla sensora oraz pełen zestaw ioctli Lepton (radiometria, odświeżanie/rozdzielczość, wykonywanie poleceń, ustawianie/odczyt atrybutów, temperatura FPA/AUX w °C, tryb/zakres pomiaru, szerokość/wysokość),sensor.set_color_palette()/sensor.get_color_palette()zsensor.PALETTE_RAINBOW/PALETTE_IRONBOW,image.to_rainbow()oraz przykładowe skrypty Lepton (27-Lepton).Tryb wyzwalany —
IOCTL_SET_TRIGGERED_MODE/IOCTL_GET_TRIGGERED_MODEdla wyzwalanego przechwytywania globalnej migawki MT9V034, wraz z przykładami wysokiego FPS i trybu wyzwalanego.Moduł
tv— dodano powiązania wyjścia wideo SPI TV / kompozytowego.Obrazowanie — dodano
image.gamma_corr(),image.draw_ellipse(),image.draw_edges(), mieszanie alfa wdraw_image(), słowo kluczowemask=wclear(), ponownie dodanomask_rectangle()/mask_circle()/mask_ellipse(), słowa kluczowe obrotu / hmirror / vflip wdraw_string()/draw_text(), słowo kluczowetranspose(oraz aliasyassign/set) wreplace(),x_scale/y_scalewcopy()orazcrop()/scale(), konstruktorImage()z wymiarów, format pikselisensor.BINARY, wyeksportowane funkcje konwersji przestrzeni kolorów oraz wiele nowych właściwości plam (blob) (corners,perimeter,roundness,elongation,extent,compactness,solidity,convexity,enclosing_circle,enclosed_ellipse, obrót).Biblioteki — dodano sterownik czujnika odległości
vl53l1xToF, sterownik silnikówtb6612(z przykładami Motor-Shield dla silnika DC i krokowego) oraz bibliotekę micro-linalg (ulinalg/umatrix).Zaktualizowano FatFS do FF13C (z obsługą exFAT).
Pozostałe zmiany i ulepszenia#
Poprawiono domyślną jakość JPEG (środek zakresu niskie–wysokie zamiast wartości na sztywno); operacje na obrazie w miejscu nie wymagają już powtarzania obrazu jako pierwszego argumentu;
draw_string()akceptuje niecałkowite wartości skali.
Poprawki błędów#
Kamera i sensory:
Naprawiono zawieszanie się przy starcie Lepton 3.5 (limit czasu + odzyskiwanie) oraz niezawodność resetu,
set_framesize()przedset_pixformat()dla MT9V034 (kolejność wywołań nie ma już znaczenia), WVGA MT9V034 na STM32H7, zakres automatycznej ekspozycji MT9V034 i aktualizacje rejestrów cienia oraz błąd ADC H7.
Obrazowanie:
Naprawiono nieprawidłowy dostęp do pamięci w
find_apriltags(),copy()przy kopiowaniu przeskalowanego obrazu do głównego bufora ramki, alokację bufora ramki wto_grayscale()/to_rgb565(),len()obiektu punktu kluczowego, obsługę granic MCU w JPEG, parsowanie listy progów wbinary()oraz akceptowanie krotek punktów kluczowych przezdraw_keypoints().
System:
Naprawiono wycieki spowodowane niezrównoważeniem mark/free w
fb_allocw metodachimage/fir/lcd/tv/nn, sprawiono, żepy_assertzwalnia pamięć bufora ramki przy przechwyconych wyjątkach (#417), wyczyszczono flagę przepełnienia UART (ORE), aby przepełnienia nie blokowały już odczytów UART, naprawiono procedurę obsługi IRQ RTC oraz naprawiono narzędziecascade_convert.pydla Windows.
Sprzęt i obsługa płytek#
Kamera termowizyjna FLIR Lepton.
TV shield — wyjście wideo SPI TV / kompozytowe.
Tryb wyzwalany globalnej migawki (MT9V034).
Zmiany API łamiące kompatybilność#
Widoczne dla użytkownika zmiany API łamiące kompatybilność między v3.2.0 a v3.3.0. Zakres: moduły C Pythona w modules/ oraz biblioteki Pythona w scripts/libraries/.
Każda zmiana jest oznaczona jej wpływem:
major — dotyczy większości skryptów korzystających z danej funkcji; konieczne będzie przeniesienie kodu.
minor — wąskie API; dotyczy tylko skryptów, które z niego korzystał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 GitHub.
Przebudowane API cpufreq (major)#
Moduł cpufreq został przebudowany pod obsługę H7. Usunięto stałe cpufreq.CPUFREQ_120MHZ / 144 / 168 / 192 / 216MHZ oraz cpufreq.get_frequency(). cpufreq.set_frequency() przyjmuje teraz zwykłą liczbę całkowitą MHz (np. cpufreq.set_frequency(120)), a dodano cpufreq.get_current_frequencies() / cpufreq.get_supported_frequencies().
Commity: 6babf84a1
Przesunięcie argumentów pozycyjnych image.replace() (minor)#
image.replace() zyskało argument transpose, przesuwając pozycyjny argument mask z pozycji 4 na pozycję 5. Kod, który przekazywał mask pozycyjnie (np. img.replace(src, hmirror, vflip, mask)), musi przejść na formę słowa kluczowego img.replace(src, mask=mask).
Commity: dbe7bf059
sensor.alloc_extra_fb() nie akceptuje już Bayer/JPEG (minor)#
sensor.alloc_extra_fb() nie akceptuje już sensor.BAYER ani sensor.JPEG (obsługuje teraz również sensor.BINARY). Kod, który alokował dodatkowe bufory ramki w formacie Bayer lub JPEG, musi używać GRAYSCALE / RGB565 (lub alokować bufor w inny sposób).
Commity: f9e6b3fe0
sensor.set_framesize() zgłasza wyjątek w razie niepowodzenia (behavior)#
sensor.set_framesize() zgłasza teraz ValueError, gdy rozmiar ramki nie jest obsługiwany, zamiast zwracać False. Kod, który sprawdzał zwracaną wartość False, musi zamiast tego przechwytywać wyjątek ValueError.
Commity: b0442633e
Lista kontrolna migracji#
Aby czysto przenieść kod do v3.3.0, typowa praca obejmuje:
Przeniesienie kodu
cpufreqnaset_frequency()z liczbą całkowitą MHz orazget_current_frequencies()/get_supported_frequencies()(przebudowa cpufreq).Przekazywanie
maskdoimage.replace()jako słowa kluczowego (zmiana w replace).Alokowanie dodatkowych buforów ramki jako
GRAYSCALE/RGB565zamiast Bayer/JPEG (zmiana w alloc_extra_fb).Przechwytywanie
ValueErrorwokółsensor.set_framesize()zamiast sprawdzaniaFalse(zmiana w set_framesize).
Wszystkie pozostałe skrypty działają bez zmian.