v1.1.0¶
v1.1.0 是奠定基础的架构性发布:它弃用了早期的自定义外设模块,转而使用标准的 MicroPython 内置模块,将成像 API 移入 image 模块、将帧率时钟移入 time,并新增了内置 Haar 级联、get_pixel() / set_pixel()、OpenMV 2 开发板支持以及 USB-CDC 调试。这是一个破坏性较大、定义了 API 的版本——请阅读下文的破坏性变更。
亮点¶
新功能¶
Image ——新增了
Image.get_pixel(x, y)/set_pixel()以及img[i]下标式像素访问;内置闪存 Haar 级联(HaarCascade("frontalface")/HaarCascade("eye"))以及一个用于限制级联阶段数的stages=关键字;draw_string()现可用于灰度图像。Sensor ——新增了
sensor.set_colorbar()、sensor.set_saturation()以及QQVGA2帧大小。mlx——mlx.read(type),支持mlx.RAINBOW/mlx.GRAYSCALE输出。调试 ——实现了通过 USB CDC 进行调试、一个固件
fw_version()查询、按板区分的固件(OpenMV 1 / OpenMV 2),以及自检 / 彩条脚本;致命/解析错误会记录到闪存。
其他变更与改进¶
内存不足时现在会引发
MemoryError而非OSError;脚本运行时会重新引发异常,使错误得以打印而非崩溃;串口波特率可配置(默认 921600);更大的闪存文件系统;为提升采集稳定性,传感器像素时钟被降至 54 MHz;sensor.reset()现在仅依赖传感器软复位。
错误修复¶
修复了模板匹配、
find_features()重复返回第一个物体、SCCB/I2C 原子寄存器访问、SD 卡芯片检测、软件 I2C 引脚映射、fast_cbrtf/ LAB 颜色精度,以及 OpenMV 1 / 2 上的积分图 / 中值滤波内存占用问题。
硬件与开发板支持¶
OpenMV 2(STM32F427)开发板支持(以及 OpenMV 3 硬件设计);OpenMV 2 上使用 MCO 作为传感器时钟。
破坏性 API 变更¶
v1.0.3-beta 与 v1.1.0 之间面向用户的 API 破坏性变更。范围:modules/ 中的 Python C 模块以及 scripts/libraries/ 中的 Python 库。
每项变更都标注了其影响:
major ——影响大多数使用该功能的脚本;你需要移植代码。
behavior ——API 相同但结果不同;请重新检查经过调优的脚本。
变更按上述顺序依影响分组。如果你只想移植代码,请直接跳到末尾的 迁移清单。每个提交哈希都链接到其在 GitHub 上的差异。
自定义外设模块被移除 (major)¶
早期的自定义 clock / file / gpio / led / select / socket / spi / wlan / uart 模块被移除,转而使用 MicroPython 内置的 pyb / machine 外设。请将脚本移植到标准的 MicroPython 等价物(例如 pyb.Pin / pyb.LED / pyb.SPI / pyb.UART)。
提交: 6d2fafa94
成像 API 移入 image 模块 (major)¶
Image()、HaarCascade() 以及描述符保存/加载函数不再是裸内置函数——它们位于新的 image 模块中。脚本必须 import image 并使用 image.Image / image.HaarCascade()。
提交: 54288c535
帧率时钟移入 time (major)¶
独立的 clock 模块被移除;帧率时钟现在位于 time 中。请使用 import time 和 clock = time.clock() ——返回的对象仍提供 .tick() / .fps() / .avg() / .reset()。
提交: a8928ca3b
/flash 和 /sd 不再添加到 sys.path (behavior)¶
卷标 / 根目录已被固定,/flash 和 /sd 不再自动追加到 sys.path。那些通过裸名称从这些位置导入辅助模块的脚本必须显式添加路径(或将模块放在能被找到的位置)。
提交: 09e77b5da
迁移清单¶
要干净地移植到 v1.1.0,通常需要做的工作是:
用 MicroPython 的
pyb/machine替换自定义的gpio/led/spi/uart/socket/wlan/file/select模块(自定义模块的移除)。import image并为Image()/HaarCascade()加上image.前缀(image 模块迁移)。使用
import time和clock = time.clock()(clock 迁移)。如果你曾通过裸名称导入辅助模块,请将
/flash//sd显式添加到sys.path(sys.path 变更)。
所有其他脚本无需改动即可运行。