v4.5.1

v4.5.1 新增了图像方向/宽高比绘制提示、直接从文件路径加载图像、GC2145 宽视场 ioctl,以及新的背光控制器 API。它还重构了 Image() 构造函数、display API 和模块参数解析——请阅读下文的破坏性变更。

亮点

  • 绘制提示——draw_image() 新增了方向提示(HMIRROR/VFLIP/TRANSPOSEROTATE_90/180/270)和宽高比缩放提示(SCALE_ASPECT_KEEP/EXPAND/IGNORE)。

  • 从磁盘加载图像——draw_image() / display.write() 接受文件路径字符串。

  • 背光控制——新增 DACBacklight / PWMBacklight 类和显示器 backlight= 参数。

  • 破坏性变更: Image() 构造函数、display API 和模块参数解析已变更——参见破坏性变更。

新功能

  • draw_image() 方向提示——image.HMIRRORimage.VFLIPimage.TRANSPOSE,外加便捷的 image.ROTATE_90 / ROTATE_180 / ROTATE_270

  • draw_image() 宽高比提示——image.SCALE_ASPECT_KEEP / SCALE_ASPECT_EXPAND / SCALE_ASPECT_IGNORE,分别用于适配 / 扩展 / 拉伸。

  • 调色板常量——image.PALETTE_RAINBOWimage.PALETTE_IRONBOW(已移入 image 模块)。

  • 宽视场——新的 sensor.IOCTL_SET_FOV_WIDE / IOCTL_GET_FOV_WIDE ioctl(在 GC2145 上,传感器缩放可达 5 倍)。

  • 从磁盘加载——draw_image()display.write() 接受源图像文件路径字符串,直接从存储中加载。

  • 背光控制器——新增 DACBacklightPWMBacklight 类(可从 display 导入),以及 SPI/parallel 显示构造函数上仅限关键字的 backlight= 参数。

其他变更与改进

  • ST7701 DSI 显示驱动被移入其独立的 st7701.py 模块(仍可通过 from display import * 导入),并在 Arduino Giga 上冻结;lsm9ds1 IMU 驱动在 Arduino Nano 33 BLE Sense 上冻结。

  • MT9V022 / MT9V034(全局快门)摄像头现在应用行噪声校正以获得更好的图像质量。

  • i.MX RT 的 USB 大容量存储卷现在标记为 OpenMV 磁盘。

缺陷修复

摄像头与传感器:

  • 修复了在高度超过 480 行的图像上进行角点检测(find_keypoints() FAST/AGAST)的问题——每行缓冲区现在按图像高度调整大小。

  • 为 i.MX RT(OpenMV RT1060)上帧同步的 snapshot() 添加了 FSYNC 引脚支持,并修复了 RT1060 上 SPI4 MOSI/MISO 引脚互换的问题。

显示与视频:

  • 修正了 SPIDisplay 构造函数的参数顺序(bgrbyte_swaptriple_buffer 此前被应用到了错误的参数上)。

  • 修复了在绘制带指定矩形的图像时 TV 扩展板图像损坏的问题,以及录制缩放帧时 MJPEG 帧边界不正确的问题。

网络:

  • WINC WiFi AP 模式不再强制执行过时的仅 WEP 限制——开放和 WPA AP 模式可在正确处理 PSK 的情况下正常工作。

硬件与开发板支持

  • OpenMV RT1060——FSYNC 引脚及修正后的 SPI4 引脚。

  • Arduino GIGA——QSPI 可靠性临时方案;冻结了 ST7701 显示驱动。

  • Arduino Nano 33 BLE Sense——冻结了 lsm9ds1 IMU 驱动。

破坏性 API 变更

v4.5.0 与 v4.5.1 之间面向用户的 API 破坏性变更。范围:modules/ 中的 Python C 模块和 scripts/libraries/ 中的 Python 库。

每项变更都标注了其影响:

  • minor——影响面较窄的 API;仅影响使用过它的脚本。

  • behavior——API 相同但结果不同;请重新检查已调优的脚本。

变更按影响程度依此顺序分组。如果你只想移植代码,可直接跳到末尾的 迁移清单。每个提交哈希都链接到其在 GitHub 上的 diff。

Image() 构造函数和 display API (minor)

image.Image 构造函数被重构为关键字参数(heightpixformatbuffer=copy_to_fb=);现在它可以从已有的 bytearray/缓冲区构建图像,而压缩格式则需要提供缓冲区。display.write() 也被重构:x_scale/y_scale 现在接受浮点数(缩放比例)或整数(以像素为单位的目标尺寸),并移除了独立的 x_size/y_size 关键字。WINC.connect() 的第一个位置参数从 essid 重命名为 ssid,WINC WiFi 扫描结果改为 (ssid_bytes, bssid_bytes, channel, rssi, security, N)(SSID/BSSID 现在是字节;BSSID 不再是格式化的 MAC 字符串)。

提交: 6752c95ac1617370928178c237cb6cdf8de1

背光范围、缩放和仅限关键字的参数 (behavior)

Display.backlight() 现在接受 0–100 的强度(0 = 关闭,100 = 全亮),而非 0–255,超出范围会抛出 ValueError。整数 x_scale/y_scale 值现在被视为乘性缩放因子(与浮点数相同),而非目标像素尺寸——这会影响 fir.snapshot()/draw_ir()tof.snapshot()/ draw_depth()displaytv 缩放。sensorfirtoftvmjpeggifimageiotfaudio 模块的参数解析已统一,使若干此前为位置参数的选项变为仅限关键字(名称、默认值和行为在其他方面保持不变)。

提交: 391ec443f8bd25d6cd47731265608bf62a32a4c0f20bf9b411a66d3d679f5a6d15fc6b8d555e67ecd

迁移清单

干净地移植到 v4.5.1 通常需要完成以下工作:

  1. Image() 的构造更新为新的关键字形式,将 display.write()x_size/y_size 切换过来,并将 WINC.connect()essid 重命名为 ssid(处理新的基于字节的扫描元组)(构造函数/display/WINC 变更)。

  2. Display.backlight() 调用重新缩放到 0–100,重新检查所有整数 x_scale/y_scale 的用法,并将此前为位置参数的模块选项以关键字形式传递(行为变更)。