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.