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 undimage.to_rainbow().tv-Modul — SPI-TV- / Composite-Videoausgabe.Global-Shutter-Trigger-Modus — getriggerte Aufnahme mit dem MT9V034 über
sensor.ioctl().Bildverarbeitung —
gamma_corr(),draw_ellipse(),draw_edges(), Alpha-Blending indraw_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 vonimage.replace()haben sich verschoben — siehe die Breaking Changes.
Neue Funktionen¶
FLIR Lepton —
sensor.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()mitsensor.PALETTE_RAINBOW/PALETTE_IRONBOW,image.to_rainbow()und Lepton-Beispielskripte (27-Lepton) hinzugefügt.Trigger-Modus —
IOCTL_SET_TRIGGERED_MODE/IOCTL_GET_TRIGGERED_MODEfü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.Bildverarbeitung —
image.gamma_corr(),image.draw_ellipse(),image.draw_edges(), Alpha-Blending indraw_image(), einmask=-Schlüsselwort fürclear(), wieder hinzugefügtemask_rectangle()/mask_circle()/mask_ellipse(), Rotations-/hmirror-/vflip-Schlüsselwörter fürdraw_string()/draw_text(), eintranspose-Schlüsselwort (sowieassign/set-Aliase) fürreplace(),copy()mitx_scale/y_scalepluscrop()/scale(), einImage()-Konstruktor aus Dimensionen, dassensor.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, dentb6612-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()vorset_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 vonto_grayscale()/to_rgb565(), daslen()des Keypoint-Objekts, die JPEG-MCU-Grenzbehandlung, das Parsen von Schwellenwertlisten inbinary()und die Akzeptanz von Keypoint-Tupeln durchdraw_keypoints().
System:
Behoben: Lecks durch Mark/Free-Ungleichgewicht bei
fb_allocüber die Methoden vonimage/fir/lcd/tv/nnhinweg;py_assertgibt 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-Toolcascade_convert.pybehoben.
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:
Portieren Sie
cpufreq-Code auf das ganzzahlige MHz-set_frequency()undget_current_frequencies()/get_supported_frequencies()(die cpufreq-Überarbeitung).Übergeben Sie
maskanimage.replace()als Schlüsselwort (die replace-Änderung).Allokieren Sie zusätzliche Framebuffer als
GRAYSCALE/RGB565statt Bayer/JPEG (die alloc_extra_fb-Änderung).Fangen Sie
ValueErrorumsensor.set_framesize()ab, statt aufFalsezu prüfen (die set_framesize-Änderung).
Alle anderen Skripte laufen unverändert.