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.