v3.3.0

v3.3.0 ist ein riesiges Release. Es bringt vollständige Unterstützung für die FLIR Lepton Wärmebildkamera mit einer neuen sensor.ioctl()-Schnittstelle und Farbpaletten, ein tv-SPI-Videoausgabemodul, einen Global-Shutter-Trigger-Modus, eine große Reihe neuer image-Methoden zum Zeichnen und Analysieren (gamma_corr(), draw_ellipse(), draw_edges(), viele Blob-Eigenschaften) sowie neue ToF-, Motor- und linalg-Bibliotheken. Die cpufreq-API wurde überarbeitet und sensor.set_framesize() löst nun eine Ausnahme aus — lesen Sie die nachfolgenden Breaking Changes.

Highlights

  • FLIR Lepton — vollständige Unterstützung für die Wärmebildkamera über die neue sensor.ioctl()-Schnittstelle, Farbpaletten und image.to_rainbow().

  • tv-Modul — SPI-TV- / Composite-Videoausgabe.

  • Global-Shutter-Trigger-Modus — getriggerte Aufnahme mit dem MT9V034 über sensor.ioctl().

  • Bildverarbeitunggamma_corr(), draw_ellipse(), draw_edges(), Alpha-Blending in draw_image() und viele neue Blob-Eigenschaften.

  • Neue Bibliotheken — VL53L1X-ToF-Distanzmessung, TB6612-Motortreiber, micro-linalg.

  • Breaking: Die cpufreq-API wurde überarbeitet, sensor.set_framesize() löst nun bei Fehler eine Ausnahme aus, sensor.alloc_extra_fb() unterstützt Bayer/JPEG nicht mehr und die Positionsargumente von image.replace() haben sich verschoben — siehe die Breaking Changes.

Neue Funktionen

  • FLIR Leptonsensor.ioctl() für sensorspezifische Steuerung sowie ein vollständiger Satz von Lepton-ioctls (Radiometrie, Refresh/Auflösung, Run-Command, Set/Get-Attribut, FPA-/AUX-Temperatur in °C, Messmodus/-bereich, Breite/Höhe), sensor.set_color_palette() / sensor.get_color_palette() mit sensor.PALETTE_RAINBOW / PALETTE_IRONBOW, image.to_rainbow() und Lepton-Beispielskripte (27-Lepton) hinzugefügt.

  • Trigger-ModusIOCTL_SET_TRIGGERED_MODE / IOCTL_GET_TRIGGERED_MODE für die getriggerte Global-Shutter-Aufnahme des MT9V034, mit High-FPS- und Trigger-Modus-Beispielen.

  • tv-Modul — Bindings für SPI-TV- / Composite-Videoausgabe hinzugefügt.

  • Bildverarbeitungimage.gamma_corr(), image.draw_ellipse(), image.draw_edges(), Alpha-Blending in draw_image(), ein mask=-Schlüsselwort für clear(), wieder hinzugefügte mask_rectangle() / mask_circle() / mask_ellipse(), Rotations-/hmirror-/vflip-Schlüsselwörter für draw_string() / draw_text(), ein transpose-Schlüsselwort (sowie assign / set-Aliase) für replace(), copy() mit x_scale / y_scale plus crop() / scale(), ein Image()-Konstruktor aus Dimensionen, das sensor.BINARY-Pixelformat, exportierte Funktionen zur Farbraumkonvertierung sowie viele neue Blob-Eigenschaften (corners, perimeter, roundness, elongation, extent, compactness, solidity, convexity, enclosing_circle, enclosed_ellipse, Rotation) hinzugefügt.

  • Bibliotheken — den vl53l1x-ToF-Distanzsensor-Treiber, den tb6612-Motortreiber (mit DC-Motor- und Schrittmotor-Beispielen für das Motor-Shield) und eine micro-linalg-Bibliothek (ulinalg / umatrix) hinzugefügt.

  • FatFS auf FF13C (exFAT-fähig) aktualisiert.

Weitere Änderungen und Verbesserungen

  • Die Standard-JPEG-Qualität verbessert (Mittelwert zwischen niedrig und hoch statt eines fest kodierten Werts); In-Place-Bildoperationen erfordern nicht mehr die Wiederholung des Bildes als erstes Argument; draw_string() akzeptiert nicht-ganzzahlige Skalierungswerte.

Fehlerbehebungen

