v3.7.0#

v3.7.0 je velké vydání. Přidává modul audio (PDM mikrofon na Portenta H7) s novým neblokujícím callback API, modul rozpoznávání řeči micro_speech pro TensorFlow, zcela nový řadič paralelního RGB LCD (s výstupem HDMI a dotykem FT5X06), metodu image.flush() s konstantami formátu pixelů a přepsaný škálovací řetězec image.draw_image(). Několik starších pomocných knihoven a metod obrazu bylo odstraněno a změnila se matematika yuv_to_* — přečtěte si zásadní změny níže.

Hlavní novinky#

  • Modul audio — záznam z palubního PDM mikrofonu Portenta H7 s neblokujícím API start_streaming(callback).

  • micro_speech — modul rozpoznávání řeči micro-speech pro TensorFlow.

  • Nový řadič LCD — podpora paralelního RGB displeje, výstup HDMI (TFP410) a dotyk FT5X06.

  • image.draw_image() — přepsáno s plným řetězcem škálování/alfa/palety (x_scale / y_scale / hint / color_palette …).

  • image.flush() plus konstanty formátu pixelů (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • Zásadní: byly odstraněny starší matematické pomocné knihovny a několik metod obrazu, byla přepracována API draw_image() / LCD a yuv_to_* již neodečítá 128 — viz zásadní změny.

Nové funkce#

  • audio — nový modul audio pro Portenta H7 pro záznam z PDM mikrofonu: audio.init(), neblokující audio.start_streaming(callback) a audio.stop_streaming() (frekvence se zadává v Hz).

  • micro_speech — nový modul s třídou MicroSpeech, audio_callback() a micro_speech() pro rozpoznávání řeči TensorFlow; listen() používá průměr v klouzavém okně a přijímá klíčové slovo filter pro omezení výsledků na seznam štítků.

  • LCD — nový řadič LCD s podporou paralelního RGB displeje, typy LCD_NONE / LCD_SHIELD / LCD_DISPLAY, mnoha konstantami framesize, triple_buffer / framesize / refresh / bgr / deinit, rozšířeným display, výstupem HDMI přes TFP410 a podporou dotykové obrazovky FT5X06.

  • image.flush() — přidána metoda image.flush() a konstanty formátu pixelů (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • image.draw_image() — přepsáno s novým škálovacím řetězcem: x_scale / y_scale / x_size / y_size, rgb_channel, alpha, color_palette, alpha_palette a hint, plus konstanty image.AREA / BILINEAR / BICUBIC / CENTER / EXTRACT_RGB_CHANNEL_FIRST / APPLY_COLOR_PALETTE_FIRST a nové ukázky alfa prolínání / barevné tabulky / škálování.

  • ImageReader.next_frame() získal klíčové slovo pause pro vypnutí prodlevy přehrávání v reálném čase.

  • Přidány ukázky zvuku pro Portenta (audio_fft.py, micro_speech.py) a ukázka probuzení ze stavu stop pomocí ExtInt.

Další změny a vylepšení#

  • Vestavěné ukázky byly reorganizovány pod scripts/examples/Arduino/; framebuffer se nyní aktualizuje okamžitě po načtení/vytvoření obrazů s copy_to_fb=True (není potřeba ruční flush); halda Portenta byla mírně zmenšena, aby se vešlo více statického stavu ovladačů.

Opravy chyb#

Kamera a zpracování obrazu:

  • Opraveno prohození červené/modré (pořadí bajtů RGB565) v zachycených obrazech, zaokrouhlování kreslení DMA2D pro shodu s ostatním kreslicím kódem, poškození fb_alloc při rekurzivních alokacích (find_blobs()) a podmíněno top_hat() / black_hat() tím, že jsou povoleny jak binární, tak matematické operace.

Displej a zvuk:

  • Opraven výstup LCD shieldu a 1kanálový mono zvukový režim Portenta.

Portenta:

  • Obejit problém s Ethernet/SDRAM (nastavení rst_eth do high) a opravena konfigurace časování SDRAM.

Hardware a podpora desek#

  • Arduino Portenta H7 — záznam zvuku z palubního PDM mikrofonu (SAI / PDM2PCM).

  • LCD — nový řadič paralelního RGB displeje (LTDC aktivováno v sestavení H7), výstup HDMI přes TFP410 a podpora LCD s dotykovou obrazovkou FT5X06.

Zásadní změny API#

Uživatelsky viditelné změny API mezi v3.6.9 a v3.7.0. Rozsah: Python C-moduly v modules/ a Python knihovny v scripts/libraries/.

Každá změna je označena svým dopadem:

  • minor — úzké API; ovlivňuje pouze skripty, které jej používaly.

  • behavior — stejné API, jiné výsledky; překontrolujte vyladěné skripty.

Změny jsou seskupeny podle dopadu v tomto pořadí. Pokud chcete pouze přenést svůj kód, přejděte na kontrolní seznam migrace na konci. Každý hash commitu odkazuje na svůj diff na GitHubu.

Odstraněny starší matematické pomocné knihovny (minor)#

Pomocné knihovny mtx, rv, ulinalg, umatrix a vec byly odstraněny z scripts/libraries ve prospěch ulab. Skripty, které kteroukoli z nich importují, selžou a musí být přeneseny na ulab.

Commity: 1f7da9272

Odstraněny remove_shadows() / chrominvar() / illuminvar() (minor)#

image.remove_shadows(), image.chrominvar() a image.illuminvar() byly odstraněny bez náhrady. Skripty volající tyto metody musí volání odstranit.

Commity: 3173c2bb3

Přepracována signatura image.draw_image() (minor)#

image.draw_image() bylo přepsáno na novém škálovacím řetězci. Staré poziční argumenty alpha / jednoduchý scale a předchozí poziční pořadí již neplatí; použijte novou formu s klíčovými slovy (x_scale= / y_scale= nebo x_size= / y_size=, alpha=, color_palette=, hint= …).

Commity: 3439f8824

Přepsání modulu LCD (minor)#

Modul lcd byl přepsán pro nový řadič displeje. lcd.init() nyní přijímá type displeje (LCD_NONE / LCD_SHIELD / LCD_DISPLAY) a nové klíčové argumenty a sada konstant / API byla podstatně reorganizována. Staré skripty určené pouze pro shield většinou stále fungují, ale výchozí hodnoty a chování se změnily — překontrolujte LCD skripty vůči novému API type / framesize.

Commity: 185538207

yuv_to_* již neodečítá 128 (behavior)#

image.yuv_to_binary() / yuv_to_grayscale() / yuv_to_rgb() / yuv_to_lab() nyní zacházejí s prvkem Y v n-tici jako s hodnotou bez znaménka 0–255 místo odečítání 128. Volající musí předat Y bez předchozího posunu −128, aby dostali stejné barvy jako dříve.

Commity: dcf141192

Kontrolní seznam migrace#

Pro čistý přechod na v3.7.0 je typická práce následující:

  1. Přeneste použití mtx / rv / ulinalg / umatrix / vec na ulab (odstranění matematických knihoven).

  2. Odstraňte volání image.remove_shadows() / chrominvar() / illuminvar() (odstraněné metody obrazu).

  3. Aktualizujte volání image.draw_image() na novou signaturu s klíčovými slovy (přepracování draw_image).

  4. Překontrolujte LCD skripty vůči novému API lcd type / framesize (přepsání LCD).

  5. Vynechte posun −128 při předávání Y do yuv_to_* (změna yuv_to_*).

Všechny ostatní skripty poběží beze změny.