v4.6.0

v4.6.0 是一个重要的功能版本。重点内容包括:摄像头模块从 sensor 重命名为 csi(并保留向后兼容的 sensor 别名)、全新的 ml.postprocessing 模块、对 Prophesee GenX320 事件传感器、PAG7936 以及 FLIR Boson 热成像摄像头的支持、基于 TinyUSB 的全新 DFU 引导加载程序、Nema GPU 加速以及 MicroPython 1.24。本版本还更改了绘制时的 alpha 取值范围,请阅读下方的破坏性变更说明。

重点内容

  • sensor 现在也叫 csi —— 摄像头模块已重命名为 csisensor 保留为向后兼容的别名(暂无需修改代码)。

  • 全新 ml.postprocessing 模块 —— fomo_postprocessyolo_v2_postprocessyolo_v5_postprocess

  • 新增传感器 —— Prophesee GenX320 事件摄像头、PAG7936 以及 FLIR Boson 320/640 热成像。

  • 全新 DFU 引导加载程序 —— 基于 TinyUSB 的标准 DFU 引导加载程序在所有开发板上取代了旧版 CDC 引导加载程序。

  • Nema GPU —— 在 STM32 上加速 2D/矢量图形。

  • MicroPython 已更新至 1.24.0。

  • 破坏性变更: 绘制时的 alpha 取值范围由 0–256 改为 0–255(参见 alpha 范围变更)。

新功能

  • ml.postprocessing —— 一个用于解码模型输出的新模块:包含 FOMO 解码器(fomo_postprocess,使用 find_blobs + NMS,threshold 可配置)以及 yolo_v2_postprocess / yolo_v5_postprocess(带 thresholdanchorsnms_thresholdnms_sigma)。

  • 事件摄像头可视化 —— 新增 Image.to_evt_dark() / Image.to_evt_light() 方法以及 PALETTE_EVT_DARK / PALETTE_EVT_LIGHT 调色板。

  • 深度可视化 —— 新增 Image.to_depth() 方法以及 PALETTE_DEPTH 调色板(支持 ToF 的开发板)。

  • 传感器自省 —— 新增 IOCTL_GET_RGB_STATS ioctl,返回一个 (R, Gb, Gr, B) 通道统计元组。

  • GenX320 偏置预设 —— 新增 IOCTL_GENX320_SET_BIASES ioctl,提供 GENX320_BIASES_DEFAULT / LOW_LIGHT / ACTIVE_MARKER / LOW_NOISE / HIGH_SPEED 预设。

  • omv.debug_mode() —— 一个用于查询 USB 调试接口是否处于活动状态的新函数。

  • Nema GPU —— 在 STM32 上集成了 Cortex-M55 NemaGFX/NemaVG 驱动,并为 draw_image 提供原地 GPU 直通处理。

  • PAG7936 —— 新增彩条输出、自动曝光 / 自动增益、休眠以及 MIPI 模式。

其他变更与改进

  • MicroPython 已更新至 1.24.0;ulab 已更新至 6.7.3(新增 keepdims)。

  • 通用启动脚本 —— STM32 / i.MX RT / RP2 现在共用一个 _boot.py,它会自动创建闪存/SD 文件系统并附带默认的 main.pyREADME.txt,同时释放临时的启动全局变量。

  • STM32N6 基础工作 —— 基本的 STM32N6 支持、一个 XSPI 驱动、一个通用 MPU 驱动,以及在 STM32 上对固件/引导加载程序的签名。

  • Computed-goto 虚拟机 —— 在 STM32 和 nRF 上启用以加速解释器。

错误修复

摄像头与传感器:

  • 修复了 OV5640 的 PCLK/曝光计算(两条 MIPI 通道,修正了分频器表)。

  • MT9V0xx 的 Bayer-CFA 变体现在可接受 RGB565/BAYER/GRAYSCALE 并输出正确的原始 Bayer 数据,而不再报错。

  • 启用了 PAG7936 镜头阴影校正并修复了高清图像偏移问题;set_framerate() 现在会按分辨率进行上限限制。

  • 修复了 i.MX RT1060 上的 FLIR Lepton 热成像采集问题(修正了 VoSPI 的 CPOL/CPHA),Lepton 快照现在会返回具体的错误码。

  • 修复了 GenX320 的频率取整问题。

图像处理:

  • 修复了灰度图像上 to_ndarray() 中的内存损坏问题。

  • 修复了 Bayer→RGB/灰度转换中的去拜耳边界预测问题。

  • 修复了无 SDRAM 开发板上 draw_image()transpose 问题(分块缓冲区)。

  • 修复了 Image.binary() 中的布尔参数处理问题,以及 ml.Modelload_to_fb 标志。

