v3.7.0

v3.7.0 是一个重大版本。它新增了 audio 模块(Portenta H7 PDM 麦克风)并配备了全新的非阻塞回调 API、micro_speech TensorFlow 语音识别模块、全新的并行 RGB LCD 控制器(支持 HDMI 输出和 FT5X06 触摸)、带像素格式常量的 image.flush() 方法,以及重写的 image.draw_image() 缩放流水线。多个旧的辅助库和图像方法被移除,yuv_to_* 的运算也发生了变化 —— 请阅读下方的破坏性改动。

亮点

  • audio 模块 —— Portenta H7 板载 PDM 麦克风采集,配备非阻塞的 start_streaming(callback) API。

  • micro_speech —— 一个 TensorFlow micro-speech 语音识别模块。

  • 全新 LCD 控制器 —— 支持并行 RGB 显示、HDMI 输出(TFP410)以及 FT5X06 触摸。

  • image.draw_image() —— 重写,配备完整的缩放/alpha/调色板流水线(x_scale / y_scale / hint / color_palette ……)。

  • image.flush() 以及像素格式常量(image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG)。

  • 破坏性: 旧的数学辅助库和多个图像方法被移除,draw_image() / LCD API 被重做,且 yuv_to_* 不再减去 128 —— 请参阅破坏性改动。

新功能

  • audio —— 一个全新的 Portenta H7 audio 模块,用于 PDM 麦克风采集:audio.init()、非阻塞的 audio.start_streaming(callback) 以及 audio.stop_streaming()(频率以 Hz 为单位指定)。

  • micro_speech —— 一个全新模块,包含用于 TensorFlow 语音识别的 MicroSpeech 类、audio_callback()micro_speech()listen() 使用滑动窗口平均值,并接受一个 filter 关键字以将结果限制在某个标签列表内。

  • LCD —— 一个全新的 LCD 控制器,支持并行 RGB 显示,提供 LCD_NONE / LCD_SHIELD / LCD_DISPLAY 类型、众多帧尺寸常量、triple_buffer / framesize / refresh / bgr / deinit、一个扩展的 display、通过 TFP410 的 HDMI 输出以及 FT5X06 触摸屏支持。

  • image.flush() —— 新增了一个 image.flush() 方法以及像素格式常量(image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG)。

  • image.draw_image() —— 基于全新的缩放流水线重写:x_scale / y_scale / x_size / y_sizergb_channelalphacolor_palettealpha_palette 以及 hint,外加 image.AREA / BILINEAR / BICUBIC / CENTER / EXTRACT_RGB_CHANNEL_FIRST / APPLY_COLOR_PALETTE_FIRST 常量以及新的 alpha 混合 / 颜色表 / 缩放示例。

  • ImageReader.next_frame() 新增了一个 pause 关键字,用于禁用实时回放延迟。

  • 新增了 Portenta 音频示例(audio_fft.pymicro_speech.py)以及一个 ExtInt 从停止模式唤醒的示例。

其他改动与改进

  • 内置示例被重新整理到 scripts/examples/Arduino/ 下;在使用 copy_to_fb=True 加载/创建图像后,帧缓冲区现在会立即更新(无需手动刷新);Portenta 的堆被略微缩小,以容纳更多静态驱动状态。

错误修复

摄像头与成像:

  • 修复了采集图像中红/蓝交换(RGB565 字节序)的问题,使 DMA2D 绘制的舍入与其他绘制代码一致,修复了递归分配(find_blobs())中的 fb_alloc 损坏,并将 top_hat() / black_hat() 限制为仅在二值运算和数学运算均启用时才可用。

显示与音频:

  • 修复了 LCD 扩展板输出以及 Portenta 的单通道单声道音频模式。

Portenta:

  • 绕过了一个以太网/SDRAM 问题(将 rst_eth 拉高),并修复了 SDRAM 时序配置。

硬件与开发板支持

  • Arduino Portenta H7 —— 板载 PDM 麦克风(SAI / PDM2PCM)音频采集。

  • LCD —— 全新的并行 RGB 显示控制器(在 H7 构建中启用 LTDC)、通过 TFP410 的 HDMI 输出以及 FT5X06 触摸屏 LCD 支持。

破坏性 API 改动

v3.6.9 与 v3.7.0 之间面向用户的 API 破坏性改动。范围:modules/ 中的 Python C 模块以及 scripts/libraries/ 中的 Python 库。

每项改动都标注了其影响:

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

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

改动按上述顺序的影响进行分组。如果你只想移植代码,可直接跳到末尾的 迁移清单。每个提交哈希都链接到其在 GitHub 上的差异。

旧的数学辅助库被移除 (minor)

mtxrvulinalgumatrixvec 辅助库已从 scripts/libraries 中移除,改用 ulab。任何 import 这些库的脚本都会失败,必须移植到 ulab

提交: 1f7da9272

remove_shadows() / chrominvar() / illuminvar() 被移除 (minor)

image.remove_shadows()image.chrominvar()image.illuminvar() 已被删除且没有替代方案。调用这些方法的脚本必须移除相应的调用。

提交: 3173c2bb3

image.draw_image() 签名被重做 (minor)

image.draw_image() 已在全新的缩放流水线之上重写。旧的位置参数 alpha / 单个 scale 参数以及之前的位置顺序不再适用;请改用新的关键字形式(x_scale= / y_scale=x_size= / y_size=alpha=color_palette=hint= ……)。

提交: 3439f8824

LCD 模块重写 (minor)

lcd 模块针对新的显示控制器进行了重写。lcd.init() 现在接受一个显示 typeLCD_NONE / LCD_SHIELD / LCD_DISPLAY)以及新的关键字参数,且其常量 / API 接口被大幅重新整理。旧的仅扩展板脚本大多仍可工作,但默认值和行为已发生改变 —— 请对照新的 type / framesize API 检查 LCD 脚本。

提交: 185538207

yuv_to_* 不再减去 128 (behavior)

image.yuv_to_binary() / yuv_to_grayscale() / yuv_to_rgb() / yuv_to_lab() 现在将 Y 元组元素视为无符号的 0–255 值,而不再减去 128。调用方必须传入未带之前 −128 偏置的 Y,才能得到与以前相同的颜色。

提交: dcf141192

迁移清单

要干净地移植到 v3.7.0,通常需要做的工作是:

  1. mtx / rv / ulinalg / umatrix / vec 的用法移植到 ulab数学库移除)。

  2. 移除 image.remove_shadows() / chrominvar() / illuminvar() 调用(被移除的图像方法)。

  3. image.draw_image() 调用更新为新的关键字签名(draw_image 重做)。

  4. 对照新的 lcd type / framesize API 检查 LCD 脚本(LCD 重写)。

  5. 在向 yuv_to_* 传入 Y 时去掉 −128 偏置(yuv_to_* 改动)。

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