v3.6.1¶
v3.6.1 ist ein großes Release. Es führt das imu-Modul (LSM6DS3) ein, eine Reihe neuer sensor-Getter-APIs mit IMU-gesteuerter automatischer Rotation, eine 4-Punkt-Perspektivkorrektur rotation_corr() und nimmt den Arduino Portenta H7 mit den Kameras HIMAX HM01B0 und OV7690 in Betrieb. Mehrere sensor- / image-APIs wurden geändert und TensorFlow wurde auf dem M7 entfernt — lies die nachfolgenden inkompatiblen Änderungen.
Highlights¶
imu-Modul — Beschleunigungssensor / Gyroskop / Temperatur / Roll / Pitch auf dem LSM6DS3 (OpenMV 4 / Portenta).Sensor-Getter + automatische Rotation —
get_pixformat()/get_framesize()/get_hmirror()/get_vflip()/get_windowing(),set_transpose()/set_auto_rotation()und IMU-gesteuerte Schnappschuss-Rotation.Perspektivkorrektur —
rotation_corr()erhält die Schlüsselwörterfovundcorners(4-Punkt).Neue Hardware — Arduino Portenta H7, HIMAX HM01B0 und OV7690-Kamera.
Inkompatibel:
set_pixformat()/set_framesize()geben jetztNonezurück,sensor.set_framerate()wurde entfernt, TensorFlow wurde auf dem M7 entfernt undlens_corr()/linpolar()erfordern jetzt gerade Abmessungen — siehe die inkompatiblen Änderungen.
Neue Funktionen¶
imu— ein neues IMU-Modul:imu.acceleration_mg(),imu.angular_rate_mdps(),imu.temperature_c(),imu.roll(),imu.pitch()undimu.sleep()(LSM6DS3 auf OpenMV 4 / Portenta).Sensor-Getter —
sensor.get_pixformat(),get_framesize(),get_hmirror(),get_vflip(),get_windowing(),set_transpose()/get_transpose()undset_auto_rotation()/get_auto_rotation()wurden hinzugefügt.Automatische Rotation —
sensor.snapshot()nutzt die IMU, um Einzelbilder zu spiegeln / horizontal zu spiegeln / zu transponieren, wenn die automatische Rotation aktiviert ist.rotation_corr()— die Schlüsselwörterfovundcorners(4-Punkt-Perspektive) wurden hinzugefügt, mit Beispielen zur Perspektivkorrektur.lcd.init()— einbgr-Schlüsselwortargument wurde hinzugefügt.collections.deque— im MicroPython-Build aktiviert.Die ID-Konstanten
sensor.OV7690undsensor.HM01B0sowie ein numpy-ähnlichesulab-Bildfilter-Beispiel wurden hinzugefügt.
Weitere Änderungen und Verbesserungen¶
Die Bildfilter (Median / Modus / Mittelwert / …) sowie
find_circles()und die Linsenkorrektur wurden erheblich optimiert;alloc_extra_fbkann nun eine beliebige Anzahl von Bytes allozieren; das Personenerkennungs-Modell wurde mit einer neuen Average-Pool-Operation neu erstellt.
Fehlerbehebungen¶
Kamera und Sensoren:
Behoben wurden: OV2640
sleep()(nutzt jetzt das COM2-Standby-Register statt des Power-Down-Pins), die FSYNC-Pin-Konfiguration, die HM01B0-HSYNC/VSYNC-Polaritäten und die I2C-Adresse/-Suche, der Portenta-Sensor-Power-Down-GPIO und der Kamera-Reset-Pin; außerdem wurde die automatische Rotation deaktiviert, wenn der IMU-Pitch nahe 90°/270° liegt.
Bildverarbeitung und System:
Behoben wurden: ein Bildfilter-Grenzprüfungsfehler, ein Hardfault beim Deaktivieren des D-Cache, das Booten auf Boards ohne SD-Karte, ein
tf.load()-load_to_fb-Fehler, der Stack-Überlauf bei der Personenerkennung (H7-Stack auf ≥12 KB angehoben) und die USB-Deskriptor-Offsets für den High-Speed-Modus auf dem OpenMV 4 Plus.
Hardware- und Board-Unterstützung¶
Arduino Portenta H7 — erste Board-Inbetriebnahme (STM32H747 Clock-/OSC-/HSE-Konfiguration, CMSIS-Header, ADC, SDRAM, Arduino-USB-PID).
HIMAX HM01B0 — neuer Monochrom-Kameratreiber (Bayer, externer Oszillator-Takt).
OV7690 — neuer Kameratreiber.
LSM6DS3 IMU — OpenMV 4 / Portenta.
Inkompatible API-Änderungen¶
Für Benutzer sichtbare API-Brüche zwischen v3.6.0 und v3.6.1. Umfang: Python-C-Module in modules/ und Python-Bibliotheken in scripts/libraries/.
Jede Änderung ist mit ihrer Auswirkung gekennzeichnet:
minor — eng begrenzte API; betrifft nur Skripte, die sie verwendet haben.
behavior — gleiche API, andere Ergebnisse; abgestimmte Skripte erneut prüfen.
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.
sensor.set_framerate() entfernt (minor)¶
Der wirkungslose Stub sensor.set_framerate() wurde entfernt; sein Aufruf löst nun AttributeError aus. Entferne den Aufruf und steuere das Bild-Timing stattdessen über Framesize/Belichtung. (Ein funktionierendes set_framerate() wird in v4.0.2 wieder eingeführt.)
Commits: 705e98f91
TensorFlow auf der OpenMV Cam M7 entfernt (minor)¶
TensorFlow (das tf-Modul) wurde auf der OpenMV Cam M7 / OpenMV 3 deaktiviert (es passt nicht mehr hinein). import tf schlägt auf der M7 fehl — verwende für TensorFlow eine Kamera der H7-Klasse. (tf wird auf der F7 in v3.6.3 wieder aktiviert.)
Commits: 2ae875077
set_pixformat() / set_framesize() geben None zurück (behavior)¶
sensor.set_pixformat() und sensor.set_framesize() geben nun None statt True zurück, und ein nicht unterstütztes Pixelformat löst nun ein ValueError statt einer Assertion aus. Code, der den Rückgabewert geprüft hat (z. B. if sensor.set_pixformat(...):), muss dies unterlassen, und Code, der AssertionError für nicht unterstützte Formate abgefangen hat, muss ValueError abfangen.
Commits: f314ac4e7
lens_corr() / linpolar() / logpolar() erfordern gerade Abmessungen (behavior)¶
image.lens_corr() und image.linpolar() / image.logpolar() erfordern nun eine gerade Bildbreite und -höhe und lösen bei ungeraden Abmessungen einen Fehler aus. Schneide das Bild zu oder skaliere es auf gerade Abmessungen, bevor du diese Methoden aufrufst.
Migrations-Checkliste¶
Für eine saubere Portierung auf v3.6.1 ist üblicherweise Folgendes zu tun:
Entferne
sensor.set_framerate()-Aufrufe (die Entfernung von set_framerate).Verlagere TensorFlow-Workloads von der OpenMV Cam M7 weg (die M7-TensorFlow-Änderung).
Verlasse dich nicht mehr auf den Rückgabewert von
set_pixformat()/set_framesize()und fangeValueErrorfür nicht unterstützte Pixelformate ab (die Rückgabewert-Änderung).Stelle vor
lens_corr()/linpolar()/logpolar()gerade Bildabmessungen sicher (die Anforderung gerader Abmessungen).
Alle anderen Skripte laufen unverändert.