v1.1.0

v1.1.0 是奠定基础的架构性发布:它弃用了早期的自定义外设模块,转而使用标准的 MicroPython 内置模块,将成像 API 移入 image 模块、将帧率时钟移入 time,并新增了内置 Haar 级联、get_pixel() / set_pixel()、OpenMV 2 开发板支持以及 USB-CDC 调试。这是一个破坏性较大、定义了 API 的版本——请阅读下文的破坏性变更。

亮点

  • MicroPython 内置模块 ——自定义的 gpio / led / spi / socket / wlan / uart / file / select 模块被移除,转而使用 MicroPython 的 pyb / machine

  • image 模块—— Image() / HaarCascade() / 描述符现在位于 image 模块中。

  • time.clock ——帧率时钟移入了 time 模块。

  • 内置 Haar 级联 —— HaarCascade("frontalface") / HaarCascade("eye")(无需文件)。

  • OpenMV 2 开发板支持以及 USB-CDC 调试。

  • 破坏性变更: 模块结构被重新定义——请参阅破坏性变更。

新功能

  • 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 timeclock = time.clock() ——返回的对象仍提供 .tick() / .fps() / .avg() / .reset()

提交: a8928ca3b

/flash/sd 不再添加到 sys.path (behavior)

卷标 / 根目录已被固定,/flash/sd 不再自动追加到 sys.path。那些通过裸名称从这些位置导入辅助模块的脚本必须显式添加路径(或将模块放在能被找到的位置)。

提交: 09e77b5da

迁移清单

要干净地移植到 v1.1.0,通常需要做的工作是:

  1. 用 MicroPython 的 pyb / machine 替换自定义的 gpio / led / spi / uart / socket / wlan / file / select 模块(自定义模块的移除)。

  2. import image 并为 Image() / HaarCascade() 加上 image. 前缀(image 模块迁移)。

  3. 使用 import timeclock = time.clock()clock 迁移)。

  4. 如果你曾通过裸名称导入辅助模块,请将 /flash / /sd 显式添加到 sys.pathsys.path 变更)。

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