v3.6.1¶
v3.6.1 是一次重大发布。它引入了 imu 模块(LSM6DS3)、一套全新的 sensor getter API(带有 IMU 驱动的自动旋转)、4 点透视 rotation_corr(),并使 Arduino Portenta H7 配合 HIMAX HM01B0 和 OV7690 摄像头投入运行。多个 sensor / image API 发生了变化,且 M7 上移除了 TensorFlow——请阅读下方的破坏性变更。
重点内容¶
imu模块——LSM6DS3(OpenMV 4 / Portenta)上的加速度计 / 陀螺仪 / 温度 / 横滚 / 俯仰。传感器 getter + 自动旋转——
get_pixformat()/get_framesize()/get_hmirror()/get_vflip()/get_windowing()、set_transpose()/set_auto_rotation(),以及 IMU 驱动的快照旋转。透视校正——
rotation_corr()新增fov和corners(4 点)关键字参数。新硬件——Arduino Portenta H7、HIMAX HM01B0 和 OV7690 摄像头。
破坏性变更:
set_pixformat()/set_framesize()现在返回None,sensor.set_framerate()被移除,M7 上移除了 TensorFlow,且lens_corr()/linpolar()现在要求偶数尺寸——参见破坏性变更。
新功能¶
imu——全新的 IMU 模块:imu.acceleration_mg()、imu.angular_rate_mdps()、imu.temperature_c()、imu.roll()、imu.pitch()和imu.sleep()(OpenMV 4 / Portenta 上的 LSM6DS3)。传感器 getter——新增
sensor.get_pixformat()、get_framesize()、get_hmirror()、get_vflip()、get_windowing()、set_transpose()/get_transpose(),以及set_auto_rotation()/get_auto_rotation()。自动旋转——启用自动旋转后,
sensor.snapshot()会利用 IMU 对帧进行翻转 / 镜像 / 转置。rotation_corr()——新增fov和corners(4 点透视)关键字参数,并附有透视校正示例。lcd.init()——新增bgr关键字参数。collections.deque——在 MicroPython 构建中启用。新增
sensor.OV7690和sensor.HM01B0id 常量,以及一个类似 numpy 的ulab图像滤波示例。
其他变更与改进¶
大幅优化了图像滤波器(median / mode / mean / …)以及
find_circles()和镜头校正;alloc_extra_fb现在可以分配任意字节数;人体检测模型采用新的 average-pool 算子重新构建。
Bug 修复¶
摄像头与传感器:
修复了 OV2640
sleep()(现在使用 COM2 待机寄存器而非掉电引脚)、FSYNC 引脚配置、HM01B0 的 HSYNC/VSYNC 极性和 I2C 地址/扫描、Portenta 传感器掉电 GPIO 和摄像头复位引脚,并在 IMU 俯仰角接近 90°/270° 时禁用自动旋转。
成像与系统:
修复了一个图像滤波边界检查 bug、禁用 D-cache 时的硬故障、无 SD 卡的板卡上的启动问题、一个
tf.load()的load_to_fbbug、人体检测栈溢出(H7 栈提升至 ≥12 KB),以及 OpenMV 4 Plus 上高速模式的 USB 描述符偏移问题。
硬件与板卡支持¶
Arduino Portenta H7——初始板卡启用(STM32H747 时钟/OSC/HSE 配置、CMSIS 头文件、ADC、SDRAM、Arduino USB PID)。
HIMAX HM01B0——全新的单色摄像头驱动(Bayer、外部振荡器时钟)。
OV7690——全新的摄像头驱动。
LSM6DS3 IMU——OpenMV 4 / Portenta。
破坏性 API 变更¶
v3.6.0 与 v3.6.1 之间面向用户的 API 破坏性变更。范围:modules/ 中的 Python C 模块和 scripts/libraries/ 中的 Python 库。
每项变更都标注了其影响:
minor——窄范围 API;只影响使用过它的脚本。
behavior——相同 API,不同结果;请重新检查经过调优的脚本。
各项变更按上述顺序依影响分组。如果你只想移植代码,请直接跳到末尾的 迁移检查清单。每个提交哈希都链接到其在 GitHub 上的 diff。
sensor.set_framerate() 被移除 (minor)¶
无操作的 sensor.set_framerate() 占位函数被移除;现在调用它会引发 AttributeError。请移除该调用,改为通过 framesize/exposure 控制帧时序。(可用的 set_framerate() 在 v4.0.2 中重新引入。)
提交: 705e98f91
OpenMV Cam M7 上移除 TensorFlow (minor)¶
TensorFlow(tf 模块)在 OpenMV Cam M7 / OpenMV 3 上被禁用(已无法容纳)。在 M7 上执行 import tf 会失败——请使用 H7 级摄像头来运行 TensorFlow。(tf 在 v3.6.3 中于 F7 上重新启用。)
提交: 2ae875077
set_pixformat() / set_framesize() 返回 None (behavior)¶
sensor.set_pixformat() 和 sensor.set_framesize() 现在返回 None 而非 True,且不支持的像素格式现在会引发 ValueError 而非断言错误。检查返回值的代码(例如 if sensor.set_pixformat(...):)必须不再这样做,捕获 AssertionError 以处理不支持格式的代码必须改为捕获 ValueError。
提交: f314ac4e7
lens_corr() / linpolar() / logpolar() 要求偶数尺寸 (behavior)¶
image.lens_corr() 以及 image.linpolar() / image.logpolar() 现在要求图像宽度和高度均为偶数,奇数尺寸会引发错误。在调用这些方法前,请将图像裁剪或缩放为偶数尺寸。
迁移检查清单¶
要干净地移植到 v3.6.1,典型的工作是:
将 TensorFlow 工作负载迁离 OpenMV Cam M7(M7 TensorFlow 变更)。
不再依赖
set_pixformat()/set_framesize()的返回值,并为不支持的像素格式捕获ValueError(返回值变更)。在调用
lens_corr()/linpolar()/logpolar()前确保图像尺寸为偶数(偶数尺寸要求)。
所有其他脚本无需更改即可运行。