v4.5.3¶
v4.5.3 是一个大型版本:新增 OV5640 自动对焦、抗锯齿线条绘制、合入主线的硬件 JPEG 解码器、i.MX RT(RT1060)能力的大幅提升,以及一系列广泛的摄像头/ISP 修复。少数很少使用的图像方法被移除,部分 ISP/显示 API 发生了变化——请阅读下方的破坏性变更。
亮点¶
OV5640 自动对焦——在 OpenMV 4 / 4 Plus / RT1060 上启用(
sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS)),并附带示例。抗锯齿的
draw_line()以及合入主线的 STM32 硬件 JPEG 解码器(JPEG 解压更快)。OpenMV RT1060 新增了 ulab、ISP 操作、
set_framerate()/set_frame_callback()、大得多的帧缓冲区以及 CAN 驱动。破坏性变更:
Image.div()/cartoon()/mul()被移除,部分 ISP/显示 API 发生了变化——请参阅破坏性变更。
新功能¶
OV5640 自动对焦——自动对焦固件已在 OPENMV4、OPENMV4P 和 OPENMV RT1060 上启用;通过
sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS)触发。新增了07-Sensor-Control/autofocus.py示例。抗锯齿线条绘制——
draw_line()新增了抗锯齿功能。自定义 SPI 显示控制器——
SPIDisplay现在接受controller=关键字参数,并暴露了一个bus_write钩子,用于自定义初始化/命令序列。Image.ccm()升级——现在接受嵌套的 3x3 / 4x3 / 3x4 / 4x4 矩阵和 ulab 数组(可选带逐通道偏移行);新增了一个颜色校正示例。i.MX RT JPEG 捕获——在 Arduino Portenta/Nicla Vision/Giga 上支持
sensor.JPEG捕获,并在 mimxrt 移植上支持set_framerate()和set_frame_callback()。TFLite 模型校验——模型现在携带算子顺序哈希值和算子集大小。
WiFi——新增了 CYW43 安全模式常量;新增了 i.MX RT 板级控制示例脚本(Pin/ADC/CAN/I2C/PWM/SPI/UART/...)。
其他变更与改进¶
MicroPython 升级到 1.22;CMSIS 升级到 5.9.0。
合入主线的 STM32 硬件 JPEG 解码器——使用片上编解码器实现更快的 JPEG 解压。
优化了
Image.invert()/negate()以及二值/数学图像运算(使用 CMSIS 内建函数)。rpc和vl53l1x库被改造为可移植的(使用machine/time而非pyb),因此它们可以在非 STM32 移植上运行。在 OpenMV H7 / H7 Plus / Pro / Pure Thermal 和 Arduino Giga / Nicla Vision / Portenta H7 上实现了 DMA 加速的帧缓冲区 memcpy;STM32 现在每次扫描只扫描一次 I2C 设备,以加快启动速度。
错误修复¶
摄像头与传感器:
修正了 STM32 摄像头 XCLK,使其达到真正的 50% 占空比,并修复了摄像头时钟频率设为零时的一个错误;修复了 Bayer 裁剪+转置、YUV422 颜色偏移,以及 mimxrt 移植上的
set_windowing()。修复了 GC2145 芯片 ID 探测以及旋转安装时的 hmirror/vflip;修复了 RT1062 上的 PAJ6100 以及 PixArt PAJ7620/PAW3902 的 SPI 缓冲区溢出。
图像处理:
修复了
find_rects()的 roi 裁剪、morph()的小数偏移截断、image.gamma()的对比度/亮度默认值、RGB565 上get_threshold()的 A/B 偏移,以及尺寸非 8 的倍数时的 JPEG 解码。
系统与库:
不带参数调用
machine.LED.value()现在返回 LED 状态而不再清除它;修复了共享总线上 SPI SSEL 的反初始化、RT1062 上的machine.deepsleep()、缺失算子导致的 TF 崩溃,以及connect()时 WINC1500/ninaw10 网卡的自动激活。
硬件与板级支持¶
OpenMV RT1060——启用了 ulab 和 ISP 操作,更大的帧缓冲区(10M→20M)/ fb_alloc(2M→11M),恢复了 CAN 驱动,更多的堆内存。
Arduino GIGA——支持 GC2145 摄像头,并具备 GC2145/OV5640 自动检测(它们共用一个 I2C 地址)。
i.MX RT——支持
sensor.JPEG捕获。
破坏性 API 变更¶
v4.5.2 与 v4.5.3 之间面向用户的 API 破坏性变更。范围:modules/ 中的 Python C 模块和 scripts/libraries/ 中的 Python 库。
每项变更都标注了其影响程度:
minor——窄范围 API;仅影响使用过它的脚本。
behavior——相同的 API,不同的结果;请重新检查已调优的脚本。
变更按上述顺序的影响程度分组。如果你只想移植代码,可直接跳到末尾的 迁移检查清单。每个提交哈希都链接到 GitHub 上对应的 diff。
移除的图像方法 (minor)¶
Image.div()、Image.cartoon()(及其示例)和 Image.mul() 已被移除。
显示模块 API (minor)¶
旧的 udisplay 模块名回退已被移除——该模块现在仅注册为 display。仅用于 DSI 的 dsi_write() / dsi_read() 方法被 bus_write() / bus_read() 取代,后者现在在所有显示控制器上都可用。
MQTT 和 tf.regression API 变更 (minor)¶
mqtt 库的 MQTTClient 经过了重构:port 现在为必需参数,新增了 ssl_params / callback 构造函数关键字参数以及 connect() 上的 timeout 参数,移除了旧的 ssl= / port=0 默认值,并且 check_msg() 现在是非阻塞的。tf.regression() 被重写——其签名现在为 regression(model, array),并能处理 1D/2D/3D 以及量化(int8)模型。
ISP / 传感器行为变更 (behavior)¶
Image.awb() 经过了重构——灰度世界(默认)与白块(max=True)现在是显式区分的,max 参数以及 Image.gamma() 的 gamma / contrast / brightness 参数现在仅限关键字(位置调用必须更新)。图像转置现在对 YUV422 被禁用(此前会产生不正确的输出),并且 YUV422 颜色偏移已被校正以与 Bayer 匹配。STM32 JPEG 路径现在在 JPEG 几何不匹配时抛出错误,而不再生成损坏的图像,并且 WiFi AP 模式现在在 STM32 和 i.MX RT 移植上应用默认的安全模式。
Commits: 36d5cecbd、00500ccde、c1eeaefd6、333fb2b5f、55cab8733、c7d40f6af
迁移检查清单¶
要干净地移植到 v4.5.3,通常需要做的工作是:
停止使用
Image.div()/cartoon()/mul()(已移除的方法)。以
display导入显示模块,并将dsi_write/dsi_read切换为bus_write/bus_read(显示 API 变更)。更新
MQTTClient的构造方式(port为必需;ssl_params/callback)以及任何tf.regression()调用(库 API 变更)。将
awb()的max以及gamma()的gamma/contrast/brightness作为关键字参数传递,并重新检查 YUV422/转置和 AP 模式安全假设(ISP/传感器变更)。