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 Rotationget_pixformat() / get_framesize() / get_hmirror() / get_vflip() / get_windowing(), set_transpose() / set_auto_rotation() und IMU-gesteuerte Schnappschuss-Rotation.

  • Perspektivkorrekturrotation_corr() erhält die Schlüsselwörter fov und corners (4-Punkt).

  • Neue Hardware — Arduino Portenta H7, HIMAX HM01B0 und OV7690-Kamera.

  • Inkompatibel: set_pixformat() / set_framesize() geben jetzt None zurück, sensor.set_framerate() wurde entfernt, TensorFlow wurde auf dem M7 entfernt und lens_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() und imu.sleep() (LSM6DS3 auf OpenMV 4 / Portenta).

  • Sensor-Gettersensor.get_pixformat(), get_framesize(), get_hmirror(), get_vflip(), get_windowing(), set_transpose() / get_transpose() und set_auto_rotation() / get_auto_rotation() wurden hinzugefügt.

  • Automatische Rotationsensor.snapshot() nutzt die IMU, um Einzelbilder zu spiegeln / horizontal zu spiegeln / zu transponieren, wenn die automatische Rotation aktiviert ist.

  • rotation_corr() — die Schlüsselwörter fov und corners (4-Punkt-Perspektive) wurden hinzugefügt, mit Beispielen zur Perspektivkorrektur.

  • lcd.init() — ein bgr-Schlüsselwortargument wurde hinzugefügt.

  • collections.deque — im MicroPython-Build aktiviert.

  • Die ID-Konstanten sensor.OV7690 und sensor.HM01B0 sowie ein numpy-ähnliches ulab-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_fb kann 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.

Commits: b36460a36, 2b26ca17b

Migrations-Checkliste

Für eine saubere Portierung auf v3.6.1 ist üblicherweise Folgendes zu tun:

  1. Entferne sensor.set_framerate()-Aufrufe (die Entfernung von set_framerate).

  2. Verlagere TensorFlow-Workloads von der OpenMV Cam M7 weg (die M7-TensorFlow-Änderung).

  3. Verlasse dich nicht mehr auf den Rückgabewert von set_pixformat() / set_framesize() und fange ValueError für nicht unterstützte Pixelformate ab (die Rückgabewert-Änderung).

  4. Stelle vor lens_corr() / linpolar() / logpolar() gerade Bildabmessungen sicher (die Anforderung gerader Abmessungen).

Alle anderen Skripte laufen unverändert.