v2.8.0

v2.8.0 是一个庞大的版本。它带来了 OpenMV Cam H7(STM32H7),配备 硬件 JPEG 编码器 以及 H7 ADC/DAC,对 image API 进行了大规模改造(绘制线宽 / 填充、数学 / 二值运算、众多新滤波器、Otsu 阈值化),新增了 MicroPython 线程 以及 omv 版本模块。Python 的参数解析顺序被锁定,并移除了 image.mask_ellipse() —— 请阅读下方的破坏性变更。

亮点

  • OpenMV Cam H7 —— 全新的 STM32H7 主板,配备硬件 JPEG 编码器以及 H7 ADC / DAC。

  • image 改造 —— 线宽、形状填充、draw_arrow() / draw_image()、完整的数学 / 二值运算以及众多新滤波器。

  • Otsu 阈值化 —— histogram.get_threshold() 以及 Threshold 对象。

  • 线程 —— MicroPython _thread 支持。

  • omv 模块 —— 版本 / 主板信息。

  • 破坏性变更: Python 位置参数顺序现在是严格的,并且移除了 image.mask_ellipse() —— 参见破坏性变更。

新功能

  • OpenMV Cam H7 —— STM32H7 主板支持,配备硬件 JPEG 编码器、H7 ADC 以及 H7 DAC。

  • 绘制 —— 新增线条 thickness、形状 fill(矩形 / 圆形)、文本 scale / 字距调整、draw_string() 上的 mono_space 关键字、image.draw_arrow() 以及 image.draw_image()(精灵图 / 掩码绘制)。

  • 数学运算 —— 新增 add()sub()mul()div()min()max()difference()blend()replace()(带有 hmirror / vflip / mask)以及 remove_shadows();基本运算现在接受一个应用于所有像素的标量 / 颜色值。

  • 二值 / 形态学 —— 新增二值图像类型以及 binary();线条操作以及 erode() / dilate() 接受掩码;新增 open() / close() / top_hat() / black_hat()

  • 滤波器 —— 新增 cartoonflood_fillbilaterallaplacianblur / gaussian_blur 别名以及自适应直方图均衡化(histeq(adaptive=, clip_limit=, mask=))。

  • 统计 —— get_statistics() / get_histogram() 接受颜色阈值列表以及 invert;新增 Otsu 的 histogram.get_threshold() 以及 Threshold 对象。

  • CMSIS CNN —— 新增 image.classify_object() 以及 cnn.py 示例(已在 v3.0.0 中被 nn 模块取代)。

  • 线程 —— 启用了 MicroPython _thread 模块。

  • omv 模块 —— 新增版本信息(version_stringarchboard_typeboard_id);启用了 machine 的 I2C4 总线以及数学特殊函数(erfgamma、……);新增了电机扩展板示例以及许多新的示例脚本。

其他变更与改进

  • H7 传感器外部时钟被降至 48 MHz(图像质量更好,FPS 更低);低 / 高 JPEG 质量现在可按主板配置(并针对 H7 进行了调优);新增了按主板的 imlib_config.h 功能门控(出厂固件上所有图像功能仍保持启用);更新了捆绑的 MicroPython。

错误修复

成像:

  • 修复了 image.save() 在无文件扩展名时的问题、OV2640 / OV7725 / OV9650 / MT9V034 的 gain_db / gain_db_ceiling 映射、sharpen() 中增益过大的问题、形态学边缘噪声、图像运算中的除零问题,以及滤波器核尺寸过大导致的栈溢出崩溃(现在变为明确的错误)。

系统:

  • 用原子区段保护了 USB VCP 缓冲区(串行损坏,#313),修复了 Windows 上的 USB 连接问题、SD 卡失败时挂载内部闪存文件系统的问题、cpufreqset_frequency() PLLP 值,以及引导加载程序固件烧录的错误。

硬件与主板支持

  • OpenMV Cam H7(STM32H7) —— 全新主板,配备硬件 JPEG 编码器以及 H7 ADC / DAC。

  • machine —— 启用了 I2C4 总线。

破坏性 API 变更

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

两项破坏性变更都是 minor,仅影响使用了相关功能的脚本。每个提交哈希都链接到它在 GitHub 上的 diff。

Python 位置参数顺序现在是严格的 (minor)

各 Python C 模块(image / sensor / fir / gif / lcd / mjpeg)中的参数解析现在会在关键字之前读取位置参数,并锁定了位置顺序。结合绘制方法上新增的关键字参数(draw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints() 新增了 thickness / fill / scale / size),那些以位置方式乱序传参的代码 —— 或在某个新参数之后以位置方式传入 color 的代码 —— 必须使用关键字参数或遵循文档中记录的位置顺序。

提交: e0e112468fc74e70c3

移除 image.mask_ellipse() (minor)

image.mask_ellipse() 已被移除。调用它的脚本必须删除该调用,或改用显式的 ROI / 掩码图像。

提交: d7159fba3

迁移清单

请以关键字方式传参(或遵循文档中记录的位置顺序),尤其是绘制方法上的 color参数顺序变更),并移除 image.mask_ellipse() 调用(mask_ellipse 移除)。所有其他脚本无需修改即可运行。