v3.7.0

v3.7.0 är en stor utgåva. Den lägger till audio-modulen (PDM-mikrofon på Portenta H7) med ett nytt icke-blockerande API baserat på återanrop, TensorFlow-modulen micro_speech för taligenkänning, en helt ny LCD-styrenhet för parallell RGB (med HDMI-utgång och FT5X06-pekskärm), en image.flush()-metod med konstanter för pixelformat, samt en omskriven skalningspipeline för image.draw_image(). Flera äldre hjälpbibliotek och bildmetoder togs bort och matematiken i yuv_to_* ändrades — läs de brytande ändringarna nedan.

Höjdpunkter

  • audio-modulen — infångning från den inbyggda PDM-mikrofonen på Portenta H7 med ett icke-blockerande start_streaming(callback)-API.

  • micro_speech — en TensorFlow-modul för micro-speech-igenkänning.

  • Ny LCD-styrenhet — stöd för parallell RGB-skärm, HDMI-utgång (TFP410) och FT5X06-pekskärm.

  • image.draw_image() — omskriven med en fullständig pipeline för skalning/alfa/palett (x_scale / y_scale / hint / color_palette …).

  • image.flush() plus konstanter för pixelformat (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • Brytande: äldre matematiska hjälpbibliotek och flera bildmetoder togs bort, draw_image() / LCD-API:er omarbetades, och yuv_to_* subtraherar inte längre 128 — se de brytande ändringarna.

Nya funktioner

  • audio — en ny audio-modul för Portenta H7 för infångning från PDM-mikrofon: audio.init(), icke-blockerande audio.start_streaming(callback) och audio.stop_streaming() (frekvensen anges i Hz).

  • micro_speech — en ny modul med en MicroSpeech-klass, audio_callback() och micro_speech() för TensorFlow-taligenkänning; listen() använder ett glidande fönstermedelvärde och tar emot ett filter-nyckelord för att begränsa resultaten till en etikettlista.

  • LCD — en ny LCD-styrenhet med stöd för parallell RGB-skärm, typerna LCD_NONE / LCD_SHIELD / LCD_DISPLAY, många framesize-konstanter, triple_buffer / framesize / refresh / bgr / deinit, en utökad display, HDMI-utgång via TFP410, och stöd för FT5X06-pekskärm.

  • image.flush() — lade till en image.flush()-metod och konstanter för pixelformat (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • image.draw_image() — omskriven med en ny skalningspipeline: x_scale / y_scale / x_size / y_size, rgb_channel, alpha, color_palette, alpha_palette och hint, plus konstanterna image.AREA / BILINEAR / BICUBIC / CENTER / EXTRACT_RGB_CHANNEL_FIRST / APPLY_COLOR_PALETTE_FIRST samt nya exempel på alfablandning / färgtabell / skalning.

  • ImageReader.next_frame() fick ett pause-nyckelord för att inaktivera fördröjningen vid realtidsuppspelning.

  • Lade till ljudexempel för Portenta (audio_fft.py, micro_speech.py) och ett ExtInt-exempel för väckning från stoppläge.

Övriga ändringar och förbättringar

  • De inbyggda exemplen omorganiserades under scripts/examples/Arduino/; bildbufferten uppdateras nu omedelbart efter inläsning/skapande av bilder med copy_to_fb=True (ingen manuell flush behövs); Portentas heap minskades något för att rymma mer statiskt drivrutinstillstånd.

Felrättningar

Kamera och bildbehandling:

  • Åtgärdade förväxlade röd/blå-kanaler (RGB565-byteordning) i infångade bilder, DMA2D-ritningsavrundning så att den matchar annan ritkod, fb_alloc-korruption vid rekursiva allokeringar (find_blobs()), och spärrade top_hat() / black_hat() bakom att både binära och matematiska operationer är aktiverade.

Skärm och ljud:

  • Åtgärdade LCD-sköldens utgång och Portentas 1-kanaliga mono-ljudläge.

Portenta:

  • Kringgick ett Ethernet/SDRAM-problem (drev rst_eth högt) och åtgärdade SDRAM-tidskonfigurationen.

Maskinvara och kortstöd

  • Arduino Portenta H7 — ljudinfångning från inbyggd PDM-mikrofon (SAI / PDM2PCM).

  • LCD — ny styrenhet för parallell RGB-skärm (LTDC aktiverat i H7-bygget), HDMI-utgång via TFP410 och stöd för FT5X06-pekskärms-LCD.

API-brytande ändringar

Användarsynliga API-brytningar mellan v3.6.9 och v3.7.0. Omfattning: Python-C-moduler i modules/ och Python-bibliotek i scripts/libraries/.

Varje ändring är märkt med sin påverkan:

  • minor — smalt API; påverkar bara skript som använde det.

  • behavior — samma API, andra resultat; kontrollera finjusterade skript igen.

Ändringarna är grupperade efter påverkan i den ordningen. Om du bara vill porta din kod, hoppa till migreringschecklistan i slutet. Varje commit-hash länkar till sin diff på GitHub.

Äldre matematiska hjälpbibliotek borttagna (minor)

Hjälpbiblioteken mtx, rv, ulinalg, umatrix och vec togs bort från scripts/libraries till förmån för ulab. Skript som import:erar något av dessa kommer att misslyckas och måste portas till ulab.

Commits: 1f7da9272

remove_shadows() / chrominvar() / illuminvar() borttagna (minor)

image.remove_shadows(), image.chrominvar() och image.illuminvar() togs bort utan ersättning. Skript som anropar dessa metoder måste ta bort anropen.

Commits: 3173c2bb3

image.draw_image()-signaturen omarbetad (minor)

image.draw_image() skrevs om ovanpå en ny skalningspipeline. De gamla positionsargumenten alpha / enkla scale och den tidigare positionsordningen gäller inte längre; använd den nya nyckelordsformen (x_scale= / y_scale= eller x_size= / y_size=, alpha=, color_palette=, hint= …).

Commits: 3439f8824

Omskrivning av LCD-modulen (minor)

lcd-modulen skrevs om för den nya skärmstyrenheten. lcd.init() tar nu en skärmtype (LCD_NONE / LCD_SHIELD / LCD_DISPLAY) och nya nyckelordsargument, och konstant-/API-ytan omorganiserades avsevärt. Gamla sköld-only-skript fungerar mestadels fortfarande, men standardvärdena och beteendet ändrades — granska LCD-skript mot det nya type / framesize-API:et.

Commits: 185538207

yuv_to_* subtraherar inte längre 128 (behavior)

image.yuv_to_binary() / yuv_to_grayscale() / yuv_to_rgb() / yuv_to_lab() behandlar nu Y-tupelelementet som ett heltal utan tecken i intervallet 0–255 i stället för att subtrahera 128. Anropare måste skicka Y utan den tidigare −128-förskjutningen för att få samma färger som tidigare.

Commits: dcf141192

Checklista för migrering

För en ren portning till v3.7.0 är det typiska arbetet:

  1. Porta användning av mtx / rv / ulinalg / umatrix / vec till ulab (borttagningen av matematikbiblioteken).

  2. Ta bort anrop till image.remove_shadows() / chrominvar() / illuminvar() (de borttagna bildmetoderna).

  3. Uppdatera anrop till image.draw_image() till den nya nyckelordssignaturen (omarbetningen av draw_image).

  4. Granska LCD-skript mot det nya lcd type / framesize-API:et (omskrivningen av LCD).

  5. Ta bort −128-förskjutningen när Y skickas till yuv_to_* (yuv_to_*-ändringen).

Alla andra skript körs oförändrade.