AI-on-the-edge-device 模拟表盘 ROI 图片留存参数 ROIImagesRetention 完全解析

发布时间:2026/9/16 18:25:34
AI-on-the-edge-device 模拟表盘 ROI 图片留存参数 ROIImagesRetention 完全解析 AI-on-the-edge-device 模拟表盘 ROI 图片留存参数 ROIImagesRetention 完全解析【免费下载链接】AI-on-the-edge-deviceEasy to use device for connecting old measuring units (water, power, gas, ...) to the digital world项目地址: https://gitcode.com/GitHub_Trending/ai/AI-on-the-edge-device导读ROIImagesRetention是 AI-on-the-edge-device 水表/电表图像识别固件中控制模拟指针表盘AnalogROI 分离图片保留时长的核心参数。它直接决定 SD 卡上调试图片的占用空间与可追溯深度。读完本文你将掌握该参数在config.ini中的配置位置与取值规则、固件底层按天删除旧图片的完整实现原理、0永久保留与默认值的实际差异以及如何在 Web 配置界面和旧版本配置迁移中正确处理它。一、参数速览ROIImagesRetention属于[Analog]配置段官方参数文档定义如下见 ROIImagesRetention.md属性值参数名ROIImagesRetention默认值3单位天Days含义保留分离出的 Analog ROI 图片的天数0 永久保留简单来说设备每次拍照识别时会从整帧画面中按 ROIRegion of Interest感兴趣区域坐标裁切出每个模拟表盘小窗的独立图片并保存到 SD 卡用于后续排查识别错误、追溯历史读数。ROIImagesRetention决定这些裁切图片在 SD 卡上保留多久超过保留期的历史图片会被固件自动清理。注意同一个参数在数字表盘Digits段同样存在二者相互独立见 Digits/ROIImagesRetention.md。二、配置文件中的位置与用法固件的全部运行参数存放在 SD 卡的config.ini中。在仓库自带的 config.ini 模板里[Analog]段默认以注释形式给出该参数[Analog] Model /config/ana-cont_1500_s2_q.tflite CNNGoodThreshold 0.5 ;ROIImagesLocation /log/analog ;ROIImagesRetention 3 main.ana1 432 230 92 92 false main.ana2 379 332 92 92 false main.ana3 283 374 92 92 false main.ana4 155 328 92 92 false关键点行首分号;表示注释默认模板中该行被注释固件会使用内置兜底值取消注释并填写数值即可启用自定义保留期。必须与ROIImagesLocation配合ROIImagesLocation指定 Analog ROI 图片的存储目录默认示例/log/analog只有设置了位置并启用图片记录后ROIImagesRetention才有实际作用。二者在解析阶段是联动的详见下文源码分析。取值规则输入必须为非负整数单位为天。0表示永久保留、永不自动删除任何正数表示保留最近 N 天内的图片。在仓库的演示配置 sd-card/demo/config.ini 中可以看到同样的注释写法说明这是面向所有部署场景的统一约定。三、源码级实现原理1. 参数解析与联动关系Analog以及 Digits段的参数解析统一在ClassFlowCNNGeneral::ReadParameter中完成见 ClassFlowCNNGeneral.cppif ((toUpper(splitted[0]) ROIIMAGESLOCATION) (splitted.size() 1)) { this-imagesLocation /sdcard splitted[1]; this-isLogImage true; } if ((toUpper(splitted[0]) ROIIMAGESRETENTION) (splitted.size() 1)) { if (isStringNumeric(splitted[1])) { this-imagesRetention std::stoi(splitted[1]); } }可以从中确认三点实现事实位置是开关只有解析到ROIImagesLocation时isLogImage才会被置为true图片记录功能才算真正启用否则后续所有日志/清理逻辑都会直接短路返回ClassFlowImage.cpp中CreateLogFolder、LogImage、RemoveOldLogs三处均以if (!isLogImage) return;开头。数值校验解析前先调用isStringNumeric校验只有纯数字才通过std::stoi写入非法值会被静默忽略。存储类型imagesRetention在 ClassFlowCNNGeneral.h 中声明为unsigned short天然不支持负数——这正对应0 永久保留的语义设计。2. 图片的目录结构与命名启用图片记录后每次识别流程会在 ClassFlowTakeImage.cpp 与ClassFlowCNNGeneral::doFlow见 ClassFlowCNNGeneral.cpp中依次执行建目录 → 保存原图 → 裁切 ROI → 清理过期图片。目录按日期/小时两级分层见 ClassFlowImage.cppstring logPath imagesLocation / time.LOGFILE_TIME_FORMAT_DATE_EXTR / time.LOGFILE_TIME_FORMAT_HOUR_EXTR;例如默认位置/log/analog下会生成/log/analog/20260915/14/这样的子目录每小时的裁切图集中存放便于按时间浏览。文件命名规则见 LogImage 实现模拟表盘的结果是浮点数文件名以%.1f_前缀记录读数如3.4_main.ana1_20260915_1430.jpg负值/无效值使用N.N_前缀10.0 会归一化为0.0_。3. 过期清理逻辑RemoveOldLogs这正是ROIImagesRetention发挥作用的核心函数完整实现见 ClassFlowImage.cpp。其流程为if (imagesRetention 0) { return; // 0 永久保留直接跳过清理 } time(rawtime); rawtime addDays(rawtime, -1 * imagesRetention 1); // 计算保留阈值日期 strftime(cmpfilename, 30, LOGFILE_TIME_FORMAT, timeinfo); DIR *dir opendir(imagesLocation.c_str()); while ((entry readdir(dir)) ! NULL) { // 对 imagesLocation 下的每个子目录即日期目录 // 若目录名长度与日期格式一致且字典序小于阈值日期则整目录删除 if ((strlen(entry-d_name) folderName.length()) (strcmp(entry-d_name, folderName.c_str()) 0)) { removeFolder(folderPath.c_str(), logTag); } }几个值得注意的实现细节0是特判imagesRetention 0时函数直接返回不做任何扫描与删除SD 卡上的 ROI 图片会无限累积——这也是永久保留的代码级保证。阈值按天取整阈值日期 当前时间减去(retention - 1)天。例如保留 3 天时第 4 天及更早的日期目录会被删除从而在任意时刻最多留存最近 3 个自然日的数据语义与保留 N 天完全吻合。按日期目录粒度删除清理以天为最小粒度不精确到小时级文件避免频繁的小文件操作降低对 SD 卡写入寿命的影响。清理时机在每次识别流程结束时触发Analog/Digits 的doFlow末尾以及拍照流程的RemoveOldLogs()调用因此无需定时任务天然与采样周期同步。4. 与原始大图的区别注意区分ROIImagesRetention管理的是ROI 分离小图Analog 表盘裁切图而整帧原图的保留时长由[TakeImage]段的RawImagesRetention独立控制见 ClassFlowTakeImage.cpp。二者的解析逻辑几乎一致但存储位置与用途不同原图体积大、主要用于整体画面回放ROI 小图体积小、专门用于逐表盘诊断。实际部署时可分别设置不同的保留策略。四、通过 Web 界面配置固件内置的 Web 配置界面同样暴露了该参数。在 edit_config_template.html 的 Analog 段可以找到对应表单控件tr classAnalogItem td input typecheckbox idAnalog_ROIImagesRetention_enabled ...ROI Images Retention /td td input required typenumber idAnalog_ROIImagesRetention_value1 min0 step1 oninput(!validity.rangeUnderflow||(value0)) (!validity.stepMismatch||(valueparseInt(this.value)));Days /td /tr从控件属性可以读出界面层施加的约束typenumbermin0只允许输入不小于 0 的数值从源头杜绝负数。step1oninput中的parseInt处理强制为整数天小数输入会被取整。勾选复选框启用该项后保存readconfigparam.js会通过 ParamAddValue(param, catname, ROIImagesRetention) 将数值写入config.ini对应段。对于习惯直接编辑文件的用户也可以像第二节那样手工修改config.ini后重启设备生效。五、旧版本配置自动迁移如果是从早期固件升级旧配置中的参数名会自动迁移。在固件启动阶段的配置迁移逻辑 main.cpp 中else if (section [Digits]) { migrated migrated | replaceString(configLines[i], LogImageLocation, ROIImagesLocation); migrated migrated | replaceString(configLines[i], LogfileRetentionInDays, ROIImagesRetention); } else if (section [Analog]) { migrated migrated | replaceString(configLines[i], LogImageLocation, ROIImagesLocation); migrated migrated | replaceString(configLines[i], LogfileRetentionInDays, ROIImagesRetention); }也就是说旧版参数LogfileRetentionInDays图片保留天数会被自动改名为ROIImagesRetentionLogImageLocation会被改名为ROIImagesLocation无需用户手工迁移。需要留意的是[TakeImage]段的同名旧参数则会迁移为RawImagesRetentionmain.cpp三个段的旧参数指向各自新名称升级后务必检查各段最终生效值是否符合预期。六、取值建议与注意事项结合参数语义与实现逻辑给出如下实操建议调试期调大、稳定期调小刚完成对焦、ROI 对齐或换模型时建议设置7~15天甚至临时设为0永久保留方便回溯问题样本识别稳定后改回默认3即可。警惕0的副作用0 永久保留意味着图片只增不减。长期运行会持续占用 SD 卡空间、加剧闪存写入磨损仅在明确需要长期追溯时使用并配合定期手动备份。与RawImagesRetention配合规划空间ROI 小图单张仅几十 KB但每小时一张、一天 24 张累加起来仍会增长。可按原图保留更短、ROI 图保留更长的策略分层配置兼顾排查能力与存储寿命。确认位置参数已启用若图片从未生成先检查ROIImagesLocation是否已取消注释——按源码逻辑未设置位置时isLogImage为 false整个图片记录与清理链路都不会执行。七、进一步阅读参数定义原文Analog/ROIImagesRetention.md、Digits/ROIImagesRetention.md完整配置模板sd-card/config/config.ini、sd-card/demo/config.ini清理与保存实现ClassFlowImage.cpp、ClassFlowCNNGeneral.cpp原图保留参数对照参考TakeImage/RawImagesRetention.mdWeb 界面表单edit_config_template.html、readconfigparam.js配置迁移逻辑main.cpp【免费下载链接】AI-on-the-edge-deviceEasy to use device for connecting old measuring units (water, power, gas, ...) to the digital world项目地址: https://gitcode.com/GitHub_Trending/ai/AI-on-the-edge-device创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询