v2.5.0

v2.5.0 是一个功能丰富的成像版本:它新增了 find_rects()find_circles()get_regression()(直线/回归拟合)、find_number()(LeNet 数字识别)、ImageWriter / ImageReader 流类、sensor.flush() / width() / height(),以及 pyb.RTC 支持。图像加载现在基于帧缓冲区 —— 请阅读下方的破坏性变更。

亮点

  • image.find_rects() —— 矩形 / 四边形检测器,带角点输出。

  • image.find_circles() —— 霍夫圆检测。

  • image.get_regression() —— 最小二乘和稳健(Theil-Sen)直线拟合。

  • image.find_number() —— LeNet 数字识别。

  • ImageWriter / ImageReader —— 记录并回放图像流。

  • pyb.RTC 支持,以及 sensor.flush() / sensor.width() / sensor.height()

  • 破坏性变更: 图像加载现在基于帧缓冲区,如果图像过大则会抛出异常 —— 请参阅破坏性变更。

新功能

  • 特征检测 —— 新增了 image.find_rects()(AprilTag 四边形检测器;矩形对象带有 x / y / w / h / corners / magnitude)、image.find_circles()(霍夫)、image.get_regression()(最小二乘 + Theil-Sen 稳健直线拟合),以及 image.find_number()(LeNet 数字识别),每项都附带示例脚本。

  • 结果角点 —— 为 QR 码 / AprilTag / 数据矩阵 / 条形码结果对象新增了 corners 属性。

  • 图像流 —— 新增了 image.ImageWriter / image.ImageReader 类(16 字节对齐的分块格式),并附带 image_writer.py / image_reader.py 示例。

  • 传感器 —— 新增了 sensor.flush()(将帧缓冲区推送到 IDE 而无需快照)以及 sensor.width() / sensor.height()

  • pyb.RTC —— 启用了 RTC 支持,并附带一个 rtc.py 示例。

  • 新增了一个猫脸 Haar 级联和一个 Servo-Shield(PCA9685)示例;openmv-cascade.py 主机工具新增了对新 OpenCV XML 级联格式的支持。

其他变更与改进

  • 对帧缓冲区进行了重构,使 copy_to_fb 图像方法能更新 IDE 预览;HaarCascade() 路径不再需要前导的 /(自动检测是内置级联还是文件);GIF/MJPEG 录制现在支持 VGA(以及 BAYER GIF);更新了内置的 README.txt,且在全新文件系统上不再创建 openmv.inf 驱动文件。

缺陷修复

成像:

  • 修复了 find_circles() 的投票累加、带 ROI 时 get_regression() 的 rho 偏移和内存泄漏、find_lines() 的线段合并、find_blobs() 的角度平均和默认(最不严格)颜色边界、ORB 关键点排序稳定性 / 描述符顺序和匹配标志,以及 Haar 级联缓冲加载(非对齐读取)。

系统:

  • 启用了 pyb Servo 3(P9)(#256),修复了 RTC 初始化,增加了 UART 字符超时(#240),并修复了未初始化的传感器帧缓冲区 “enabled” 标志。

硬件与开发板支持

  • pyb.RTC 支持和 pyb Servo 3(P9);Servo-Shield(PCA9685)示例。

破坏性 API 变更

v2.4.1 与 v2.5.0 之间面向用户的 API 破坏性变更。范围:modules/ 中的 Python C 模块和 scripts/libraries/ 中的 Python 库。

该破坏性变更是一项 behavior 变更(API 相同,但结果不同)—— 请重新检查受影响的脚本。每个提交哈希都链接到其在 GitHub 上的差异。

图像加载基于帧缓冲区 (behavior)

image.Image / 图像加载现在会将加载的图像复制到主帧缓冲区中,如果图像过大无法容纳则抛出异常。以前能成功加载到堆缓冲区的加载操作现在可能失败 —— 请确保加载的图像能容纳进帧缓冲区(或处理这个新错误)。

提交: 87d53385a

迁移清单

在以前依赖堆缓冲区图像加载的地方,请确保加载的图像能容纳进帧缓冲区(或捕获新的 “image too large” 错误)(图像加载变更)。所有其他脚本无需修改即可运行。