v2.7.0

v2.7.0 modernisiert die sensor-API für Auto-Verstärkung / Auto-Belichtung / Weißabgleich auf physikalische Einheiten (dB / Mikrosekunden), überarbeitet die Phasenkorrelation find_displacement() (mit Rotation/Skalierung) und fügt get_similarity() (SSIM), chrominvar() / illuminvar(), zusätzliche Framebuffer und eine MQTT-Bibliothek hinzu. Es handelt sich um eine umfangreiche Breaking-Release – lesen Sie die nachstehenden Breaking Changes.

Highlights

  • Moderne Sensor-APIset_auto_gain() / set_auto_exposure() / set_auto_whitebal() verwenden jetzt dB / Mikrosekunden, mit den passenden get_gain_db() / get_exposure_us() / get_rgb_gain_db().

  • Phasenkorrelation – überarbeitetes find_displacement() mit Rotation / Skalierung sowie find_rotscale() / linpolar() / logpolar().

  • SSIM – strukturelle Ähnlichkeit image.get_similarity().

  • Zusätzliche Framebuffersensor.alloc_extra_fb() / dealloc_extra_fb().

  • MQTT – eine neue MQTT-Bibliothek.

  • Breaking: Die Sensor-API für Verstärkung/Belichtung/Weißabgleich, find_displacement() / FFT-Framesizes, find_number(), die WINC-Firmware-Tools und AprilTag z_rotation() haben sich alle geändert – siehe die Breaking Changes.

Neue Funktionen

  • Sensorsensor.get_gain_db(), sensor.get_exposure_us(), sensor.get_rgb_gain_db(), ein gain_db_ceiling-Schlüsselwort für set_auto_gain(), MT9V034 hmirror / vflip-Unterstützung sowie sensor.alloc_extra_fb() / sensor.dealloc_extra_fb() für zusätzliche Framebuffer im RAM hinzugefügt.

  • Imageremove_shadows(), min() / max() (Einzelbild-Differenzbildung), get_similarity() (SSIM) mit einem Beispiel zur strukturellen Ähnlichkeit, chrominvar() / illuminvar(), find_rotscale(), linpolar() / logpolar(), die Schlüsselwörter threshold / offset / invert für die adaptiven Filter mean() / mode() / median() / midpoint(), len() / Indizierung des Keypoints-Objekts sowie ein .match()-Accessor für das Keypoint-Match-Objekt hinzugefügt.

  • Bibliotheken / Netzwerk – eine MQTT-Bibliothek (mit einem WiFi-MQTT-Beispiel) und einen network.WINC.MODE_BSP-Modus zum Programmieren der WINC-Firmware über den Debug-UART hinzugefügt.

  • Beispiele – Low-Power-Beispiele deep_sleep.py / stop_mode.py, fortgeschrittenen optischen Fluss sowie Beispielskripte für lineare/log-polare Transformation hinzugefügt; die Firmware parst beim Booten nun uart.ini, um einen REPL-UART zu aktivieren.

Weitere Änderungen und Verbesserungen

  • get_regression() erhielt die Schlüsselwörter area_threshold / pixels_threshold und eine schnellere robuste Regression (für Linienverfolgung / Racing); get_pixel() unterstützt jetzt Bayer-Bilder; STM32H7-Vorarbeiten hinzugefügt (CMSIS-Header / HAL / Bootloader – die H7-Platine ist noch nicht nutzbar); die gebündelte WINC1500-Firmware aktualisiert (19.4.4 / 19.5.2).

Fehlerbehebungen

Bildverarbeitung:

  • Behoben: der Out-of-Bounds-Bug bei der Diamantsuche in find_template(), die Korruption von logpolar / linpolar sowie das Ausreißen von illuminvar() bei nahezu null Farbwerten.

Sensor und System:

  • Behoben: Bugs in der automatischen Verstärkungsregelung, die Wiederherstellung der MAIN_FB-Größe bei snapshot() (sodass copy_to_fb bei einer anderen Auflösung, das Vergrößern/Verkleinern des FB und das Optical-Flow-Pooling wieder funktionieren), der gethostbyname-Timeout der WINC, das pydfu-Clear-Status auf dem H7-Bootloader sowie die Low-Power-Stop-/Standby-Modi.

Hardware- und Platinenunterstützung

  • STM32H7 – Vorarbeiten (CMSIS / HAL / Bootloader); die OpenMV-H7-Platine ist in diesem Release noch nicht nutzbar.

  • WINC1500 – aktualisierte gebündelte Firmware.

Breaking-API-Änderungen

Für den Benutzer sichtbare API-Brüche zwischen v2.6.0 und v2.7.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 Code portieren.

  • 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 verweist auf seinen Diff auf GitHub.

sensor.set_auto_gain() auf dB umgestellt (major)

