v3.9.0¶
v3.9.0 ist ein Major-Release. Es fügt den nRF-Port mit dem Arduino Nano 33 BLE Sense (Kamera, PDM-audio-Modul, ulab, eingefrorene Sensortreiber) hinzu, bringt FLIR Lepton sowie MLX90641 / MLX90621-Thermalsensoren und ein stark überarbeitetes fir-Modul, OV5640-Autofokus-ioctls und den neuen Streaming-Typ image.ImageIO. Das alte CMSIS-NN-nn-Modul und die alten Klassen ImageReader / ImageWriter wurden entfernt — lesen Sie die nachstehenden Breaking Changes.
Höhepunkte¶
Arduino Nano 33 BLE Sense — neuer nRF52840-Port mit Kamera, einem PDM-
audio-Modul,ulabund eingefrorenen Sensortreibern.Thermal — FLIR Lepton-, MLX90641- und MLX90621-Unterstützung mit einem überarbeiteten
fir-Modul (Paletten, Spiegelung, Skalierung, Radiometrie, FFC).OV5640-Autofokus — neue
sensor.IOCTL_*_AUTO_FOCUS-ioctls.image.ImageIO— ein einheitlicher Bildstrom-Typ (Speicher oder Datei; read/write/seek/size/close), derImageReader/ImageWriterersetzt.Breaking: das CMSIS-NN-
nn-Modul undimage.ImageReader/image.ImageWriterwurden entfernt, und das Verhalten vonfind_lines()/firhat sich geändert — siehe die Breaking Changes.
Neue Funktionen¶
nRF-Port / Arduino Nano 33 BLE Sense — neuer nRF52840-Port und Board-Unterstützung, mit einem neuen
audio-Modul (audio.init(),audio.start_streaming(),audio.stop_streaming()), aktiviertemulabund eingefrorenenapds9960- /lps22h- /lsm9ds1- /hts221-Sensortreibern.image.ImageIO— ein neuer Bildstrom-Typ, der sowohl Speicher- als auch Dateistreams mitread()/write()/seek()/size()/close()unterstützt, plus ImageIO-Lese-/Schreib-/Speicher-Beispiele.FLIR Lepton —
FIR_LEPTON-Unterstützung mitfir.radiometric(),fir.trigger_ffc()undfir.register_vsync_cb()hinzugefügt.Thermalsensoren — MLX90641 (
FIR_MLX90641)- und MLX90621-Thermopile-Unterstützung hinzugefügt (offizielle Melexis-Treiber).fir-Paletten / -Orientierung — die Konstantenfir.PALETTE_RAINBOW/PALETTE_IRONBOW/GRAYSCALE/RGB565hinzugefügt, undfir.read_ir()akzeptiert nunhmirror/vflip/transpose.OV5640-Autofokus —
sensor.IOCTL_TRIGGER_AUTO_FOCUS/IOCTL_PAUSE_AUTO_FOCUS/IOCTL_RESET_AUTO_FOCUS/IOCTL_WAIT_ON_AUTO_FOCUShinzugefügt (OpenMV 2/3/4/4 Plus/PT/Portenta).Die Arduino-Beispiele wurden in Verzeichnisse pro Board reorganisiert.
Weitere Änderungen und Verbesserungen¶
Umstellung auf komprimierte MicroPython-Fehlermeldungen (kürzere Ausnahmezeichenketten); das
type-Argument vonfir.init()erkennt nun automatisch über einen I2C-Bus-Scan, wenn es weggelassen wird; diexalloc-Ausnahme meldet nun die Anzahl der angeforderten Bytes; UART 8 wurde auf dem Portenta aktiviert; die FIR-Beispiele wurden inthermal_camera.py/thermal_overlay.py/thermal_overlay_lcd.pyzusammengefasst. Um in den Flash zu passen, wurdenimage.get_similarity()und die selektive Suche im OpenMV-4-Build deaktiviert, und die Bildbibliothek kann nun ohne Dateisystem gebaut werden (für Boards ohne Dateisystem).
Fehlerbehebungen¶
Kamera und Sensoren:
Behoben: die OV5640-PCLK-Berechnung; fehlende I2C-IRQ-Handler hinzugefügt (behebt I2C-Übertragungs-Hänger); das cambus-I2C-Lesen/-Schreiben für Zuverlässigkeit überarbeitet; der Lepton-I2C-Bus auswählbar gemacht; die cambus-Bus-Wiederherstellungs-Pins in die Konfiguration pro Board verschoben; der cambus-Scan wird vor dem Fehlschlagen einmal erneut versucht; und das OpenMV PT (Lepton + Kamera mit gemeinsamem I2C) zum Laufen gebracht.
Thermal:
Behoben: die Maximalwert-Berechnung in
firget_ir()/draw_ir()undimage.get_similarity()(FLT_MIN→-FLT_MAX), die AMG8833-12→16-Bit-Verarbeitung und die MLX90621-Genauigkeit (offizieller Melexis-Treiber).
Anzeige, Audio und System:
STM32-SPI-LCD-Übertragungen auf HAL-SPI-Callbacks verschoben (Anzeigezuverlässigkeit); behoben: Nano 33
audio.init()(HF-Oszillator + PDM-Verhältnis, damit das Mikrofon funktioniert), der H7-Timer-Zustand mit der neuen HAL, nRF-gc_collectsowie die frühe Board-Initialisierung/-Deinitialisierung; und das Ausgeben der irreführenden Meldung „uh oh, no preference for overlapping detection“ währendfind_apriltags()/find_rects()wurde gestoppt.
Hardware- und Board-Unterstützung¶
Arduino Nano 33 BLE Sense — neues nRF52840-Board (Kamera, PDM-Audio,
ulab, eingefrorene Sensortreiber).FLIR Lepton-, MLX90641- und MLX90621-Thermalsensoren.
OV5640-Autofokus — OpenMV 2/3/4/4 Plus/PT/Portenta.
Portenta — UART 8 aktiviert.
Breaking-API-Änderungen¶
Für den Benutzer sichtbare API-Brüche zwischen v3.8.0 und v3.9.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 — eng begrenzte 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 lediglich Ihren Code portieren möchten, springen Sie zur Migrations-Checkliste am Ende. Jeder Commit-Hash verlinkt auf seinen Diff auf GitHub.
CMSIS-NN-nn-Modul entfernt (major)¶
Das CMSIS-NN-nn-Modul wurde entfernt, einschließlich nn.load(), net.forward(), net.search() und des nn_class-Helfers. Die Modell-Inferenz wechselt zum TensorFlow-Lite-(tf)-Modul. Skripte, die .network-Modelle mit nn geladen haben, müssen auf tf mit einem TensorFlow-Lite-Modell portiert werden.
Commits: fbc767b36
ImageReader / ImageWriter durch image.ImageIO ersetzt (major)¶
image.ImageReader / image.ImageWriter und ihre Methoden next_frame() / add_frame() wurden entfernt und durch den neuen Typ image.ImageIO ersetzt, der sowohl Speicher- als auch Dateistreams über read() / write() / seek() / size() / close() unterstützt. Code, der die alten Reader-/Writer-Klassen verwendet, muss auf image.ImageIO portiert werden (siehe die umbenannten Beispiele imageio_read.py / imageio_write.py).
Commits: 783a78754
Schlüsselwort scale von fir.draw_ir() entfernt (minor)¶
fir.draw_ir() wurde auf Basis der neuen Bildzeichnungs-Pipeline neu geschrieben. Das Schlüsselwort scale=(min, max) wurde entfernt, und hint, x_scale, y_scale, roi sowie positionsbasierte x/y-Offset-Argumente wurden hinzugefügt. Skripte, die scale=(min, max) an fir.draw_ir() übergeben haben, müssen es entfernen und die neuen Argumente verwenden.
Commits: 0a29103b1
find_lines()-Approximation (behavior)¶
image.find_lines() approximiert die Gradientenstärke nun als (abs(gx) + abs(gy)) / 2 und überspringt Stärken unter 126. Das ist schneller, ändert aber die Menge der erkannten Linien und die Akkumulatorwerte, überprüfen und justieren Sie also threshold / theta_margin / rho_margin erneut.
Commits: 902ae3c98
fir.snapshot() überarbeitet (behavior)¶
fir.snapshot() wurde mit einer neuen Schlüsselwort-API (hmirror, vflip, transpose, x_scale, y_scale, x_size, y_size, scale, rgb_channel, alpha, color_palette, hint, pixformat, copy_to_fb) wesentlich überarbeitet, und die mitgelieferten Beispiele wurden neu geschrieben. Das bisherige positionsbasierte / nur-pixformat-Verhalten hat sich geändert; portieren Sie FIR-Skripte auf die neue Schlüsselwort-Form (siehe die aktualisierten Thermopile-Shield-Beispiele).
Commits: 53f2248b8
fir.init() löst bei Fehler eine Ausnahme aus (behavior)¶
fir.init() löst nun eine Ausnahme aus (und de-initialisiert sauber), wenn der Thermalsensor nicht erkannt wird, statt stillschweigend fortzufahren. Umschließen Sie fir.init() mit try / except (oder stellen Sie sicher, dass der Sensor angeschlossen ist), wo Sie sich zuvor darauf verlassen haben, dass keine Ausnahme ausgelöst wird.
Commits: 4b2f972f3
Migrations-Checkliste¶
Für eine saubere Portierung auf v3.9.0 fällt typischerweise folgende Arbeit an:
Portieren Sie die CMSIS-NN-
nn-Modell-Inferenz auf das TensorFlow-Lite-tf-Modul (die nn-Entfernung).Ersetzen Sie
image.ImageReader/image.ImageWriterdurchimage.ImageIO(die ImageIO-Änderung).Entfernen Sie das Schlüsselwort
scale=(min, max)ausfir.draw_ir()und verwenden Sie die neuen Argumente (die draw_ir-Änderung).Justieren Sie die
find_lines()-Parameter erneut gegen die approximierte Stärke-Metrik (die find_lines-Änderung).Portieren Sie FIR-Skripte auf die neue
fir.snapshot()-Schlüsselwort-API (die fir.snapshot-Änderung) und behandeln Sie, dassfir.init()bei einem fehlenden Sensor eine Ausnahme auslöst (die fir.init-Änderung).
Alle anderen Skripte laufen unverändert.