v4.8.1

v4.8.1 基于 Qt Creator 14.0.2 构建,核心是全新的高可靠性 OpenMV V2 摄像头协议、内置的代码性能分析器(Code Profiler),以及一种在保存时保持摄像头挂载而不再弹出设备的工作流程。捆绑的固件和完整示例集均已更新至 4.8.1。本版本没有脚本 API 的不兼容改动,但保存不再弹出设备的行为以及移除若干启动时串口标志属于用户可见的工作流程变更。

亮点

  • OpenMV Protocol V2 是全新的高可靠性摄像头协议栈(OMVCamera/OMVTransport/OMVDebug),支持 CRC32、序列号、ACK/NAK、重传、事件和分片。它在连接时自动协商,并驱动复位、引导、流式传输、脚本执行和统计功能。

  • 代码性能分析器(Code Profiler) 是一个全新窗口(Window > Show Code Profiler),它从摄像头轮询每个函数的性能分析记录,并在可排序的表格中显示调用次数、最小/最大/总计/平均微秒数(μs)、平均周期数、百分比和事件计数器。

  • 原地保存 不再弹出摄像头驱动器;IDE 现在写入 main.py 并将卷刷新到磁盘,使设备保持挂载状态。

  • 多传感器检测 会报告板上的每一个摄像头,在状态栏中显示为 Sensors: X, Y,主传感器列在最前面。

  • 动态帧读取 会针对每种像素格式重新计算最佳匹配的原始流式分辨率,并自动重新配置数据流。

  • 捆绑的固件和示例 在所有板子上均已更新至 4.8.1,新增了 GenX320 事件摄像头、TensorFlow 机器学习、Alif OLED 以及 LCD/Touch-LCD 扩展板示例。

新功能

  • 新增 OpenMV V2 通信协议:一个完整的传输层和事务层,支持 CRC32、序列号、ACK/NAK、重传、事件和分片,外加一个在连接时自动协商并集成到串口驱动中的 OMVCamera 类(2fde9eb3ffff1bf2ba8c41fcfad7fc7ed4bc84c3956af669039adfa4925985207af1922a85f0c7c875070cc213e314459cce0367ca950da2f79d02b6fc9866534ecffbe)。

  • 新增 代码性能分析器(Code Profiler) 窗口(Window > Show Code Profiler),它轮询每个函数的性能分析记录,并显示调用次数、最小/最大/总计/平均微秒数(μs)、平均周期数、百分比和事件计数器,通过捆绑的 ELFIO ELF 解析器将地址解析为符号(019d3cd2c57cd9e1cc)。

  • 新增 调试协议设置(Debug Protocol Settings) 对话框,显示每秒刷新一次的实时 System Info、Host Stats 和 Device Stats,公开每通道的轮询速率以及合并轮询与拆分轮询的控制选项(5220a61250da2f79d0)。

  • 新增 多传感器检测:拥有多个摄像头的板子会在状态栏中将它们全部报告为 Sensors: X, Y,主传感器排在最前面(cebc79ce7)。

  • 新增 动态帧读取(默认开启),它针对每种像素格式(BINARYGRAYRGB565ARGB8JPEGPNG)重新计算最佳匹配的原始流式分辨率并重新配置数据流(75c073bdb0da2f79d0)。

  • 新增对 BINARY(1 bpp 单色)和 ARGB8(32 位带 alpha)原始像素格式的帧缓冲区解码,使这些图像类型现在能够在查看器中渲染(dabb82062)。

  • 在 Windows 上,Connect 现在会扫描被操作系统标记为有问题的 USB 设备,并以列表形式警告这些可能阻碍连接的故障设备(1a5beb0811b59cd78e)。

  • 新增状态栏 注册指示器:为已连接的摄像头显示绿色的 Registered 或珊瑚色的 Unregistered 按钮,可点击以注册该板(a8c98a4b9)。

  • 帧缓冲区查看器现在可以通过新的 FB_MESSAGE 转义码显示运行中的脚本发送的居中文本消息,而不是显示图像(530048201)。

  • 新增模型库(model-zoo)条目:ST FastDepth 深度估计模型(224/256/320)、ST 头部关键点姿态模型、手掌检测和手部关键点的手部模型,以及 BlazeFace 正面人脸检测模型(5516684104d64556d4fadd6c4edb8277bb88a8c98a4b9)。

  • 新增仅用于工厂版本的自检脚本(摄像头、IMU、ToF、WiFi、LAN),它会被捆绑并在工厂 IDE 变体启动时自动打开(0db7fbbb0);该测试中的 RT1060 LAN 部分目前已禁用(48370d022)。

