v3.7.0

v3.7.0 ist ein großes Release. Es fügt das Modul audio (Portenta H7 PDM-Mikrofon) mit einer neuen nicht-blockierenden Callback-API hinzu, das micro_speech-TensorFlow-Modul zur Spracherkennung, einen brandneuen parallelen RGB-LCD-Controller (mit HDMI-Ausgabe und FT5X06-Touch), eine image.flush()-Methode mit Pixelformat-Konstanten und eine neu geschriebene image.draw_image()-Skalierungs-Pipeline. Mehrere veraltete Hilfsbibliotheken und Bildmethoden wurden entfernt und die yuv_to_*-Berechnung hat sich geändert — lesen Sie die brechenden Änderungen weiter unten.

Höhepunkte

  • audio-Modul — Aufnahme über das integrierte PDM-Mikrofon des Portenta H7 mit einer nicht-blockierenden start_streaming(callback)-API.

  • micro_speech — ein TensorFlow-Modul zur Micro-Speech-Erkennung.

  • Neuer LCD-Controller — Unterstützung für parallele RGB-Displays, HDMI-Ausgabe (TFP410) und FT5X06-Touch.

  • image.draw_image() — neu geschrieben mit einer vollständigen Skalierungs-/Alpha-/Paletten-Pipeline (x_scale / y_scale / hint / color_palette …).

  • image.flush() plus Pixelformat-Konstanten (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • Brechend: veraltete mathematische Hilfsbibliotheken und mehrere Bildmethoden wurden entfernt, draw_image() / die LCD-APIs wurden überarbeitet, und yuv_to_* subtrahiert nicht mehr 128 — siehe die brechenden Änderungen.

Neue Funktionen

  • audio — ein neues audio-Modul für den Portenta H7 zur Aufnahme über das PDM-Mikrofon: audio.init(), das nicht-blockierende audio.start_streaming(callback) und audio.stop_streaming() (die Frequenz wird in Hz angegeben).

  • micro_speech — ein neues Modul mit einer MicroSpeech-Klasse, audio_callback() und micro_speech() für die TensorFlow-Spracherkennung; listen() verwendet einen gleitenden Fensterdurchschnitt und akzeptiert ein filter-Schlüsselwort, um die Ergebnisse auf eine Label-Liste einzuschränken.

  • LCD — ein neuer LCD-Controller mit Unterstützung für parallele RGB-Displays, den Typen LCD_NONE / LCD_SHIELD / LCD_DISPLAY, vielen Framesize-Konstanten, triple_buffer / framesize / refresh / bgr / deinit, einem erweiterten display, HDMI-Ausgabe über den TFP410 und Unterstützung für FT5X06-Touchscreens.

  • image.flush() — eine image.flush()-Methode und Pixelformat-Konstanten hinzugefügt (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • image.draw_image() — neu geschrieben mit einer neuen Skalierungs-Pipeline: x_scale / y_scale / x_size / y_size, rgb_channel, alpha, color_palette, alpha_palette und hint, plus den Konstanten image.AREA / BILINEAR / BICUBIC / CENTER / EXTRACT_RGB_CHANNEL_FIRST / APPLY_COLOR_PALETTE_FIRST sowie neuen Beispielen für Alpha-Blending / Farbtabellen / Skalierung.

  • ImageReader.next_frame() erhielt ein pause-Schlüsselwort, um die Echtzeit-Wiedergabeverzögerung zu deaktivieren.

  • Portenta-Audio-Beispiele (audio_fft.py, micro_speech.py) und ein ExtInt-Beispiel zum Aufwachen aus dem Stop-Modus hinzugefügt.

Weitere Änderungen und Verbesserungen

  • Die integrierten Beispiele wurden unter scripts/examples/Arduino/ neu organisiert; der Framebuffer wird nun sofort aktualisiert, nachdem Bilder mit copy_to_fb=True geladen/erstellt wurden (kein manuelles Flush erforderlich); der Heap des Portenta wurde leicht reduziert, um mehr statischen Treiber-Status unterzubringen.

Fehlerbehebungen

Kamera und Bildverarbeitung:

  • Vertauschtes Rot/Blau (RGB565-Bytereihenfolge) in aufgenommenen Bildern korrigiert, die DMA2D-Zeichnungsrundung an den übrigen Zeichencode angepasst, die fb_alloc-Beschädigung bei rekursiven Allokationen (find_blobs()) behoben und top_hat() / black_hat() so abgesichert, dass sie nur aktiv sind, wenn sowohl Binär- als auch Mathematik-Operationen aktiviert sind.

Display und Audio:

  • Die LCD-Shield-Ausgabe und den 1-Kanal-Mono-Audiomodus des Portenta korrigiert.

Portenta:

  • Ein Ethernet-/SDRAM-Problem umgangen (rst_eth auf High treiben) und die SDRAM-Timing-Konfiguration korrigiert.

Hardware- und Board-Unterstützung

  • Arduino Portenta H7 — Audioaufnahme über das integrierte PDM-Mikrofon (SAI / PDM2PCM).

  • LCD — neuer paralleler RGB-Display-Controller (LTDC im H7-Build aktiviert), HDMI-Ausgabe über den TFP410 und Unterstützung für FT5X06-Touchscreen-LCDs.

API-brechende Änderungen

Für Benutzer sichtbare API-Brüche zwischen v3.6.9 und v3.7.0. Umfang: Python-C-Module in modules/ und Python-Bibliotheken in scripts/libraries/.

Jede Änderung ist mit ihrer Auswirkung gekennzeichnet:

  • minor — schmale API; betrifft nur Skripte, die sie verwendet haben.

  • behavior — gleiche API, andere Ergebnisse; überprüfen Sie abgestimmte Skripte erneut.

Die Änderungen sind in dieser Reihenfolge nach Auswirkung gruppiert. Wenn Sie nur Ihren Code portieren möchten, springen Sie zur Migrations-Checkliste am Ende. Jeder Commit-Hash verlinkt auf seinen Diff auf GitHub.

Veraltete mathematische Hilfsbibliotheken entfernt (minor)

Die Hilfsbibliotheken mtx, rv, ulinalg, umatrix und vec wurden zugunsten von ulab aus scripts/libraries entfernt. Skripte, die eine davon mit import einbinden, schlagen fehl und müssen auf ulab portiert werden.

Commits: 1f7da9272

remove_shadows() / chrominvar() / illuminvar() entfernt (minor)

image.remove_shadows(), image.chrominvar() und image.illuminvar() wurden ersatzlos gelöscht. Skripte, die diese Methoden aufrufen, müssen die Aufrufe entfernen.

Commits: 3173c2bb3

image.draw_image()-Signatur überarbeitet (minor)

image.draw_image() wurde auf Basis einer neuen Skalierungs-Pipeline neu geschrieben. Die alten positionsbasierten alpha- / einzelnen scale-Argumente und die frühere Positionsreihenfolge gelten nicht mehr; verwenden Sie die neue Schlüsselwortform (x_scale= / y_scale= oder x_size= / y_size=, alpha=, color_palette=, hint= …).

Commits: 3439f8824

Neufassung des LCD-Moduls (minor)

Das lcd-Modul wurde für den neuen Display-Controller neu geschrieben. lcd.init() nimmt nun einen Display-type (LCD_NONE / LCD_SHIELD / LCD_DISPLAY) und neue Schlüsselwortargumente entgegen, und die Konstanten- / API-Oberfläche wurde wesentlich umstrukturiert. Alte, ausschließlich für Shields gedachte Skripte funktionieren meist weiterhin, aber die Standardwerte und das Verhalten haben sich geändert — überprüfen Sie LCD-Skripte anhand der neuen type / framesize-API.

Commits: 185538207

yuv_to_* subtrahiert nicht mehr 128 (behavior)

image.yuv_to_binary() / yuv_to_grayscale() / yuv_to_rgb() / yuv_to_lab() behandeln das Y-Tupelelement nun als vorzeichenlosen Wert von 0–255, anstatt 128 zu subtrahieren. Aufrufer müssen Y ohne den früheren −128-Bias übergeben, um dieselben Farben wie zuvor zu erhalten.

Commits: dcf141192

Migrations-Checkliste

Für eine saubere Portierung auf v3.7.0 fällt typischerweise folgende Arbeit an:

  1. Portieren Sie die Verwendung von mtx / rv / ulinalg / umatrix / vec auf ulab (die Entfernung der Mathematik-Bibliotheken).

  2. Entfernen Sie die Aufrufe von image.remove_shadows() / chrominvar() / illuminvar() (die entfernten Bildmethoden).

  3. Aktualisieren Sie die Aufrufe von image.draw_image() auf die neue Schlüsselwort-Signatur (die draw_image-Überarbeitung).

  4. Überprüfen Sie LCD-Skripte anhand der neuen lcd type / framesize-API (die LCD-Neufassung).

  5. Lassen Sie den −128-Bias weg, wenn Sie Y an yuv_to_* übergeben (die yuv_to_*-Änderung).

Alle anderen Skripte laufen unverändert weiter.