sensor.set_auto_gain() akzeptiert das Ganzzahl-Schlüsselwort value= nicht mehr und gibt nicht mehr True / False zurück. Verwenden Sie sensor.set_auto_gain(False, gain_db=...) (ein Float-dB-Wert), lesen Sie ihn mit dem neuen sensor.get_gain_db() zurück und umschließen Sie den Aufruf mit try / except, da ein Fehlschlag nun ValueError auslöst.

Commits: b906c5f19

sensor.set_auto_exposure() auf Mikrosekunden umgestellt (major)

sensor.set_auto_exposure() akzeptiert das Ganzzahl-Schlüsselwort value= nicht mehr und gibt nicht mehr True / False zurück. Verwenden Sie sensor.set_auto_exposure(False, exposure_us=...), lesen Sie ihn mit dem neuen sensor.get_exposure_us() zurück und behandeln Sie den bei einem Fehlschlag ausgelösten ValueError.

Commits: 7be0a7a18

find_displacement() / FFT-Framesizes überarbeitet (major)

Die Phasenkorrelation wurde überarbeitet. image.find_displacement() gibt jetzt ein Displacement-Objekt zurück (mit x_translation() / y_translation() – früher x_offset / y_offset – sowie rotation() / scale() und neuen Schlüsselwörtern logpolar / fix_rotation_scale); das separate Rot-Scale-Objekt wurde entfernt und find_rotscale() hinzugefügt. Die FFT-Framesize-Konstanten wurden umbenannt/entfernt: sensor.B40x30 wurde vollständig entfernt, und sensor.B64x32 / B64x64 wurden in Großbuchstaben sensor.B64X32 / B64X64 umbenannt (mit neuen B128X64 / B128X128).

Commits: c78f91b42, 213396d09

sensor.set_auto_whitebal() auf dB umgestellt (minor)

sensor.set_auto_whitebal() ersetzte sein Ganzzahl-Schlüsselwort value=[r, g, b] durch rgb_gain_db=[r, g, b] (Float-dB) und gibt jetzt None zurück (mit ValueError bei einem Fehlschlag) statt True / False. Verwenden Sie das neue sensor.get_rgb_gain_db(), um die Verstärkungen zurückzulesen.

Commits: 30ecbdc4f

set_hmirror() / set_vflip() geben None zurück (minor)

sensor.set_hmirror() und sensor.set_vflip() geben jetzt None zurück und lösen bei einem Fehlschlag ValueError aus, anstatt einen True / False-Status zurückzugeben. Entfernen Sie jeglichen Code, der sich nach ihrem Rückgabewert verzweigt.

Commits: aeb023804

WINC-Firmware-Tools erfordern einen Dateipfad (minor)

Das Firmware-Tooling von network.WINC hat sich geändert: wlan.fw_dump() / wlan.fw_update() benötigen jetzt ein verpflichtendes Argument mit dem Firmware-Dateipfad, und die WINC wird in einem Programmiermodus geöffnet (network.WINC(mode=...)). Aktualisieren Sie argumentlose Aufrufe so, dass sie einen Pfad übergeben (z. B. wlan.fw_update("/winc_19_5_2.bin")).

Commits: fcc3b0b9c

image.find_number() erfordert einen 28x28-ROI (behavior)

image.find_number() (LeNet) erfordert jetzt einen exakt 28x28 großen ROI, der in das Bild passt, und löst andernfalls einen Fehler aus (anstatt auf einem beliebigen/das gesamte Bild umfassenden ROI zu laufen). Übergeben Sie einen expliziten roi=(x, y, 28, 28).

Commits: 4d09a13f3

Vorzeichen von AprilTag z_rotation() umgedreht (behavior)

Das AprilTag z_rotation() (und das verwandte rotation()) verwendet jetzt eine rechtshändige Koordinatenkonvention, sodass der zurückgegebene Winkel gegenüber früheren Releases negiert ist. Skripte, die vom alten Vorzeichen abhängen, müssen den Wert invertieren oder ihre Winkelberechnung anpassen.

Commits: 7673aaf74

Migrations-Checkliste

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

  1. set_auto_gain() auf gain_db= + get_gain_db() portieren und ValueError behandeln (die Auto-Verstärkungs-Überarbeitung).

  2. set_auto_exposure() auf exposure_us= + get_exposure_us() portieren (die Auto-Belichtungs-Überarbeitung).

  3. find_displacement() auf das Displacement-Objekt aktualisieren und die FFT-Framesize-Konstanten umbenennen (die find_displacement-Überarbeitung).

  4. set_auto_whitebal() auf rgb_gain_db= + get_rgb_gain_db() portieren (die Weißabgleich-Überarbeitung) und das Prüfen des Rückgabewerts von set_hmirror() / set_vflip() einstellen (die Mirror/Flip-Änderung).

  5. Den WINC fw_*-Tools einen Firmware-Pfad übergeben (die WINC-Tools-Änderung).

  6. find_number() einen 28x28-roi übergeben (die find_number-Änderung) und die AprilTag-Winkelberechnung an das umgedrehte Vorzeichen von z_rotation() anpassen (die z_rotation-Änderung).

Alle anderen Skripte laufen unverändert weiter.