Kamera und Sensoren:

  • Behoben: ein Startup-Hang der Lepton 3.5 (Timeout + Recovery) und die Reset-Zuverlässigkeit, set_framesize() vor set_pixformat() beim MT9V034 (die Aufrufreihenfolge spielt keine Rolle mehr), MT9V034-WVGA auf dem STM32H7, der Auto-Belichtungsbereich und die Shadow-Register-Aktualisierungen des MT9V034 sowie der ADC-Bug des H7.

Bildverarbeitung:

  • Behoben: ein ungültiger Speicherzugriff in find_apriltags(), copy() beim Kopieren eines skalierten Bildes in den Haupt-Framebuffer, die Framebuffer-Allokation von to_grayscale() / to_rgb565(), das len() des Keypoint-Objekts, die JPEG-MCU-Grenzbehandlung, das Parsen von Schwellenwertlisten in binary() und die Akzeptanz von Keypoint-Tupeln durch draw_keypoints().

System:

  • Behoben: Lecks durch Mark/Free-Ungleichgewicht bei fb_alloc über die Methoden von image / fir / lcd / tv / nn hinweg; py_assert gibt nun bei abgefangenen Ausnahmen den Framebuffer-Speicher frei (#417); das UART-Overrun-Flag (ORE) wird gelöscht, sodass Overruns die UART-Lesevorgänge nicht mehr blockieren; der RTC-IRQ-Handler wurde korrigiert und das Windows-Tool cascade_convert.py behoben.

Hardware- und Board-Unterstützung

  • FLIR Lepton Wärmebildkamera.

  • TV-Shield — SPI-TV- / Composite-Videoausgabe.

  • Global-Shutter (MT9V034) Trigger-Modus.

Breaking-API-Änderungen

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

Jede Änderung ist mit ihrer Auswirkung gekennzeichnet:

  • major — betrifft die meisten Skripte, die die Funktion verwendet haben; Sie müssen Ihren Code anpassen.

  • minor — eingeschränkte 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.

cpufreq-API überarbeitet (major)

Das cpufreq-Modul wurde für die H7-Unterstützung überarbeitet. Die Konstanten cpufreq.CPUFREQ_120MHZ / 144 / 168 / 192 / 216MHZ und cpufreq.get_frequency() wurden entfernt. cpufreq.set_frequency() nimmt nun eine reine MHz-Ganzzahl entgegen (z. B. cpufreq.set_frequency(120)), und cpufreq.get_current_frequencies() / cpufreq.get_supported_frequencies() wurden hinzugefügt.

Commits: 6babf84a1

Positionsargumente von image.replace() verschoben (minor)

image.replace() hat ein transpose-Argument erhalten, wodurch sich das Positionsargument mask von Position 4 auf Position 5 verschoben hat. Code, der mask positionell übergeben hat (z. B. img.replace(src, hmirror, vflip, mask)), muss auf die Schlüsselwortform img.replace(src, mask=mask) umgestellt werden.

Commits: dbe7bf059

sensor.alloc_extra_fb() akzeptiert kein Bayer/JPEG mehr (minor)

sensor.alloc_extra_fb() akzeptiert sensor.BAYER oder sensor.JPEG nicht mehr (es unterstützt nun auch sensor.BINARY). Code, der zusätzliche Framebuffer im Bayer- oder JPEG-Format allokiert hat, muss GRAYSCALE / RGB565 verwenden (oder den Puffer auf andere Weise allokieren).

Commits: f9e6b3fe0

sensor.set_framesize() löst bei Fehler eine Ausnahme aus (behavior)

sensor.set_framesize() löst nun einen ValueError aus, wenn die Framesize nicht unterstützt wird, statt False zurückzugeben. Code, der den False-Rückgabewert geprüft hat, muss stattdessen die ValueError-Ausnahme abfangen.

Commits: b0442633e

Migrations-Checkliste

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

  1. Portieren Sie cpufreq-Code auf das ganzzahlige MHz-set_frequency() und get_current_frequencies() / get_supported_frequencies() (die cpufreq-Überarbeitung).

  2. Übergeben Sie mask an image.replace() als Schlüsselwort (die replace-Änderung).

  3. Allokieren Sie zusätzliche Framebuffer als GRAYSCALE / RGB565 statt Bayer/JPEG (die alloc_extra_fb-Änderung).

  4. Fangen Sie ValueError um sensor.set_framesize() ab, statt auf False zu prüfen (die set_framesize-Änderung).

Alle anderen Skripte laufen unverändert.