v4.5.3

v4.5.3 ist ein umfangreiches Release: OV5640-Autofokus, kantengeglättetes Linienzeichnen, ein in den Mainline übernommener Hardware-JPEG-Decoder, große Funktionszuwächse für den i.MX RT (RT1060) sowie eine breite Reihe von Kamera-/ISP-Korrekturen. Mehrere selten genutzte Bildmethoden wurden entfernt und einige ISP-/Display-APIs geändert — lies die nachfolgenden Breaking Changes.

Höhepunkte

  • OV5640-Autofokus — aktiviert auf OpenMV 4 / 4 Plus / RT1060 (sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS)), mit einem Beispiel.

  • Kantengeglättetes draw_line() und ein in den Mainline übernommener STM32-Hardware-JPEG-Decoder (schnellere JPEG-Dekomprimierung).

  • OpenMV RT1060 erhielt ulab, ISP-Operationen, set_framerate() / set_frame_callback(), einen deutlich größeren Framebuffer sowie den CAN-Treiber.

  • Breaking: Image.div() / cartoon() / mul() wurden entfernt und einige ISP-/Display-APIs geändert — siehe die Breaking Changes.

Neue Funktionen

  • OV5640-Autofokus — die Autofokus-Firmware ist auf OPENMV4, OPENMV4P und OPENMV RT1060 aktiviert; löse sie mit sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS) aus. Ein neues Beispiel 07-Sensor-Control/autofocus.py wurde hinzugefügt.

  • Kantengeglättetes Linienzeichnendraw_line() erhielt Kantenglättung.

  • Benutzerdefinierte SPI-Display-ControllerSPIDisplay akzeptiert nun ein controller=-Schlüsselwort und stellt einen bus_write-Hook für benutzerdefinierte Init-/Befehlssequenzen bereit.

  • Erweiterung von Image.ccm() — akzeptiert nun verschachtelte 3x3-/4x3-/3x4-/4x4-Matrizen und ulab-Arrays (mit einer optionalen Offset-Zeile pro Kanal); ein Beispiel zur Farbkorrektur wurde hinzugefügt.

  • i.MX RT JPEG-Aufnahmesensor.JPEG-Aufnahme auf Arduino Portenta/Nicla Vision/Giga, plus set_framerate() und set_frame_callback() auf dem mimxrt-Port.

  • TFLite-Modellvalidierung — Modelle tragen nun einen Operator-Reihenfolge-Hash und eine Operator-Set-Größe.

  • WiFi — CYW43-Sicherheitsmodus-Konstanten hinzugefügt; neue i.MX RT-Board-Control-Beispielskripte (Pin/ADC/CAN/I2C/PWM/SPI/UART/…).

Weitere Änderungen und Verbesserungen

  • MicroPython auf 1.22 aktualisiert; CMSIS auf 5.9.0 aktualisiert.

  • In den Mainline übernommener STM32-Hardware-JPEG-Decoder — schnellere JPEG-Dekomprimierung über den On-Chip-Codec.

  • Optimiertes Image.invert() / negate() sowie binäre/mathematische Bildoperationen (CMSIS-Intrinsics).

  • Die Bibliotheken rpc und vl53l1x wurden portabel gemacht (verwenden machine / time statt pyb), sodass sie auf Nicht-STM32-Ports laufen.

  • DMA-beschleunigtes Framebuffer-memcpy auf OpenMV H7 / H7 Plus / Pro / Pure Thermal sowie Arduino Giga / Nicla Vision / Portenta H7; STM32 scannt I2C-Geräte nun einmal pro Scan für schnelleres Booten.

Fehlerbehebungen

Kamera und Sensoren:

  • STM32-Kamera-XCLK auf ein echtes 50%-Tastverhältnis korrigiert sowie einen Fehler behoben, wenn die Kameratakt-Frequenz auf null gesetzt wird; Bayer-Zuschnitt+Transponierung, YUV422-Farbverschiebung und set_windowing() auf dem mimxrt-Port korrigiert.

  • GC2145-Chip-ID-Probe sowie hmirror/vflip bei gedrehter Montage korrigiert; PAJ6100 auf dem RT1062 und einen PixArt PAJ7620/PAW3902-SPI-Pufferüberlauf behoben.

