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—— 摄像头模块已重命名为csi;sensor保留为向后兼容的别名(暂无需修改代码)。全新
ml.postprocessing模块 ——fomo_postprocess、yolo_v2_postprocess、yolo_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(带threshold、anchors、nms_threshold、nms_sigma)。事件摄像头可视化 —— 新增
Image.to_evt_dark()/Image.to_evt_light()方法以及PALETTE_EVT_DARK/PALETTE_EVT_LIGHT调色板。深度可视化 —— 新增
Image.to_depth()方法以及PALETTE_DEPTH调色板(支持 ToF 的开发板)。传感器自省 —— 新增
IOCTL_GET_RGB_STATSioctl,返回一个(R, Gb, Gr, B)通道统计元组。GenX320 偏置预设 —— 新增
IOCTL_GENX320_SET_BIASESioctl,提供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.py和README.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.Model的load_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。注意:本版本中 sensor → csi 的模块重命名不属于破坏性变更 —— 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_MODE → IOCTL_LEPTON_SET_MODE、IOCTL_LEPTON_SET_MEASUREMENT_RANGE → IOCTL_LEPTON_SET_RANGE、IOCTL_LEPTON_GET_FPA_TEMPERATURE → IOCTL_LEPTON_GET_FPA_TEMP。随附的示例也已更新。
提交: 12582d54d
ML 后处理 API 变动 (minor)¶
ml.postprocessing 是本版本中新增的模块,其 API 在开发过程中有所调整:yolo_v2_postprocess 构造函数的关键字 score_threshold 已重命名为 threshold,且空的后处理结果现在返回 () 而非 []。随附的模型 yolov5_rgb_person 已重命名为 yolo_v5_224_nano。ml.apps.MicroSpeech 现在会将任意 **kwargs 转发给 audio.init(),而不再使用固定的 gain_db=24。
AGAST 成为默认角点检测器 (behavior)¶
find_keypoints() 现在在所有开发板上默认使用 AGAST 而非 FAST 作为角点检测器。关键点集合(以及由此产生的描述符匹配)与先前版本不同 —— 请重新检查已调优的关键点流程。IDE 的帧缓冲区流式传输现在也被限制在 20 Hz 以减轻 USB 负载。
引导加载程序、移除的开发板与功能 (tooling)¶
旧版 CDC 引导加载程序在所有开发板上被一个基于 TinyUSB 的全新标准 DFU 引导加载程序取代 —— 固件更新机制已改变;请相应更新你的烧录工作流程/工具。OpenMV Pro 开发板、独立的 Raspberry Pi Pico 构建版本,以及 WiFi 调试(wifidbg)远程 IDE 功能均已移除。
提交: a03fc90d8、c2e616aae、af3ea774b、f8bca9799、59a38a0d3、7edeb4fbe、d58d77fa2
迁移检查清单¶
要顺利移植到 v4.6.0,通常需要完成以下工作:
将每个绘制/叠加层的
alpha值从 0–256 范围重新缩放到 0–255(alpha 范围变更)。将所有 FLIR Lepton ioctl 常量重命名为其缩短后的形式(Lepton ioctl 重命名)。
如果你使用了新的 ML 后处理器,请将
score_threshold改为threshold,处理()形式的空结果,并更新yolo_v5_224_nano模型名称(ML 变更)。针对 AGAST 检测器变更,重新检查基于
find_keypoints()的流程(角点检测器变更)。针对全新的 DFU 引导加载程序,更新你的固件烧录工作流程(引导加载程序/开发板变更)。