v1.4.0¶
v1.4.0 是一次奠基性的 imlib 重组。find_blobs() / find_markers() 被重写为直接进行颜色阈值跟踪,许多独立的图像方法被折叠进色块元组中,还有若干图像方法被重命名(subimg → copy、blit → replace、find_eyes → find_eye、compress → compressed)。它还新增了 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()、WINCclient.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 元素色块元组列表(带一个颜色代码字段),而不是按颜色嵌套的树。请重新编写颜色跟踪脚本,使其传入颜色阈值并遍历扁平列表。
独立的图像方法被移除 (major)¶
image.threshold、image.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() 改为原地压缩图像并返回 None。image.save() 也新增了 quality= 关键字,现在返回 None 而非 True。请将 img.compress(q)(期望返回图像)迁移为 img.compressed(quality=q)。
提交: 367e5fdd3
迁移清单¶
干净移植到 v1.4.0 的典型工作如下:
重新编写颜色跟踪代码,使其向
find_blobs()/find_markers()传入颜色阈值并遍历扁平的色块元组列表(find_blobs 重写)。从色块元组中读取质心 / 朝向 / 像素数据,而不是使用已被移除的独立方法(被移除的图像方法)。
将
subimg→copy、blit→replace重命名,修正blend()调用,并替换scale/scaled/rainbow(imlib 重命名)。将
find_eyes()→find_eye()(find_eye 重命名)和compress()→compressed()(compress 重命名)重命名。
所有其他脚本无需改动即可运行。