系统:

  • 修复了 STM32 和 i.MX RT 上的 SPI 仅接收 / 仅发送引脚配置问题。

  • 将 Portenta H7 的以太网 DMA 缓冲区移入 SRAM3,使以太网得以正常工作。

  • 修复了通过 USB 进行调试通道文本输出时丢失字符的问题;将 ML 动态分配大小向上取整,以避免模型缓冲区过小。

硬件与开发板支持

  • Prophesee GenX320 基于事件的视觉传感器(STM32F7 + i.MX RT1060)。

  • PAG7936 传感器(带 MIPI 模式)。

  • FLIR Boson 320/640 热成像摄像头(IDD 4 驱动)。

  • STM32 上的 Nema GPU 加速。

  • STM32N6 引导加载程序/XSPI 基础工作。

  • VL53L5CX —— 新增电源使能引脚支持。

破坏性 API 变更

v4.5.9 与 v4.6.0 之间对用户可见的 API 破坏性变更。范围:modules/ 中的 Python C 模块以及 scripts/libraries/ 中的 Python 库。

每项变更均标注了其影响:

  • major —— 大多数使用它的脚本都需要修改。

  • minor —— 范围较窄的 API;仅影响使用它的脚本。

  • behavior —— API 相同但结果不同;请重新检查已调优的脚本。

  • tooling —— 仅影响烧录 / 主机工具 / 开发板可用性。

各项变更按影响顺序分组。如果你只是想移植代码,可直接跳到文末的 迁移检查清单。每个提交哈希都链接到其在 GitHub 上的 diff。注意:本版本中 sensorcsi 的模块重命名属于破坏性变更 —— sensor 仍可作为别名使用。

绘制 alpha 范围现为 0–255 (major)

draw_image()alpha 参数以及每个接受该参数的叠加层(FIR、ToF、display、TV、MJPEG、alpha 表)现在使用 0–255 范围,而非 0–256。凡是传入 256 以表示完全不透明、或按 256 计算 alpha 的脚本,都必须重新缩放到 0–255。

提交: 1f87b5bb6

FLIR Lepton ioctl 常量重命名 (minor)

三个 Lepton ioctl 常量被缩短:IOCTL_LEPTON_SET_MEASUREMENT_MODEIOCTL_LEPTON_SET_MODEIOCTL_LEPTON_SET_MEASUREMENT_RANGEIOCTL_LEPTON_SET_RANGEIOCTL_LEPTON_GET_FPA_TEMPERATUREIOCTL_LEPTON_GET_FPA_TEMP。随附的示例也已更新。

提交: 12582d54d

ML 后处理 API 变动 (minor)

ml.postprocessing 是本版本中新增的模块,其 API 在开发过程中有所调整:yolo_v2_postprocess 构造函数的关键字 score_threshold 已重命名为 threshold,且空的后处理结果现在返回 () 而非 []。随附的模型 yolov5_rgb_person 已重命名为 yolo_v5_224_nanoml.apps.MicroSpeech 现在会将任意 **kwargs 转发给 audio.init(),而不再使用固定的 gain_db=24

提交: d67bd1ad7979b4e8eeb89b815b26671d9df55c2f4388c

AGAST 成为默认角点检测器 (behavior)

find_keypoints() 现在在所有开发板上默认使用 AGAST 而非 FAST 作为角点检测器。关键点集合(以及由此产生的描述符匹配)与先前版本不同 —— 请重新检查已调优的关键点流程。IDE 的帧缓冲区流式传输现在也被限制在 20 Hz 以减轻 USB 负载。

提交: da6bf6910bc4e39246

引导加载程序、移除的开发板与功能 (tooling)

旧版 CDC 引导加载程序在所有开发板上被一个基于 TinyUSB 的全新标准 DFU 引导加载程序取代 —— 固件更新机制已改变;请相应更新你的烧录工作流程/工具。OpenMV Pro 开发板、独立的 Raspberry Pi Pico 构建版本,以及 WiFi 调试(wifidbg)远程 IDE 功能均已移除。

提交: a03fc90d8c2e616aaeaf3ea774bf8bca979959a38a0d37edeb4fbed58d77fa2

迁移检查清单

要顺利移植到 v4.6.0,通常需要完成以下工作:

  1. 将每个绘制/叠加层的 alpha 值从 0–256 范围重新缩放到 0–255(alpha 范围变更)。

  2. 将所有 FLIR Lepton ioctl 常量重命名为其缩短后的形式(Lepton ioctl 重命名)。

  3. 如果你使用了新的 ML 后处理器,请将 score_threshold 改为 threshold,处理 () 形式的空结果,并更新 yolo_v5_224_nano 模型名称(ML 变更)。

  4. 针对 AGAST 检测器变更,重新检查基于 find_keypoints() 的流程(角点检测器变更)。

  5. 针对全新的 DFU 引导加载程序,更新你的固件烧录工作流程(引导加载程序/开发板变更)。