v3.7.0

v3.7.0 to duże wydanie. Dodaje moduł audio (mikrofon PDM Portenta H7) z nowym, nieblokującym API wywołań zwrotnych, moduł rozpoznawania mowy TensorFlow micro_speech, zupełnie nowy kontroler LCD z równoległym RGB (z wyjściem HDMI i dotykiem FT5X06), metodę image.flush() ze stałymi formatu pikseli oraz przepisany potok skalowania image.draw_image(). Usunięto kilka starszych bibliotek pomocniczych i metod obrazu, a obliczenia yuv_to_* uległy zmianie — przeczytaj o przełomowych zmianach poniżej.

Najważniejsze zmiany

  • Moduł audio — przechwytywanie z wbudowanego mikrofonu PDM Portenta H7 za pomocą nieblokującego API start_streaming(callback).

  • micro_speech — moduł rozpoznawania mowy micro-speech TensorFlow.

  • Nowy kontroler LCD — obsługa wyświetlaczy z równoległym RGB, wyjście HDMI (TFP410) oraz dotyk FT5X06.

  • image.draw_image() — przepisany z pełnym potokiem skalowania/alfy/palety (x_scale / y_scale / hint / color_palette …).

  • image.flush() plus stałe formatu pikseli (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • Przełomowe: usunięto starsze biblioteki pomocnicze do obliczeń oraz kilka metod obrazu, przerobiono API draw_image() / LCD, a yuv_to_* nie odejmuje już 128 — zobacz przełomowe zmiany.

Nowe funkcje

  • audio — nowy moduł audio dla Portenta H7 do przechwytywania z mikrofonu PDM: audio.init(), nieblokujące audio.start_streaming(callback) oraz audio.stop_streaming() (częstotliwość podawana jest w Hz).

  • micro_speech — nowy moduł z klasą MicroSpeech, audio_callback() oraz micro_speech() do rozpoznawania mowy TensorFlow; listen() używa średniej z ruchomego okna i przyjmuje słowo kluczowe filter ograniczające wyniki do listy etykiet.

  • LCD — nowy kontroler LCD z obsługą wyświetlaczy z równoległym RGB, typami LCD_NONE / LCD_SHIELD / LCD_DISPLAY, wieloma stałymi rozmiaru ramki, triple_buffer / framesize / refresh / bgr / deinit, rozszerzonym display, wyjściem HDMI poprzez TFP410 oraz obsługą ekranu dotykowego FT5X06.

  • image.flush() — dodano metodę image.flush() oraz stałe formatu pikseli (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • image.draw_image() — przepisany z nowym potokiem skalowania: x_scale / y_scale / x_size / y_size, rgb_channel, alpha, color_palette, alpha_palette oraz hint, plus stałe image.AREA / BILINEAR / BICUBIC / CENTER / EXTRACT_RGB_CHANNEL_FIRST / APPLY_COLOR_PALETTE_FIRST oraz nowe przykłady mieszania alfa / tablic kolorów / skalowania.

  • ImageReader.next_frame() otrzymał słowo kluczowe pause wyłączające opóźnienie odtwarzania w czasie rzeczywistym.

  • Dodano przykłady audio dla Portenta (audio_fft.py, micro_speech.py) oraz przykład wybudzania ze stanu stop za pomocą ExtInt.

Inne zmiany i ulepszenia

  • Wbudowane przykłady zostały zreorganizowane w scripts/examples/Arduino/; bufor ramki aktualizuje się teraz natychmiast po wczytaniu/utworzeniu obrazów z copy_to_fb=True (bez potrzeby ręcznego flush); stertę Portenta nieco zmniejszono, aby zmieścić więcej statycznego stanu sterowników.

Poprawki błędów

Kamera i obrazowanie:

  • Naprawiono zamienione miejscami czerwony/niebieski (kolejność bajtów RGB565) w przechwyconych obrazach, zaokrąglanie rysowania DMA2D w celu dopasowania do pozostałego kodu rysowania, uszkodzenie fb_alloc w rekurencyjnych alokacjach (find_blobs()) oraz uzależniono top_hat() / black_hat() od jednoczesnego włączenia operacji binarnych i matematycznych.

Wyświetlacz i audio:

  • Naprawiono wyjście shieldu LCD oraz jednokanałowy tryb mono audio Portenta.

Portenta:

  • Obejście problemu Ethernet/SDRAM (ustawienie rst_eth w stan wysoki) oraz naprawienie konfiguracji taktowania SDRAM.

Sprzęt i obsługa płytek

  • Arduino Portenta H7 — przechwytywanie audio z wbudowanego mikrofonu PDM (SAI / PDM2PCM).

  • LCD — nowy kontroler wyświetlacza z równoległym RGB (LTDC włączony w buildzie H7), wyjście HDMI poprzez TFP410 oraz obsługa wyświetlacza LCD z ekranem dotykowym FT5X06.

Przełomowe zmiany API

Widoczne dla użytkownika zmiany API między v3.6.9 a v3.7.0. Zakres: moduły C Pythona w modules/ oraz biblioteki Pythona w scripts/libraries/.

Każda zmiana jest oznaczona jej wpływem:

  • minor — wąskie API; dotyczy tylko skryptów, które go używały.

  • behavior — to samo API, inne wyniki; sprawdź ponownie dostrojone skrypty.

Zmiany są pogrupowane według wpływu w tej kolejności. Jeśli chcesz tylko przenieść swój kod, przejdź do listy kontrolnej migracji na końcu. Każdy skrót commita prowadzi do jego diffa na GitHubie.

Usunięto starsze biblioteki pomocnicze do obliczeń (minor)

Biblioteki pomocnicze mtx, rv, ulinalg, umatrix oraz vec zostały usunięte z scripts/libraries na rzecz ulab. Skrypty, które import jakąkolwiek z nich, zawiodą i muszą zostać przeniesione na ulab.

Commity: 1f7da9272

Usunięto remove_shadows() / chrominvar() / illuminvar() (minor)

image.remove_shadows(), image.chrominvar() oraz image.illuminvar() zostały usunięte bez zamiennika. Skrypty wywołujące te metody muszą usunąć te wywołania.

Commity: 3173c2bb3

Przerobiono sygnaturę image.draw_image() (minor)

image.draw_image() zostało przepisane na nowym potoku skalowania. Stare pozycyjne argumenty alpha / pojedynczy scale oraz wcześniejsza kolejność pozycyjna nie obowiązują już; użyj nowej formy ze słowami kluczowymi (x_scale= / y_scale= lub x_size= / y_size=, alpha=, color_palette=, hint= …).

Commity: 3439f8824

Przepisanie modułu LCD (minor)

Moduł lcd został przepisany dla nowego kontrolera wyświetlacza. lcd.init() przyjmuje teraz type wyświetlacza (LCD_NONE / LCD_SHIELD / LCD_DISPLAY) oraz nowe argumenty kluczowe, a zestaw stałych / API został znacząco zreorganizowany. Stare skrypty przeznaczone wyłącznie dla shieldu w większości nadal działają, ale wartości domyślne i zachowanie uległy zmianie — sprawdź skrypty LCD pod kątem nowego API type / framesize.

Commity: 185538207

yuv_to_* nie odejmuje już 128 (behavior)

image.yuv_to_binary() / yuv_to_grayscale() / yuv_to_rgb() / yuv_to_lab() traktują teraz element Y krotki jako wartość bez znaku z zakresu 0–255 zamiast odejmować 128. Wywołujący muszą przekazywać Y bez wcześniejszego przesunięcia −128, aby uzyskać te same kolory co wcześniej.

Commity: dcf141192

Lista kontrolna migracji

Aby czysto przenieść kod na v3.7.0, typowa praca to:

  1. Przenieś użycie mtx / rv / ulinalg / umatrix / vec na ulab (usunięcie bibliotek matematycznych).

  2. Usuń wywołania image.remove_shadows() / chrominvar() / illuminvar() (usunięte metody obrazu).

  3. Zaktualizuj wywołania image.draw_image() do nowej sygnatury ze słowami kluczowymi (przeróbka draw_image).

  4. Sprawdź skrypty LCD pod kątem nowego API lcd type / framesize (przepisanie LCD).

  5. Usuń przesunięcie −128 przy przekazywaniu Y do yuv_to_* (zmiana yuv_to_*).

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