v4.0.0

v4.0.0 是重大的 v3 → v4 版本。它引入了现代的多帧 sensor 缓冲 API(双 / 三缓冲以及视频 FIFO)、帧完成回调、基于 NimBLE 协议栈并支持 Portenta 的 Bluetooth 模块、初始的 MT9M114 摄像头驱动、MDMA 卸载的摄像头捕获、image.draw_image() 中的 Bayer/JPEG 支持,以及升级到 MicroPython 1.15。旧版流式传输模式已被移除,sensor.set_windowing() 也已重新设计——请阅读下方的破坏性变更。

亮点

  • 多帧缓冲 —— sensor 新增双缓冲、三缓冲以及视频 FIFO 模式,可获得更高、更流畅的帧率。

  • 帧完成回调 —— 注册一个在新帧就绪时触发的回调,用于非阻塞的捕获流水线。

  • Bluetooth —— 基于 NimBLE 协议栈构建的 bluetooth 模块,在 Arduino Portenta H7 上启用(附带 BLE 示例)。

  • MT9M114 —— 初始摄像头传感器驱动。

  • 更快的捕获 —— 摄像头数据捕获通过 MDMA 卸载;draw_image() 现在接受 Bayer 和 JPEG 源/目标。

  • MicroPython 1.15 —— 内置的 MicroPython 已从 1.13 更新至 1.15。

  • 破坏性变更: 旧版流式传输模式已被移除,sensor.set_windowing() 也已重新设计——参见破坏性变更。

新功能

  • 传感器多缓冲 —— 新增 sensor.set_framebuffers() / sensor.get_framebuffers() 以及 SINGLE_BUFFER / DOUBLE_BUFFER / TRIPLE_BUFFER / VIDEO_FIFO 模式,并新增 sensor.get_frame_available() 用于双缓冲、三缓冲和视频 FIFO 捕获。

  • 帧完成回调 —— 新增 sensor.set_frame_callback(),可在每个新帧完成时运行 Python 回调。

  • Bluetooth —— 新增基于 NimBLE 协议栈(NimBLE 子模块、CYW-BT 驱动)的 bluetooth 模块,在 Arduino Portenta H7 上启用,并附带 BLE 示例。

  • MT9M114 —— 新增初始的 MT9M114 摄像头传感器驱动。

  • draw_image —— 新增去拜耳支持和 JPEG 拷贝支持,使 image.draw_image() 能接受 Bayer 和 JPEG 源/目标图像。

  • MDMA 捕获卸载 —— 摄像头数据捕获被卸载到 MDMA,以获得更高的吞吐量。

  • 现在可以通过传入 -1 来禁用调色板参数(因为 None 被保留为有效参数)。

其他变更与改进

  • 切换到新的软件 I2C 实现;与 MicroPython 上游对齐;按主板配置 ulab;为 OpenMV 2 启用基础内置模块;更公平的帧缓冲区读出锁定;将互斥锁支持扩展到 Cortex-M0/M0+ 并加入锁超时。

错误修复

摄像头与成像:

  • 修复了 Pure Thermal 主板上 FLIR Lepton 初始化的可靠性、ImageIO JPEG 缓冲区 / 暂停处理、HM01B0 的 vflip/hmirror 设置、图像失效时的 JPEG 缓冲区刷新,以及在 framesize 无效时被错误设置的 cropped 标志。

系统与连接:

  • 修复了 USB 命令排空和复位到引导加载程序命令、互斥锁初始化、UART 时钟源、FatFS 代码页定义、WINC1500 带外 ACK 处理、WiFi 调试以及 Nano33 USB PID;隔离了专用模拟焊盘。

硬件与主板支持

  • MT9M114 摄像头传感器(初始驱动)。

  • Arduino Portenta H7 —— 启用 Bluetooth(NimBLE)并附带 BLE 示例。

  • Arduino Nano RP2040 Connect / Nano 33 BLE Sense —— 在不支持的地方禁用了 WiFi 调试标志;新增闪烁示例;修复了 USB PID。

破坏性 API 变更

v3.9.4 与 v4.0.0 之间对用户可见的 API 破坏性变更。范围:modules/ 中的 Python C 模块和 scripts/libraries/ 中的 Python 库。

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

  • major —— 影响大多数脚本;你几乎肯定需要移植代码。

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

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

变更按影响程度依此顺序分组。如果你只想移植代码,可直接跳到末尾的 迁移清单。每个提交哈希都链接到 GitHub 上的对应 diff。

流式传输模式已移除 (major)

旧版传感器流式传输模式已被移除,转而采用新的多帧缓冲 API。启用了流式传输模式的代码必须切换到带有 DOUBLE_BUFFER / TRIPLE_BUFFER / VIDEO_FIFOsensor.set_framebuffers(),并改用 sensor.snapshot() / sensor.get_frame_available() 来驱动捕获。

提交: a42f3a647

sensor.set_windowing() 已重新设计 (behavior)

sensor.set_windowing() 变得灵活得多:它现在接受多种参数形式(区域元组,或居中的宽/高,或 x, y, w, h),并相对于当前分辨率解析窗口。以旧的固定形式传入开窗参数的脚本可能会选中不同的区域,应当重新检查。

提交: 3e9c43554

MicroPython 1.13 → 1.15 (behavior)

内置的 MicroPython 内核已从 1.13 更新至 1.15(经由 1.14)。标准库和语言行为遵循上游 MicroPython 1.15;请重新检查依赖于特定版本 micropython / 标准模块行为的脚本。

提交: 364eea6c726c5376b0

ImageIO 的 update_jpeg_buffer 参数已移除 (minor)

ImageIO 的 JPEG 缓冲区更新已重新设计为从图像源参数派生缓冲区,并移除了显式的 update_jpeg_buffer 参数。向 ImageIO 传入 update_jpeg_buffer 的脚本必须去掉该参数。

提交: 5c6937bd1

迁移清单

要顺利移植到 v4.0.0,通常需要做的工作是:

  1. 用新的 sensor.set_framebuffers() 多缓冲 API 替换对已移除的流式传输模式的任何使用(流式传输模式已移除)。

  2. 针对重新设计的、更灵活的参数处理,重新检查 sensor.set_windowing() 的调用(开窗变更)。

  3. 针对 MicroPython 1.15 重新验证依赖于特定版本 MicroPython 行为的脚本(MicroPython 升级)。

  4. 从 ImageIO 调用中去掉 update_jpeg_buffer 参数(ImageIO 变更)。

所有其他脚本无需改动即可运行。