其他更改和改进

  • 原地保存:保存脚本不再弹出摄像头驱动器;IDE 写入 main.py 并将卷刷新到磁盘(在 Windows 上使用 FlushFileBuffers,在 Linux 上使用 syncfs,在 macOS 上使用 sync_volume_np/F_FULLFSYNC),使设备保持挂载状态(1614c572f6928b51ea35ed53967)。

  • 在摄像头忙碌时点击的工具栏操作(禁用帧缓冲区、JPEG 压缩、保存脚本、配置设置)现在会被排队,并在设备空闲时自动执行,而不再弹出忙碌错误对话框(f4315f0a4)。

  • 帧缓冲区查看器现在默认采用适应视图模式,使图像在启动时自动缩放至窗口大小,并且串口终端输出窗格现在在启动时默认显示(f3ce4dc75)。

  • .lite 扩展名的已编译模型文件现在在各处都能被识别:模型库浏览器的过滤和显示、固件 ROMFS 对齐,并且 Vela/STEdge AI 编译器现在也输出 .lite 文件(f3ce4dc75)。

  • STEdge AI(N6)模型编译对话框现在会解析并报告 NPU RAM 和 hyperRAM 的使用百分比,并将重定位后的网络输出复制到与模型扩展名匹配的文件中(f3ce4dc75)。

  • 模型库浏览器现在显示文件 Size 列并拉伸名称列以适应空间,而不再隐藏大小信息(f3ce4dc75)。

  • 新脚本模板已更新为新的 csi 模块 API 并默认采用 VGA 帧大小,捆绑的 Hello World 示例也从 QVGA 帧大小切换为 VGA 帧大小(f3ce4dc75)。

  • Convert Video 对话框被重写为使用共享的加载器对话框,具有彩色输出、成功/失败消息、用于关闭的 OK 按钮,以及在平台上 FFMPEG 不可用时给出的清晰错误提示(f56efc7be)。

  • JPEG/PNG 图像太大而无法缓冲和发送时,帧缓冲区查看器现在会通过新的 FB_BUFFER_ERROR 转义码显示闪烁的警告(fda826126)。

  • DFU 引导加载程序进入操作现在会强制在 V2 协议固件上让引导加载程序保持驻留,并带有版本检测:在可能因强制驻留而卡住的较旧引导加载程序(<1.0.2)上回退为普通复位(975857221)。

  • 重命名并重新组织了 ST 目标检测模型文件夹(st_yolo_lc_v1 改为 yolo_lctiny_yolo_v2 改为 yolo_v2yolov8n 人物模型改为以尺寸命名的简洁文件),并移除了体积较大的 tiny_yolo_v2 int8 变体(34240cc3c)。

  • 串口时序现在通过固件 settings.json 中的 protocol 覆盖键(overrideReadTimeoutoverrideReadStallTimeoutoverridePerCommandWait,以及 V2 的 overrideCRC/overrideSEQ/overrideACK 键)进行调整,而不再使用启动时的命令行标志(019d8bf1d)。

  • 将 Python 语言服务器针对 flake8 和 pycodestyle 的行长度限制设置为 120 列,使较长的行不再因默认的 79 列限制而被标记(dabb82062)。

  • 通过将 Qualcomm 模型集合和 google/mobilenet_v1 移入 models_unused,缩减了捆绑的机器学习模型集,从而减小安装程序体积(c44ddba20)。

错误修复

  • 使用 QPointer 守卫使固件下载和资源更新进度对话框具备崩溃安全性,从而在对话框于下载中途关闭时不再使用已删除的对话框(f3ce4dc75)。

  • 驱动器扫描现在会持续重新扫描,直到找到摄像头的 USB 驱动器为止,并在断开连接时清除过时的驱动器条目,从而移除了之前的一次性定时器变通方案(a31d41b4e)。

  • 若干连接和串口修复:隐藏的传感器(例如 SoftCSI)不再扰乱显示的传感器类型,Windows 串口保活定时器可防止 USB 停滞,Start 不再重启已在运行的脚本,并且在端口关闭时干净地断开摄像头通道(a8e467be6)。

  • 性能分析器视图恢复了其每列的 PMU 事件计数器选择(可勾选的事件菜单),并保存了之前被暂时禁用的计数器/表头状态(40c679e90)。

平台和工具支持

  • Qt Creator 基础版本: 14.0.2。

  • 捆绑固件: 从 4.7.0 更新至 4.8.1,为 OPENMV2/3/4/4P/PT、OPENMV_N6、OPENMV_AE3、OPENMV_RT1060 以及 Arduino GIGA/Nicla Vision/Portenta H7 板子重新构建固件(2657818ca)。

  • 通过将多命令 USB 传输拆分为这些板子能够处理的 USBDBG_LEN 大小的分片,修复了 macOS 上 RT1062 和 AE3 板子的协议版本握手问题(6b9d5f842)。

  • 重做了捆绑的 Windows 驱动包:新增了每块板的已签名 .cat/.inf 驱动文件(AE3、H7、H7Plus、M4、M7、N6、Pico/PT、RT1062),并将 CDC 串口驱动移入一个带有基于 dpinst 的自动安装程序的新 openmvcdc 文件夹(439557829ba3b01bfb)。

  • 通过将传感器 ID 0x13110x1312(与现有的 0x1313 一起)注册为 MT9V0X2,新增了对较旧 MT9V032 摄像头传感器修订版的支持(eaaa624e3)。

重大变更

本次发布没有脚本 API 的不兼容改动,但存在一些用户可见的工作流程变更:

  • 保存脚本不再弹出或卸载摄像头的 USB 驱动器。IDE 现在原地刷新卷缓冲区,因此设备在保存后保持挂载状态。

  • 移除了启动时的串口标志 -override_read_timeout(默认 5000 ms)、-override_read_stall_timeout(默认 1000 ms)和 -override_per_command_wait(默认 1 ms,macOS 上为 2 ms);串口时序现在通过固件 settings.json 中的 protocol 覆盖键进行配置(019d8bf1d)。

  • 捆绑的引导加载程序现在仅以 .bin 形式提供;每块板的 .dfu 固件和引导加载程序文件已被移除。