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 APIstart_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, ayuv_to_*nie odejmuje już 128 — zobacz przełomowe zmiany.
Nowe funkcje¶
audio— nowy modułaudiodla Portenta H7 do przechwytywania z mikrofonu PDM:audio.init(), nieblokująceaudio.start_streaming(callback)orazaudio.stop_streaming()(częstotliwość podawana jest w Hz).micro_speech— nowy moduł z klasąMicroSpeech,audio_callback()orazmicro_speech()do rozpoznawania mowy TensorFlow;listen()używa średniej z ruchomego okna i przyjmuje słowo kluczowefilterograniczają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, rozszerzonymdisplay, 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_paletteorazhint, plus stałeimage.AREA/BILINEAR/BICUBIC/CENTER/EXTRACT_RGB_CHANNEL_FIRST/APPLY_COLOR_PALETTE_FIRSToraz nowe przykłady mieszania alfa / tablic kolorów / skalowania.ImageReader.next_frame()otrzymał słowo kluczowepausewyłą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 zcopy_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_allocw rekurencyjnych alokacjach (find_blobs()) oraz uzależnionotop_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_ethw 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:
Przenieś użycie
mtx/rv/ulinalg/umatrix/vecnaulab(usunięcie bibliotek matematycznych).Usuń wywołania
image.remove_shadows()/chrominvar()/illuminvar()(usunięte metody obrazu).Zaktualizuj wywołania
image.draw_image()do nowej sygnatury ze słowami kluczowymi (przeróbka draw_image).Sprawdź skrypty LCD pod kątem nowego API
lcdtype/framesize(przepisanie LCD).Usuń przesunięcie −128 przy przekazywaniu Y do
yuv_to_*(zmiana yuv_to_*).
Wszystkie pozostałe skrypty działają bez zmian.