v4.7.0¶
v4.7.0 is a major feature release. Headlining it: the new OpenMV AE3
(Alif Ensemble, Cortex-M55 + Ethos-U55 NPU) board with a dual-core
openamp programming model, a read-only ROMFS (/rom) filesystem
with bundled models and cascades, VL53L8CX 8x8 time-of-flight support, new
YOLOv8 / YOLO-LC post-processors, and MicroPython 1.25. It also changes how
built-in models and Haar cascades are loaded, so read the breaking changes
below.
Highlights¶
OpenMV AE3 board — the Alif Ensemble (Cortex-M55 + Ethos-U55 NPU) board, with a full port, bootloader, and ROMFS.
Dual-core
openampmodule — offload work to the second Alif core over RPMsg (the@async_remotedecorator,Endpoint/EndpointIO).ROMFS — a read-only
/romfilesystem with built-in TFLite models and Haar cascades, plus a newtools/mkromfs.pyhost builder.VL53L8CX 8x8 multi-zone time-of-flight sensor support.
New ML post-processors —
yolo_v8_postprocessandyolo_lc_postprocess.MicroPython updated to 1.25.0.
Breaking: built-in models and Haar cascades now load from
/romby path (see the ml.Model change and the Haar cascade change).
New features¶
OpenMV AE3 — new Alif Ensemble board (Cortex-M55 application core + Ethos-U55 NPU), with port, bootloader, board configuration, RGB LED, and ROMFS support.
openamp— a new module for the Alif dual-core (Open-AMP / RPMsg) RPC model:Endpoint,EndpointIO,new_service_callback, and the@async_remotedecorator to offload marshalled functions to the second core. The HE/HP cores ship a default asyncio-based_boot.pytask runner.audio— the Alif port adds the audio module (PDM microphone) with a callback-based streaming API (audio.init(channels=, frequency=, gain_db=, buffers=, samples=, overflow=, highpass=)) on the AE3.ROMFS — a read-only
/romfilesystem with built-in assets (TFLite models, Haar cascades, …) packaged per board, a newtools/mkromfs.pyhost tool (tflite, tflite+vela, Haar cascade, text, binary), and ascripts/libraries/romfs.pyhelper exposingls_romfs().ML post-processing — new
yolo_v8_postprocess(YOLOv8) andyolo_lc_postprocess(lightweight tiny-YOLOv2 variant with embedded-optimized default anchors) classes, each takingthreshold,nms_threshold, andnms_sigma.GenX320 anti-flicker — a new
IOCTL_GENX320_SET_AFKioctl to enable and configure the event sensor’s anti-flicker filter (min/max flicker frequency in Hz), with agenx320_grayscale_set_afk.pyexample.VL53L8CX — support for the 8x8 multi-zone time-of-flight sensor through the
tofmodule (auto-detected, 8x8 at 15 Hz).
Other changes and improvements¶
MicroPython updated to 1.25.0 (STM32 and i.MX RT ports), with the upstream Alif port added and legacy BT-HCI drivers dropped from the STM32 / i.MX RT ports.
GenX320 — a new ISSD sequence doubles the internal pixel clock (24 → 48 MHz) for higher frame rates.
STM32N6 / ST Edge AI — groundwork for STM32N6 Neural-ART model deployment (ST Edge AI tooling and ROMFS support).
PAG7936 — the CSI PHY bitrate is now set, improving operation of that sensor.
Bug fixes¶
Camera and sensors:
Fixed the IMU over I2C — boards wiring the LSM6DSx IMU on I2C now initialize and read correctly (the I2C path previously used a broken read path and wrong constants).
FLIR Boson init now retries up to 10 times for older (< IDD 4.x) sensors that take ~10 s to boot, and factory-default settings are restored on reset so externally-loaded settings cannot break the video output.
Fixed the GenX320
psee_ehc_activate_overridewriting the wrong (zero) accumulation time.On STM32 boards without FastMode+ hardware, requesting I2C fast mode is now properly guarded instead of silently misconfiguring the bus.
Machine learning:
Fixed bounding-box gathering and
np.nonzerohandling in the YOLOv2 / YOLOv5 post-processors, improving detection reliability.
Hardware and board support¶
OpenMV AE3 — new Alif Ensemble (Cortex-M55 + Ethos-U55 NPU) board.
VL53L8CX — 8x8 multi-zone time-of-flight sensor; the AE3’s ToF sensor was switched from the VL53L5CX to the VL53L8CX.
STM32N6 — ST Edge AI (Neural-ART) model-deployment groundwork.
Breaking API changes¶
User-visible API breaks between v4.6.20 and v4.7.0. Scope: Python C-modules in
modules/ and Python libraries in scripts/libraries/.
Each change is tagged with its impact:
major — most scripts that used it need edits.
minor — narrow API; only affects scripts that used it.
behavior — same API, different results; re-check tuned scripts.
Changes are grouped by impact in that order. If you just want to port your code, jump to the migration checklist at the end for a condensed to-do list. Each commit hash links to its diff on GitHub.
Built-in models load by path, not name (major)¶
ml.Model no longer loads a built-in model from a bare name string.
Models are now loaded from the filesystem / ROMFS by path:
model = ml.Model("/rom/person_detect.tflite") # was: ml.Model("person_detect")
The C-side model.labels attribute was removed; labels are now loaded by
the Python ml.Model wrapper from a sidecar <model>.txt file
(None if absent). All bundled examples and ml/apps.py were updated to
/rom/*.tflite paths.
Haar cascades load from ROMFS (minor)¶
image.HaarCascade() now loads built-in cascades through the VFS / ROMFS.
The default frontal-face cascade file was renamed from
haarcascade_frontalface_default.xml to haarcascade_frontalface.xml,
and a load failure now raises RuntimeError (“Failed to load Haar
cascade”) instead of OSError.
Commit: 9de1220d8
tof.reset() / tof.deinit() semantics (behavior)¶
In the tof module, reset() previously aliased init() and there
was no real deinit. tof.reset() now performs an actual sensor reset and
tof.deinit() properly shuts the sensor down (with VL53L5CX shutdown
support). Code that relied on reset() re-initializing the sensor should be
re-checked.
GenX320 timing and event-mode constraints (behavior)¶
The new GenX320 ISSD sequence changes the sensor time base: frame-rate and exposure arguments are now expressed in 1 MHz units instead of being clock-scaled, and HSYNC blanking is adjusted dynamically to the requested frame rate. Scripts that hard-coded GenX320 timing values must re-tune them. Event-mode capture now raises an error when image transpose is enabled (it is unsupported in that configuration).
Migration checklist¶
For a clean port to v4.7.0 the typical work is:
Change built-in model loading from a name string to a
/rom/<name>.tflitepath, and provide labels via a sidecar<name>.txtfile (the ml.Model change).Update
haarcascade_frontalface_default.xmltohaarcascade_frontalface.xmland catchRuntimeError(notOSError) on cascade load failure (the Haar cascade change).Remove code that relied on
tof.reset()re-initializing the sensor (the tof change).Re-tune any hard-coded GenX320 frame-rate / exposure values to 1 MHz units, and do not enable transpose in event mode (the GenX320 change).