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 oraz image.to_rainbow().

  • Moduł tv — wyjście wideo SPI TV / kompozytowe.

  • Tryb wyzwalany globalnej migawki — przechwytywanie wyzwalane MT9V034 za pośrednictwem sensor.ioctl().

  • Obrazowaniegamma_corr(), draw_ellipse(), draw_edges(), mieszanie alfa w draw_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 cpufreq został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 pozycyjne image.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() z sensor.PALETTE_RAINBOW / PALETTE_IRONBOW, image.to_rainbow() oraz przykładowe skrypty Lepton (27-Lepton).

  • Tryb wyzwalanyIOCTL_SET_TRIGGERED_MODE / IOCTL_GET_TRIGGERED_MODE dla 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 w draw_image(), słowo kluczowe mask= w clear(), ponownie dodano mask_rectangle() / mask_circle() / mask_ellipse(), słowa kluczowe obrotu / hmirror / vflip w draw_string() / draw_text(), słowo kluczowe transpose (oraz aliasy assign / set) w replace(), x_scale / y_scale w copy() oraz crop() / scale(), konstruktor Image() z wymiarów, format pikseli sensor.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 vl53l1x ToF, sterownik silników tb6612 (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() przed set_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 w to_grayscale() / to_rgb565(), len() obiektu punktu kluczowego, obsługę granic MCU w JPEG, parsowanie listy progów w binary() oraz akceptowanie krotek punktów kluczowych przez draw_keypoints().

System:

  • Naprawiono wycieki spowodowane niezrównoważeniem mark/free w fb_alloc w metodach image / fir / lcd / tv / nn, sprawiono, że py_assert zwalnia 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ędzie cascade_convert.py dla 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:

  1. Przeniesienie kodu cpufreq na set_frequency() z liczbą całkowitą MHz oraz get_current_frequencies() / get_supported_frequencies() (przebudowa cpufreq).

  2. Przekazywanie mask do image.replace() jako słowa kluczowego (zmiana w replace).

  3. Alokowanie dodatkowych buforów ramki jako GRAYSCALE / RGB565 zamiast Bayer/JPEG (zmiana w alloc_extra_fb).

  4. Przechwytywanie ValueError wokół sensor.set_framesize() zamiast sprawdzania False (zmiana w set_framesize).

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