v3.6.1

v3.6.1 är en stor release. Den introducerar modulen imu (LSM6DS3), en uppsättning nya getter-API:er för sensor med IMU-driven autorotation, 4-punkts perspektivkorrigering rotation_corr() och tar upp Arduino Portenta H7 med kamerorna HIMAX HM01B0 och OV7690. Flera API:er i sensor / image ändrades och TensorFlow togs bort på M7 — läs de brytande ändringarna nedan.

Höjdpunkter

  • imu-modul — accelerometer / gyro / temperatur / roll / pitch på LSM6DS3 (OpenMV 4 / Portenta).

  • Sensor-getters + autorotationget_pixformat() / get_framesize() / get_hmirror() / get_vflip() / get_windowing(), set_transpose() / set_auto_rotation() samt IMU-driven stillbildsrotation.

  • Perspektivkorrigeringrotation_corr() får nyckelorden fov och corners (4-punkts).

  • Ny hårdvara — Arduino Portenta H7, HIMAX HM01B0 och OV7690-kamera.

  • Brytande: set_pixformat() / set_framesize() returnerar nu None, sensor.set_framerate() togs bort, TensorFlow togs bort på M7 och lens_corr() / linpolar() kräver nu jämna dimensioner — se de brytande ändringarna.

Nya funktioner

  • imu — en ny IMU-modul: imu.acceleration_mg(), imu.angular_rate_mdps(), imu.temperature_c(), imu.roll(), imu.pitch() och imu.sleep() (LSM6DS3 på OpenMV 4 / Portenta).

  • Sensor-getters — lade till sensor.get_pixformat(), get_framesize(), get_hmirror(), get_vflip(), get_windowing(), set_transpose() / get_transpose() samt set_auto_rotation() / get_auto_rotation().

  • Autorotationsensor.snapshot() använder IMU:n för att vända / spegla / transponera bildrutor när autorotation är aktiverat.

  • rotation_corr() — lade till nyckelorden fov och corners (4-punkts perspektiv), med exempel på perspektivkorrigering.

  • lcd.init() — lade till ett bgr-nyckelordsargument.

  • collections.deque — aktiverad i MicroPython-bygget.

  • Lade till id-konstanterna sensor.OV7690 och sensor.HM01B0 samt ett numpy-liknande bildfilter-exempel med ulab.

Övriga ändringar och förbättringar

  • Optimerade bildfiltren (median / mode / mean / …) samt find_circles() och linskorrigering avsevärt; alloc_extra_fb kan nu allokera valfritt antal byte; personavkänningsmodellen byggdes om med en ny average-pool-operation.

Buggfixar

Kamera och sensorer:

  • Fixade OV2640 sleep() (använder nu COM2-standbyregistret i stället för power-down-stiftet), FSYNC-stiftkonfigurationen, HM01B0:s HSYNC/VSYNC-polariteter och I2C-adress/scanning, Portentas GPIO för sensorns power-down och kamerans reset-stift, samt inaktiverade autorotation när IMU:ns pitch är nära 90°/270°.

Bildbehandling och system:

  • Fixade en bugg i gränskontrollen för bildfilter, en hardfault vid inaktivering av D-cachen, uppstart på kort utan SD-kort, en tf.load()-bugg med load_to_fb, stacköverflödet i personavkänningen (H7-stacken höjdes till ≥12 KB) samt USB-deskriptorernas offset för höghastighetsläge på OpenMV 4 Plus.

Hårdvaru- och kortstöd

  • Arduino Portenta H7 — initial korttuppstart (STM32H747 klock-/OSC-/HSE-konfiguration, CMSIS-headers, ADC, SDRAM, Arduino USB PID).

  • HIMAX HM01B0 — ny monokrom kameradrivrutin (Bayer, klocka från extern oscillator).

  • OV7690 — ny kameradrivrutin.

  • LSM6DS3 IMU — OpenMV 4 / Portenta.

Brytande API-ändringar

Användarsynliga API-brott mellan v3.6.0 och v3.6.1. Omfattning: Python-C-moduler i modules/ och Python-bibliotek i scripts/libraries/.

Varje ändring är märkt med sin påverkan:

  • minor — smalt API; påverkar endast skript som använde det.

  • behavior — samma API, andra resultat; kontrollera finjusterade skript på nytt.

Ändringarna är grupperade efter påverkan i den ordningen. Om du bara vill porta din kod, hoppa till migrationschecklistan i slutet. Varje commit-hash länkar till sin diff på GitHub.

sensor.set_framerate() borttagen (minor)

No-op-stubben sensor.set_framerate() togs bort; att anropa den ger nu AttributeError. Ta bort anropet och styr i stället bildrutetajmningen via framesize/exponering. (En fungerande set_framerate() återinförs i v4.0.2.)

Commits: 705e98f91

TensorFlow borttaget på OpenMV Cam M7 (minor)

TensorFlow (tf-modulen) inaktiverades på OpenMV Cam M7 / OpenMV 3 (det får inte längre plats). import tf på M7 misslyckas — använd en kamera i H7-klass för TensorFlow. (tf återaktiveras på F7 i v3.6.3.)

Commits: 2ae875077

set_pixformat() / set_framesize() returnerar None (behavior)

sensor.set_pixformat() och sensor.set_framesize() returnerar nu None i stället för True, och ett pixelformat som inte stöds ger nu ValueError i stället för en assertion. Kod som kontrollerade returvärdet (t.ex. if sensor.set_pixformat(...):) måste sluta göra det, och kod som fångade AssertionError för format som inte stöds måste fånga ValueError.

Commits: f314ac4e7

lens_corr() / linpolar() / logpolar() kräver jämna dimensioner (behavior)

image.lens_corr() och image.linpolar() / image.logpolar() kräver nu jämn bildbredd och -höjd och ger ett fel vid udda dimensioner. Beskär eller ändra storlek på bilden till jämna dimensioner innan du anropar dessa metoder.

Commits: b36460a36, 2b26ca17b

Migrationschecklista

För en ren portning till v3.6.1 är det typiska arbetet:

  1. Ta bort anrop till sensor.set_framerate() (borttagningen av set_framerate).

  2. Flytta TensorFlow-arbetslaster bort från OpenMV Cam M7 (TensorFlow-ändringen för M7).

  3. Sluta förlita dig på returvärdet från set_pixformat() / set_framesize() och fånga ValueError för pixelformat som inte stöds (returvärdesändringen).

  4. Säkerställ jämna bilddimensioner innan lens_corr() / linpolar() / logpolar() (kravet på jämna dimensioner).

Alla andra skript körs oförändrade.