v1.4.0

v1.4.0 是一次奠基性的 imlib 重组。find_blobs() / find_markers() 被重写为直接进行颜色阈值跟踪,许多独立的图像方法被折叠进色块元组中,还有若干图像方法被重命名(subimgcopyblitreplacefind_eyesfind_eyecompresscompressed)。它还新增了 sensor.get_fb() / AGC / AEC 开关以及约 60 个示例脚本。这是一个有大量破坏性变更的版本——请阅读下方的重大变更。

亮点

  • 基于颜色的色块跟踪 —— find_blobs() 直接接收颜色阈值,并返回一个扁平的色块元组列表。

  • Imlib 清理 —— subimg()copy()blit()replace()find_eyes()find_eye()compress()compressed()

  • 传感器 —— 新增 sensor.get_fb() 以及 AGC/AEC 启用开关。

  • 新增/扩展了约 60 个示例脚本

  • 重大变更: 色块 API、被移除的图像方法以及若干重命名——参见重大变更。

新功能

  • 传感器 —— 新增 sensor.get_fb()(获取最近一次快照的帧缓冲区)、sensor.set_gain_ctrl(enable)(切换 AGC)和 sensor.set_exposure_ctrl(enable)(切换 AEC)。

  • 图像 —— 图像下标(img[i])现在同时支持读取和写入像素(灰度 / RGB565 / JPEG);新增了原地的 image.compress() 和 JPEG 函数上的 quality= 关键字;find_blobs() / find_markers() / find_features() 现在在无结果时返回空的(可迭代)列表,而不是非列表对象。

  • 新增了约 60 个示例脚本(板卡控制、图像滤波器、颜色跟踪、人脸 / 眼睛 / 特征检测、WiFi 扩展板)以及第二个虹膜检测示例。

其他变更与改进

  • image.histeq() 现在可作用于 RGB565 图像,而不仅是灰度图像。

Bug 修复

  • 在启动时初始化 pyb.DAC 以使 DAC 可用(#121),修复了一个损坏的 image.dilate()、WINC client.send() 的零字节损坏、色块合并重新迭代、一个会在首次使用后破坏文件系统的文件缓冲区重新初始化 bug、热电堆 To_min / To_max 的计算(#113),并应用了一个上游 MicroPython HAL I2C/DMA 补丁。

硬件与板卡支持

  • WiFi 扩展板 —— WINC1500 更新到 Rev-B 板卡文件。

  • pyb.DAC —— 启用了 DAC 外设。

重大 API 变更

v1.3.0 与 v1.4.0 之间面向用户的 API 变更。范围:modules/ 中的 Python C 模块和 scripts/libraries/ 中的 Python 库。

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

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

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

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

find_blobs() / find_markers() 被重写 (major)

image.find_blobs() / find_markers() 被重写为基于颜色的跟踪:你现在直接传入颜色阈值(和一个可选的过滤函数),而不是在预先分割的图像上操作,结果是单个扁平的 10 元素色块元组列表(带一个颜色代码字段),而不是按颜色嵌套的树。请重新编写颜色跟踪脚本,使其传入颜色阈值并遍历扁平列表。

提交: d1ff3660216daeb83a

独立的图像方法被移除 (major)

image.thresholdimage.centroid()image.orientation_radians()image.orientation_degrees()image.pixels() 已被移除。质心 / 朝向 / 像素计数数据现在可作为 find_blobs() 返回的色块元组的字段获取。

提交: 9e5d379c1

Imlib 方法重命名 (major)

若干图像方法被重命名/重做:image.subimg()image.copy()image.blit()image.replace(),并且 image.blend() 被改为与另外两个双图像操作相匹配。image.scale() / scaled() / rainbow() 方法被移除(rainbow 移至 FIR 模块)。请将调用更新为新名称。

提交: b534dc6ff

find_eyes() 重命名为 find_eye() (minor)

image.find_eyes() 被重命名为 image.find_eye(),现在返回一个 2 元组虹膜坐标 (x, y),而不是之前的眼睛元组。请重命名调用并更新返回值的处理。

提交: 7a01a9bed

image.compress() 重命名为 compressed() (minor)

image.compress()(原本返回一个新的 JPEG 图像)被重命名为 image.compressed();新的 image.compress() 改为原地压缩图像并返回 Noneimage.save() 也新增了 quality= 关键字,现在返回 None 而非 True。请将 img.compress(q)(期望返回图像)迁移为 img.compressed(quality=q)

提交: 367e5fdd3

迁移清单

干净移植到 v1.4.0 的典型工作如下:

  1. 重新编写颜色跟踪代码,使其向 find_blobs() / find_markers() 传入颜色阈值并遍历扁平的色块元组列表(find_blobs 重写)。

  2. 从色块元组中读取质心 / 朝向 / 像素数据,而不是使用已被移除的独立方法(被移除的图像方法)。

  3. subimgcopyblitreplace 重命名,修正 blend() 调用,并替换 scale / scaled / rainbowimlib 重命名)。

  4. find_eyes()find_eye()find_eye 重命名)和 compress()compressed()compress 重命名)重命名。

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