v3.7.0

v3.7.0 este o versiune mare. Adaugă modulul audio (microfon PDM al Portenta H7) cu un nou API cu funcție de retroapelare (callback) neblocant, modulul micro_speech de recunoaștere a vorbirii TensorFlow, un controler LCD RGB paralel complet nou (cu ieșire HDMI și touch FT5X06), o metodă image.flush() cu constante de format de pixel și o conductă de scalare image.draw_image() rescrisă. Mai multe biblioteci ajutătoare moștenite și metode de imagine au fost eliminate, iar calculele yuv_to_* s-au modificat — citiți modificările incompatibile de mai jos.

Aspecte importante

  • modulul audio — captură de pe microfonul PDM încorporat al Portenta H7 cu un API neblocant start_streaming(callback).

  • micro_speech — un modul TensorFlow de recunoaștere a vorbirii micro-speech.

  • Controler LCD nou — suport pentru afișaj RGB paralel, ieșire HDMI (TFP410) și touch FT5X06.

  • image.draw_image() — rescrisă cu o conductă completă de scalare/alfa/paletă (x_scale / y_scale / hint / color_palette …).

  • image.flush() plus constante de format de pixel (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • Incompatibil: bibliotecile ajutătoare de calcul moștenite și mai multe metode de imagine au fost eliminate, API-urile draw_image() / LCD au fost reproiectate, iar yuv_to_* nu mai scade 128 — vedeți modificările incompatibile.

Caracteristici noi

  • audio — un nou modul audio pentru Portenta H7 pentru captura de pe microfonul PDM: audio.init(), audio.start_streaming(callback) neblocant și audio.stop_streaming() (frecvența se specifică în Hz).

  • micro_speech — un nou modul cu o clasă MicroSpeech, audio_callback() și micro_speech() pentru recunoașterea vorbirii TensorFlow; listen() folosește o medie pe fereastră glisantă și acceptă un cuvânt-cheie filter pentru a restrânge rezultatele la o listă de etichete.

  • LCD — un nou controler LCD cu suport pentru afișaj RGB paralel, tipuri LCD_NONE / LCD_SHIELD / LCD_DISPLAY, multe constante de dimensiune de cadru, triple_buffer / framesize / refresh / bgr / deinit, un modul display extins, ieșire HDMI prin TFP410 și suport pentru ecran tactil FT5X06.

  • image.flush() — s-a adăugat o metodă image.flush() și constante de format de pixel (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • image.draw_image() — rescrisă cu o nouă conductă de scalare: x_scale / y_scale / x_size / y_size, rgb_channel, alpha, color_palette, alpha_palette și hint, plus constantele image.AREA / BILINEAR / BICUBIC / CENTER / EXTRACT_RGB_CHANNEL_FIRST / APPLY_COLOR_PALETTE_FIRST și noi exemple de amestecare alfa / tabel de culori / scalare.

  • ImageReader.next_frame() a primit un cuvânt-cheie pause pentru a dezactiva întârzierea de redare în timp real.

  • S-au adăugat exemple audio pentru Portenta (audio_fft.py, micro_speech.py) și un exemplu ExtInt de trezire din oprire.

Alte modificări și îmbunătățiri

  • Exemplele încorporate au fost reorganizate sub scripts/examples/Arduino/; tamponul de cadre se actualizează acum instantaneu după încărcarea/crearea imaginilor cu copy_to_fb=True (nu mai este nevoie de un flush manual); heap-ul Portenta a fost redus ușor pentru a încăpea mai multă stare statică de driver.

Remedieri de erori

Cameră și prelucrare a imaginilor:

  • S-au reparat roșu/albastru inversate (ordinea octeților RGB565) în imaginile capturate, rotunjirea la desenarea DMA2D pentru a se potrivi cu restul codului de desenare, coruperea fb_alloc în alocările recursive (find_blobs()) și s-au condiționat top_hat() / black_hat() de activarea atât a operațiilor binare, cât și a celor matematice.

Afișaj și audio:

  • S-au reparat ieșirea shield-ului LCD și modul audio mono cu 1 canal al Portenta.

Portenta:

  • S-a ocolit o problemă Ethernet/SDRAM (se pune rst_eth pe nivel ridicat) și s-a reparat configurația temporizării SDRAM.

Suport pentru hardware și plăci

  • Arduino Portenta H7 — captură audio de pe microfonul PDM încorporat (SAI / PDM2PCM).

  • LCD — nou controler de afișaj RGB paralel (LTDC activat în build-ul H7), ieșire HDMI prin TFP410 și suport pentru LCD cu ecran tactil FT5X06.

Modificări incompatibile ale API-ului

Incompatibilități de API vizibile pentru utilizator între v3.6.9 și v3.7.0. Domeniu: module C Python din modules/ și biblioteci Python din scripts/libraries/.

Fiecare modificare este etichetată cu impactul său:

  • minor — API restrâns; afectează doar scripturile care l-au folosit.

  • comportament — același API, rezultate diferite; reverificați scripturile reglate.

Modificările sunt grupate după impact în această ordine. Dacă vreți doar să vă portați codul, săriți la lista de verificare pentru migrare de la sfârșit. Fiecare hash de commit duce la diff-ul său pe GitHub.

Biblioteci ajutătoare de calcul moștenite eliminate (minor)

Bibliotecile ajutătoare mtx, rv, ulinalg, umatrix și vec au fost eliminate din scripts/libraries în favoarea ulab. Scripturile care fac import la oricare dintre acestea vor eșua și trebuie portate la ulab.

Commit-uri: 1f7da9272

remove_shadows() / chrominvar() / illuminvar() eliminate (minor)

image.remove_shadows(), image.chrominvar() și image.illuminvar() au fost șterse fără înlocuire. Scripturile care apelează aceste metode trebuie să elimine apelurile.

Commit-uri: 3173c2bb3

Semnătura image.draw_image() reproiectată (minor)

image.draw_image() a fost rescrisă pe baza unei noi conducte de scalare. Vechile argumente poziționale alpha / singurul argument scale și ordonarea pozițională anterioară nu se mai aplică; folosiți noua formă cu cuvinte-cheie (x_scale= / y_scale= sau x_size= / y_size=, alpha=, color_palette=, hint= …).

Commit-uri: 3439f8824

Rescrierea modulului LCD (minor)

Modulul lcd a fost rescris pentru noul controler de afișaj. lcd.init() ia acum un type de afișaj (LCD_NONE / LCD_SHIELD / LCD_DISPLAY) și noi argumente cu cuvinte-cheie, iar suprafața de constante / API a fost reorganizată substanțial. Vechile scripturi doar pentru shield funcționează în mare parte în continuare, dar valorile implicite și comportamentul s-au modificat — revizuiți scripturile LCD față de noul API type / framesize.

Commit-uri: 185538207

yuv_to_* nu mai scade 128 (comportament)

image.yuv_to_binary() / yuv_to_grayscale() / yuv_to_rgb() / yuv_to_lab() tratează acum elementul Y al tuplului ca pe o valoare fără semn 0–255 în loc să scadă 128. Apelanții trebuie să transmită Y fără anteriorul decalaj de −128 pentru a obține aceleași culori ca înainte.

Commit-uri: dcf141192

Listă de verificare pentru migrare

Pentru o portare curată la v3.7.0, munca tipică este:

  1. Portați utilizarea mtx / rv / ulinalg / umatrix / vec la ulab (eliminarea bibliotecii de calcul).

  2. Eliminați apelurile image.remove_shadows() / chrominvar() / illuminvar() (metodele de imagine eliminate).

  3. Actualizați apelurile image.draw_image() la noua semnătură cu cuvinte-cheie (reproiectarea draw_image).

  4. Revizuiți scripturile LCD față de noul API type / framesize al lcd (rescrierea LCD).

  5. Renunțați la decalajul de −128 când transmiteți Y către yuv_to_* (modificarea yuv_to_*).

Toate celelalte scripturi rulează nemodificate.