v5.1.0#
v5.1.0 是一个功能版本。帧缓冲区下方的窗格从一个直方图扩展为一组 实时视图——开发板信息、内存、统计,以及全新的 通道 视图,它将脚本发布的值转化为控件、图形、频谱和深度图并录制到文件——帧缓冲区获得了面向多传感器摄像头的 源选择器,IDE 学会了加载包含开发板、固件、示例、模型和存根的 第三方存储库,视频录制切换为 H.264。新的开发板和传感器得到支持,固件工具经过对自 v5.0.0 以来每项变更的全面审计得到加固,还从 OpenMV Studio 移植了一些行为。它基于 Qt Creator 14.0.2 构建,并捆绑固件 v5.0.1。
亮点#
窗格视图——直方图窗格的标题栏新增一个选择器,可将窗格在 直方图、开发板信息(所连接摄像头的硬件、版本和能力)、内存(MicroPython 堆和每个 UMA 池的实时图形,带峰值跟踪)、统计(调试协议的数据包、错误和每通道事件计数器)和 通道 视图之间切换。
通道视图——脚本可以通过调试协议发布命名的数据和控件通道,IDE 会实时渲染它们:可写回摄像头的标签、开关、滑块、微调框、单选按钮、单行编辑框、选择器、按钮和文本块;支持平移、缩放、标记、触发、历史记录和频谱分析器的波形图;以及使用摄像头自带调色板、三种缩放滤镜和色调映射的深度图。任何图形或深度图都可以录制为 CSV、WAV、NumPy 或 Edge Impulse JSON 和 CBOR 文件——包括对整个通道的“录制全部”——用于采集训练数据。脚本停止后,最后的值会保留在屏幕上。
帧缓冲区源选择器——拥有多个图像传感器的摄像头会在帧缓冲区的标题栏中显示一个选择器,用于选择向 IDE 流式传输的传感器(或关闭流式传输);JPG 开关变成了 JPG / RAW 流模式选择器;窗格标题会标明每一帧到达时所采用的格式。
第三方存储库——供应商可以发布包含开发板、固件(发布和开发渠道)、示例、机器学习模型和
.pyi存根的存储库;IDE 可从 URL 或安装程序放入的文件夹安装它,将其与自己的内容合并,保持其更新,并允许你按优先级排序供应商。通过 Preferences → OpenMV → Third Party Repositories 管理。新硬件——OpenMV N6 Classic 开发板(包括其引导加载程序驱动、udev 规则和 ROM-DFU 恢复条目)以及 FLIR Lepton 3.1R 和 UW 传感器。
H.264 录制——帧缓冲区录制器和视频转换器现在编码为 H.264 而非 MPEG-4 Part 2,采用固定的关键帧间隔以便录制内容能够顺畅定位,帧率也会取整到整数。
审计修复——自 v5.0.0 以来的每一次提交都经过两轮回归审查,并特别关注固件、引导加载程序和 ROMFS 路径;发现的缺陷已在本版本中修复(参见 错误修复)。
新功能#
开发板信息、内存和统计视图——位于直方图窗格中,在深色和浅色主题下均采用满幅样式,文本可选中 (cdea506655b, 7629a588db9, e21bd94a395, b55dcc412f6, fc744920011, e7dc3bf0092, 448e21db0bd)。
通道视图——完整的控件集合(label、toggle、slider、spin box、radio、line edit、select、push button、text),带频谱分析器的波形图(Hann、Hamming、Blackman 和矩形窗,平均、峰值保持、对数频率),上升沿和下降沿触发、标记、历史记录和图形导出;采用 Depth、Rainbow、Ironbow 和 Event 调色板、最近邻 / 双线性 / 双三次缩放、脚本范围 / 自动范围 / 均衡化色调映射的深度图,并带有暂停按钮、悬停读数、显示声明范围和帧的最小值 / 最大值 / 平均值的标题栏,以及“保存图像”;录制为 CSV、WAV、NumPy 和 Edge Impulse JSON / CBOR 并可选添加 Edge Impulse 标签,长时间采集的分段拆分,以及“录制全部”;协议首选项中的“通道轮询”间隔 (5b4f31a6b3a, d1252a24f14, bfd7fd72f94, d1c2ab02a5f, 4808b8ffe26, dfc323b4ec7, 61c077df9a5, 8c2cd6cf1f1, 1534225fcee)。
帧缓冲区源选择器与格式读数——在多传感器摄像头上选择用于流式传输的传感器,或选择关闭;收到的帧格式显示在窗格标题中;JPG 开关现在是 JPG Mode / RAW Mode 选择器 (e76284bde9e, c2baff8d60c, afece31cb6a, 76448d7b9dd)。
第三方存储库——由文件驱动的固件存储库会与内置开发板列表合并,通过首选项页面进行网络更新,每个供应商一个开发固件渠道,用户可控的供应商优先级,供应商示例合并到 File → Examples,供应商模型合并到 Model Zoo,自定义
.pyi存根提供给代码补全,供应商覆盖内置内容时发出覆盖警告,以及对供应商开发板的许可证检查 (21a63a74949, b5512efe949, b15afdac479, 1fe693f0b61, ae11ffeffc4, cf47a37ba65, 100bdeb530b, 252924901f7, c75a81f2a4a, 3e7f077a738, 5c5aa3e657c, e3f36adbdcb, b04da8ee888)。运行前去除注释——脚本在发送到摄像头之前会移除注释,为注释较多的脚本节省摄像头 RAM;行会被保留,因此回溯中的行号仍与编辑器一致 (677546ee033)。
内联错误标记——当脚本因异常而终止时,编辑器会将出错的行标记为红色并在旁边显示错误文本;编辑文件、再次运行或断开连接时该标记会清除 (677546ee033)。
拖放到 ROMFS 编辑器——从桌面拖入的文件会经过与 Add File 相同的脚本编译和模型转换,并放入拖放目标文件夹 (677546ee033)。
编辑器、终端和 UI 改进#
直方图由完整的 8 位 RGB 计算得出,而非摄像头的 RGB565 表,并采用共享的绘图调色板、alpha 混合填充和更暗的网格线 (238e099373e, f126e8f34c0, cebbf0c9e2c)。
隐藏的窗格视图不做任何工作——当显示的是其他视图或窗格被折叠时,直方图会跳过计算和重绘,并在再次显示时补上;零尺寸的重绘已被抑制 (c8730df8399)。
示例脚本打开时在 import 之后带有一个空行,捆绑的示例也以同样方式重新格式化 (1f88f617ec5, 87c8f7d41c7)。
代码补全会显示私有名称——内嵌的语言服务器不再过滤以
_为前缀的成员,摄像头的模块会用到这类名称 (23ab5b38bb3)。macOS——首选项中的协议控件分组框不再拥挤,项目视图已防范 Cocoa 辅助功能崩溃,会提醒 Apple Silicon 用户注意“允许配件连接”安全设置,并在未授予输入监控权限(固件更新需要)时提醒 RT1062 用户;两个警告都在连接后显示 (7d7b69367bf, 69fe7ffc913, 742cb4d8c0b, 8890eb77834, 89646292e8d)。
查看器模式快捷键——破坏查看器模式(以及常规 IDE)的多余快捷键已被禁用,查看器模式也不再将其已清除的快捷键持久化到完整 IDE 的设置中 (251b422f642, 0d153671c1d)。
未知传感器在状态栏中以芯片 id 命名,以便识别并添加到传感器表中 (df561775b54)。
固件、开发板和工具#
OpenMV N6 Classic 支持:开发板条目、Windows DFU 驱动和安装程序代码、Linux udev 规则 (4ff4a1f239d, bdd6c96ef47, 25fcdc13c6a, 7730b699f60)。
FLIR Lepton 3.1R 和 UW 传感器支持 (12c03024f3c)。
IMX 引导加载程序交接——预先预备的捕获器会在 RT1062 的引导加载程序枚举的瞬间将其接管,取代了每次探测都新建进程的循环,后者在负载较高的主机上可能错过一秒钟的窗口 (3d8b63c6859)。
固件 zip 包——Load Custom Firmware 可接受仅含 romfs 的包和不含 ROMFS 的包,而且会为已处于引导加载程序模式的 IMX 开发板暂存自定义或开发固件 (b6f16f54c1a, 94d5fd5c30e)。
私有暂存目录——用于开发 / 自定义固件、ROMFS 编辑器镜像和视频工具临时文件,因此来自其他进程的过期文件绝不会被误刷写或误转换 (939154501af, a288fe712e7, 5c8c717adec)。
H.264 视频——录制和转换均以固定关键帧间隔编码为 H.264;接近整数的录制帧率会被取整到该整数,因此播放器报告的是 30 FPS 而非 29.97 (6ad1968341d, d62c110e155, bab488a54fe)。
资源 zip 校验和——IDE 的资源更新会与随版本一同发布的 SHA-256 进行校验 (677546ee033)。
如实的 User-Agent——向 OpenMV 服务器发出的请求会使用真实的 User-Agent (c4279c0213e)。
错误修复#
对自 v5.0.0 以来每一项变更的两轮审查发现并修复了以下问题 (ccea3b17d01, 71826200611):
固件与引导加载程序路径——对已处于引导加载程序模式的开发板执行 Load Custom Firmware 加载 zip 时,刷写的却是发布版本;Alif 恢复路径现在会拒绝自定义构建,而不是改刷发布版本;变砖的 N6 Classic 曾被用普通 N6 的引导加载程序和固件修复;过期的第三方资源根目录可能将变砖的内置开发板引向供应商文件;IMX 捕获器在崩溃后仍可能继续刷写,在等待 flashloader 时忽略 Cancel,并在预备阶段取消后让串口保持打开;N6 Classic 引导加载程序缺少 udev 规则;Windows 驱动安装程序可接受的退出码有一处笔误。
ROMFS 编辑器——在读取 ROMFS 期间按 Cancel 会报告“Failed to unpack ROMFS!”,并对仍处于引导加载程序中的摄像头等待十秒;在写入期间按 Cancel 会悄无声息地结束,留下可能不完整的 ROMFS;写入期间的 dfu-util 错误被报告为成功;在后续对话框中按 Cancel 会丢弃所有编辑;Auto Reconnect 可能在打开的编辑器下方进行连接;已连接时执行 Edit ROMFS 会先不必要地断开再重新连接;转换器的临时目录会泄漏。现在,操作取消后会请求引导加载程序退出 DFU,使摄像头自行恢复。
第三方存储库——zip 条目在解压前会先验证(不允许路径穿越或符号链接),部分安装和重新安装会保留旧副本直到新副本就位,被拒绝的供应商开发板不再连带拖垮与其重叠的内置开发板,缺失的 PID 掩码在运行时曾匹配不到任何设备,基础示例 / 模型索引行不再捕获同名的供应商文件。
帧缓冲区与传感器——GENX320 事件传感器(芯片 id 大于
0x80000000)会禁用帧缓冲区;保存的传感器选择在重启后丢失;旧的“禁用帧缓冲区”首选项未被迁移;流源命令现在依协议版本启用;直方图页面隐藏时对焦指标会冻结;断开连接后帧格式仍残留在标题中。连接流程——macOS 警告可能吞掉固件升级提示的“是”;Model Zoo 总是以折叠状态打开且不恢复选择;摄像头插入超过十秒后,摄像头驱动器的单驱动器回退方案无法触发。
通道视图与录制器——恶意的帧大小可能使大小检查溢出;Edge Impulse 录制器在每个数据块上都重新分配内存,现在每个分段上限为 64 MB;名称中含分隔符的模式可能索引越过记录列表;重复的记录会使正在运行的录制器成为孤儿;视图冻结期间的写入会被丢弃;通道列表现在会在注销和软重启事件时刷新。
视频——用户输入的奇数宽度会破坏 libx264 构建上的 H.264 编码;取消或失败的
.bin转换会遗留帧,并被下一次运行并入。协议——协议检测之前执行的读取清空现在有界限(issue #336)(77cd13af76f);摄像头与驱动器的关联不再在竞争中输给其他卷 (9877480c304)。
串口信息封装中的一个
-Wdeprecated-copy警告 (abcfaa8af5e)。
本地化#
全部 37 个翻译目录已针对窗格视图、通道视图及其深度图,以及本版本的每个新字符串进行了更新 (1b71f243733, dc13c23ed81, a7debafdafa, 173a57422f7)。
平台和工具支持#
Qt Creator 基础版本: 14.0.2。
OpenMV IDE 版本号提升至 5.1.0。
捆绑固件: v5.0.1(参见 固件更新日志)。
新开发板与传感器: OpenMV N6 Classic;FLIR Lepton 3.1R 和 UW。
重大变更#
对现有项目没有影响。帧缓冲区标题栏中的 JPG 开关现在是 JPG Mode / RAW Mode 选择器,其旧的“禁用帧缓冲区”设置会迁移到新源选择器的“关闭”条目中。脚本在运行前会去除注释;脚本不应依赖在运行时读取自身的源文本。