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-API –
set_auto_gain()/set_auto_exposure()/set_auto_whitebal()verwenden jetzt dB / Mikrosekunden, mit den passendenget_gain_db()/get_exposure_us()/get_rgb_gain_db().Phasenkorrelation – überarbeitetes
find_displacement()mit Rotation / Skalierung sowiefind_rotscale()/linpolar()/logpolar().SSIM – strukturelle Ähnlichkeit
image.get_similarity().Zusätzliche Framebuffer –
sensor.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 AprilTagz_rotation()haben sich alle geändert – siehe die Breaking Changes.
Neue Funktionen¶
Sensor –
sensor.get_gain_db(),sensor.get_exposure_us(),sensor.get_rgb_gain_db(), eingain_db_ceiling-Schlüsselwort fürset_auto_gain(), MT9V034hmirror/vflip-Unterstützung sowiesensor.alloc_extra_fb()/sensor.dealloc_extra_fb()für zusätzliche Framebuffer im RAM hinzugefügt.Image –
remove_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 Filtermean()/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 nunuart.ini, um einen REPL-UART zu aktivieren.
Weitere Änderungen und Verbesserungen¶
get_regression()erhielt die Schlüsselwörterarea_threshold/pixels_thresholdund 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 vonlogpolar/linpolarsowie das Ausreißen vonilluminvar()bei nahezu null Farbwerten.
Sensor und System:
Behoben: Bugs in der automatischen Verstärkungsregelung, die Wiederherstellung der
MAIN_FB-Größe beisnapshot()(sodasscopy_to_fbbei einer anderen Auflösung, das Vergrößern/Verkleinern des FB und das Optical-Flow-Pooling wieder funktionieren), dergethostbyname-Timeout der WINC, daspydfu-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).
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:
set_auto_gain()aufgain_db=+get_gain_db()portieren undValueErrorbehandeln (die Auto-Verstärkungs-Überarbeitung).set_auto_exposure()aufexposure_us=+get_exposure_us()portieren (die Auto-Belichtungs-Überarbeitung).find_displacement()auf das Displacement-Objekt aktualisieren und die FFT-Framesize-Konstanten umbenennen (die find_displacement-Überarbeitung).set_auto_whitebal()aufrgb_gain_db=+get_rgb_gain_db()portieren (die Weißabgleich-Überarbeitung) und das Prüfen des Rückgabewerts vonset_hmirror()/set_vflip()einstellen (die Mirror/Flip-Änderung).Den WINC
fw_*-Tools einen Firmware-Pfad übergeben (die WINC-Tools-Änderung).find_number()einen 28x28-roiübergeben (die find_number-Änderung) und die AprilTag-Winkelberechnung an das umgedrehte Vorzeichen vonz_rotation()anpassen (die z_rotation-Änderung).
Alle anderen Skripte laufen unverändert weiter.