v2.6.0

v2.6.0 将核心更新至 MicroPython 1.9.2,将 find_line_segments() 切换为 LSD 算法,新增 MT9V034 全局快门 传感器支持、image.rotation_corr() 透视校正、sensor.sleep()、原始图像保存以及 OpenMV 4 主板的前期准备工作。find_line_segments()、若干 framesize 以及 MicroPython 的行为均有变化 —— 请阅读下方的破坏性变更。

亮点

  • MicroPython 1.9.2 核心更新。

  • LSD 线段 —— find_line_segments() 现在使用线段检测器(Line Segment Detector)算法。

  • MT9V034 全局快门传感器支持。

  • image.rotation_corr() —— X/Y/Z 透视旋转校正。

  • sensor.sleep() 软睡眠模式以及原始(未压缩)图像保存。

  • 破坏性变更: find_line_segments() 参数、若干 framesize 常量以及 MicroPython 的行为均有变化 —— 参见破坏性变更。

新功能

  • image.rotation_corr() —— 新增 X/Y/Z 透视旋转校正,并附带 rotation_correction.py 示例。

  • sensor.sleep(enable) —— 让摄像头进入软睡眠模式(附带睡眠模式示例)。

  • 原始图像 —— image.save() 现在可以写入原始(未压缩)图像。

  • MT9V034 —— 新增全局快门传感器支持,公开了 sensor.MT9V034 常量。

  • image.lens_corr() 新增了 lens_correction.py 示例,并新增了 OpenMV 4 主板支持文件(主板配置 / 引导加载程序 / 链接器的前期准备工作)。

其他变更与改进

  • 将捆绑的 MicroPython 更新至 1.9.2(1.9 移植底层、oofatfs);针对新的 LSD API 重写了 find_line_segments.py(镜头校正默认关闭);更新了主机端 openmv API(init(portname) / exec_script / stop_script);降低了 OpenMV Cam M4 的传感器时钟(M4 上最大 FPS 更低);IDE 的 Stop 按钮现在使用硬性强制异常以更可靠地中断脚本。

错误修复

  • 修复了 image.lens_corr() 残留陈旧像素的问题(现在在重映射前会清空目标缓冲区)、blob.density() 使用整数除法的问题(始终返回 0,#268)、OpenMV 2(M4)的 UART 引脚映射,并更新了 qrcodes_with_lens_corr.py 以使用 QVGA。

硬件与主板支持

  • MT9V034 全局快门传感器。

  • OpenMV 4 —— 主板支持文件(前期准备工作)。

  • OpenMV 2(M4) —— UART 引脚映射修复。

破坏性 API 变更

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

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

  • major —— 影响大多数使用该功能的脚本;你需要移植代码。

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

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

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

find_line_segments() 切换为 LSD (major)

image.find_line_segments() 已重写为使用线段检测器(LSD)算法。旧的 threshold / theta_margin / rho_margin / segment_threshold / x_stride / y_stride 参数被替换为 merge_distancemax_theta_diff(例如 find_line_segments(merge_distance=0, max_theta_diff=15))。该功能在 M4 级(OpenMV 2)主板上也不再可用。

提交: 5a3153c8bcbe2a4aeb

移除无效的 framesize 常量 (minor)

移除了无效的 sensor.QQQQCIF / QQQCIF / QQQQSIF / QQQSIF / HQQQQVGA / HVGA framesize 常量(#261)。使用这些常量的脚本必须切换到受支持的分辨率。

提交: 35ab0a26f

OpenMV Cam M4 上移除 find_qrcodes() (minor)

image.find_qrcodes() 不再编译进 M4 级(OpenMV 2)主板。在 M4 硬件上请使用 OpenMV 3(M7)主板或其他代码功能来进行二维码检测。其他主板不受影响。

提交: 7dff089e6

MicroPython 更新至 1.9.2 (behavior)

捆绑的 MicroPython 核心已更新至 1.9.2。标准库与语言行为遵循上游 MicroPython 1.9.2 —— 请重新检查依赖特定版本行为的脚本。特别地,使用步长不为 1 的图像切片现在会抛出 OSError 而非 NotImplementedError

提交: 11bed4b99

迁移清单

若要干净地移植到 v2.6.0,通常需要完成的工作是:

  1. 针对 LSD 参数(merge_distance / max_theta_diff)重写 find_line_segments() 调用,并将该处理移出 M4(LSD 重构)。

  2. 将已移除的 framesize 常量替换为受支持的分辨率(framesize 移除)。

  3. 将 M4 上的二维码检测迁移到 M7 主板(find_qrcodes 变更)。

  4. 针对 MicroPython 1.9.2 重新验证特定版本相关的行为(MicroPython 升级)。

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