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 H7audio模块,用于 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_size、rgb_channel、alpha、color_palette、alpha_palette以及hint,外加image.AREA/BILINEAR/BICUBIC/CENTER/EXTRACT_RGB_CHANNEL_FIRST/APPLY_COLOR_PALETTE_FIRST常量以及新的 alpha 混合 / 颜色表 / 缩放示例。ImageReader.next_frame()新增了一个pause关键字,用于禁用实时回放延迟。新增了 Portenta 音频示例(
audio_fft.py、micro_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)¶
mtx、rv、ulinalg、umatrix 和 vec 辅助库已从 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() 现在接受一个显示 type(LCD_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,通常需要做的工作是:
移除
image.remove_shadows()/chrominvar()/illuminvar()调用(被移除的图像方法)。将
image.draw_image()调用更新为新的关键字签名(draw_image 重做)。对照新的
lcdtype/framesizeAPI 检查 LCD 脚本(LCD 重写)。在向
yuv_to_*传入 Y 时去掉 −128 偏置(yuv_to_* 改动)。
所有其他脚本均无需修改即可运行。