Bildverarbeitung:

  • find_rects()-roi-Clipping, morph()-Trunkierung gebrochener Offsets, image.gamma()-Kontrast-/Helligkeitsstandardwerte, get_threshold()-A/B-Offsets bei RGB565 sowie die JPEG-Dekodierung von Abmessungen, die kein Vielfaches von 8 sind, korrigiert.

System und Bibliotheken:

  • machine.LED.value() ohne Argument gibt nun den LED-Zustand zurück, statt ihn zu löschen; SPI-SSEL-Deinit auf einem gemeinsam genutzten Bus, machine.deepsleep() auf dem RT1062, ein TF-Absturz bei fehlenden Operatoren sowie die WINC1500/ninaw10-NIC-Auto-Aktivierung bei connect() korrigiert.

Hardware- und Board-Unterstützung

  • OpenMV RT1060 — ulab und ISP-Operationen aktiviert, größerer Framebuffer (10M→20M) / fb_alloc (2M→11M), CAN-Treiber wiederhergestellt, mehr Heap.

  • Arduino GIGA — GC2145-Kamera-Unterstützung, mit GC2145/OV5640-Autoerkennung (sie teilen sich eine I2C-Adresse).

  • i.MX RTsensor.JPEG-Aufnahmeunterstützung.

Breaking API-Änderungen

Für Benutzer sichtbare API-Brüche zwischen v4.5.2 und v4.5.3. 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üfe abgestimmte Skripte erneut.

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

Entfernte Bildmethoden (minor)

Image.div(), Image.cartoon() (und sein Beispiel) sowie Image.mul() wurden entfernt.

Commits: 7c932602e, 055a468b8, 4fe7fb63b

Display-Modul-API (minor)

Der veraltete udisplay-Modulnamen-Fallback wurde entfernt — das Modul wird nur noch als display registriert. Die nur für DSI verfügbaren Methoden dsi_write() / dsi_read() wurden durch bus_write() / bus_read() ersetzt, die nun auf allen Display-Controllern verfügbar sind.

Commits: 7df6694c3, 7d1f378a0

MQTT- und tf.regression-API-Änderungen (minor)

Der MQTTClient der mqtt-Bibliothek wurde überarbeitet: port ist nun erforderlich, neue Konstruktor-Schlüsselwörter ssl_params / callback sowie ein timeout-Argument bei connect() wurden hinzugefügt, die alten Standardwerte ssl= / port=0 wurden entfernt, und check_msg() ist nun nicht-blockierend. tf.regression() wurde neu geschrieben — seine Signatur lautet nun regression(model, array) und verarbeitet 1D-/2D-/3D- und quantisierte (int8) Modelle.

Commits: d12874c63, c5ec576c1

ISP-/Sensor-Verhaltensänderungen (behavior)

Image.awb() wurde überarbeitet — Gray-World (Standard) vs. White-Patch (max=True) ist nun explizit, und das max-Argument sowie die Argumente gamma / contrast / brightness von Image.gamma() sind nun nur als Schlüsselwörter zulässig (positionale Aufrufe müssen angepasst werden). Das Transponieren von Bildern ist für YUV422 nun deaktiviert (es erzeugte zuvor falsche Ausgaben) und die YUV422-Farbverschiebung wurde korrigiert, um mit Bayer übereinzustimmen. Der STM32-JPEG-Pfad löst nun bei einer JPEG-Geometrie-Diskrepanz einen Fehler aus, statt ein beschädigtes Bild zu erzeugen, und der WiFi-AP-Modus wendet nun einen Standard-Sicherheitsmodus auf den STM32- und i.MX RT-Ports an.

Commits: 36d5cecbd, 00500ccde, c1eeaefd6, 333fb2b5f, 55cab8733, c7d40f6af

Migrations-Checkliste

Für eine saubere Portierung auf v4.5.3 ist typischerweise Folgendes zu tun:

  1. Verwende Image.div() / cartoon() / mul() nicht mehr (die entfernten Methoden).

  2. Importiere das Display-Modul als display und wechsle von dsi_write/dsi_read zu bus_write/bus_read (die Display-API-Änderung).

  3. Aktualisiere die MQTTClient-Konstruktion (port ist erforderlich; ssl_params/callback) und alle tf.regression()-Aufrufe (die Bibliotheks-API-Änderungen).

  4. Übergib awb() max und gamma() gamma/contrast/brightness als Schlüsselwortargumente und überprüfe die YUV422-/Transponierungs- sowie AP-Modus-Sicherheitsannahmen erneut (die ISP-/Sensor-Änderungen).