v3.0.0¶
v3.0.0 是重大的 v2 → v3 版本。它引入了 OpenMV Cam M7(STM32F7)和全新的 nn CMSIS-NN 神经网络模块(取代旧的硬编码 find_number() / classify_object() 方法),新增 MT9V034 全局快门和 FLIR Lepton 传感器支持、sensor.WVGA 帧大小,并将核心更新至 MicroPython 1.9.4。多个 image / sensor / WiFi 行为发生了变化——请阅读下方的重大变更说明。
亮点¶
OpenMV Cam M7 —— 全新的 STM32F7 开发板。
nn模块 —— CMSIS-NN 推理:nn.load()、Net.forward()、Net.search(),附带模型转换器和示例。新增传感器 —— MT9V034 全局快门(FSIN 触发)和 FLIR Lepton。
MicroPython 1.9.4 核心更新。
重大变更: 移除了硬编码的
image.find_number()/image.classify_object(),sensor.sleep()现在会抛出异常,WINC 套接字返回真实的字节计数,image.binary()返回一张新图像,find_apriltags()被限制在 64K 像素以内——参见重大变更说明。
新增功能¶
nn—— 全新的 CMSIS-NN 神经网络模块:nn.load(path)、Net.forward(img, roi=, softmax=, dry_run=)(返回 0.0–1.0 的浮点数)、用于多尺度/多位置检测的Net.search()以及Net.test(),外加一个 CMSIS-NN 模型转换器(nn_convert.py/nn_quantizer.py)、内置的 CIFAR-10 / LeNet / smile 模型,以及 NN / NN-search 示例脚本。传感器 —— OpenMV 4 上的 MT9V034 全局快门支持(FSIN 触发快照)、带 Lepton 快照的更新版 FLIR Lepton 驱动,以及新的
sensor.WVGA(720x480)/sensor.WVGA2(752x480)帧大小。成像 ——
image.find_circles()新增了r_min/r_max/r_step关键字参数(更快的 Hough 变换),find_keypoints()和 Haarfind_features()现在接受 RGB 图像,image.compress()/ JPEG 编码现在支持二值(位图)图像。启动 ——
boot.py现在在 USB 初始化之前运行,因此它可以覆盖 USB 模式(例如 HID)。示例 —— 新增了小尺寸/高分辨率 AprilTag 示例、一个 I2C LIDAR-Lite V3 示例,以及数据集工具(
augment_images.py/make_patches.py)。
其他变更与改进¶
将内置的 MicroPython 更新至 1.9.4(包含一次 pyexec 解析/编译/执行的回退和 PendSV 修复);更清晰的
fb_alloc/xalloc内存不足错误信息;抑制了网络加载期间nn的 printf 噪声;重组了仓库结构(示例 →scripts/,工具 →tools/,Haar 级联 →ml/)。nn模块在 OpenMV 2 上不可用(闪存不足)。
错误修复¶
成像:
修复了 x≤0 时的
fast_atan2f(之前始终为 0——请重新检查色块/直线/关键点的角度)、find_apriltags()的内存处理(内存不足时丢弃内容和错误的 realloc)、二值/位图的逐 bpp 行指针(损坏的二值结果)、带 ROI 的find_edges(EDGE_CANNY)、TO_GS_PIXEL宏(积分图/形态学)、灰度(bpp==0)帧的位图/JPEG 流传输、关键点/色块列表的pop_front,以及match_descriptor的结果。
系统与摄像头:
修复了 USB HID 接口/端点编号、运行时动态更改 XCLK 频率、
Net.forward()返回正确数量的输出,以及中断脚本解析时的硬错误。
硬件与板级支持¶
OpenMV Cam M7 (STM32F7) —— 全新开发板。
MT9V034 全局快门传感器(OpenMV 4,FSIN 触发)。
FLIR Lepton —— 带快照支持的更新版驱动。
重大 API 变更¶
v2.9.0 与 v3.0.0 之间面向用户的 API 变更。范围:modules/ 中的 Python C 模块和 scripts/libraries/ 中的 Python 库。
每项变更都标注了其影响程度:
重大 —— 影响大多数使用该功能的脚本;你需要移植代码。
影响较小 —— 范围狭窄的 API;仅影响使用了它的脚本。
行为 —— API 相同但结果不同;请重新检查已调优的脚本。
变更按上述影响顺序分组。如果你只想移植代码,可直接跳到末尾的迁移清单。每个提交哈希都链接到其在 GitHub 上的 diff。
image.find_number() / image.classify_object() 被移除 (重大)¶
硬编码的 image.find_number()(LeNet)和 image.classify_object()(CMSIS CNN)方法已被移除,转而使用新的 nn 模块。请用 net = nn.load('/model.network'); out = net.forward(img) 替换它们。
提交: d151f7e38
sensor.sleep() / sensor.reset() 失败时抛出异常 (影响较小)¶
sensor.sleep() 和 sensor.reset() 现在在失败时抛出异常,而不是返回 True / False。检查 sensor.sleep() 布尔返回值的代码必须改为用 try / except 包裹该调用。
提交: 7d16d008f
WINC 套接字返回真实的字节计数 (行为)¶
WINC1500 套接字的 send / recv / sendto / recvfrom 方法之前始终返回 0;它们现在返回实际传输的字节数。假定返回 0 的代码(或对其循环/阻塞的代码)必须处理真实的计数。
提交: a07fb2f60
image.binary() 返回一张新图像 (行为)¶
image.binary() 新增了 to_bitmap / copy 关键字参数,现在返回一个新的图像对象,而不是就地返回/修改源图像。依赖 binary() 修改原始图像的代码应改用返回的对象(并传入 copy=True 以获得非就地行为)。
提交: 8a44f0cd9
迁移清单¶
要顺利移植到 v3.0.0,通常需要做的工作有:
用
nn模块替换image.find_number()/image.classify_object()(nn 迁移)。用
try/except包裹sensor.sleep()/sensor.reset(),而不是检查布尔返回值(sensor.sleep 变更)。处理 WINC 套接字
send/recv返回的真实字节计数(WINC 套接字变更)。使用
image.binary()返回的图像,而不是期望就地修改(binary 变更)。在
find_apriltags()之前缩小图像,使其保持在 64K 像素以内(find_apriltags 限制)。
所有其他脚本无需改动即可运行。