闪烁与常亮的符号状态判断机制(状态机算法)

背景说明

        在视觉项目中,经常要判断目标的状态,例如:符号的不同频率闪烁、常亮等。然而常规的视觉算法例如YOLO,仅仅只能获取当前帧是否存在该符号,而无法对于符号状态进行判断,然而重新写一个基于时序的卷积神经网络又未免太过了,而且效果也往往低于预期。

        所以笔者通过借鉴操作系统的状态转换策略,想了一个符号状态的状态机转换算法。

算法难点说明

对于该算法的主要难点如下

 对于以YOLO为例的视觉检测算法传递的只有当前帧的符号类别列表,而且是非常快速的传递,状态判断算法很难直接融入到主程序当中,只能进行模块解耦。

对于视觉检测算法,必然会存在检测错误的情况(误检、漏检,错检),此时就会产生“噪声”,我们的状态判断算法必须要有足够的抗噪能力,然而对于如何进行抗噪又是一大难题。

状态机算法说明

 误识别情况说明:

  • 目标符号被短暂地识别为其他符号
  • 其他符号被短暂地识别为目标符号

图的说明
对于所有的符号,定义模型识别到该符号记为positive,没有识别到该符号记为negative。(这里单纯指的是识别的结果)

符号共有4种状态:状态0、状态1、状态2、状态3。

3种表现形式:暗、常亮、闪烁。

所有的符号初始化为状态0、暗。

对于状态0的符号:

  • 连续识别到该符号3次以上(即positive三次以上),切换为状态1,并记为常亮。
  • 没有识别到该符号,保持状态不变

对于状态1的符号:

  • 连续没有识别到该符号3次以上(即negative三次以上),切换为状态2。
  • 连续识别到该符号,保持状态不变

对于状态2的符号:

  • 连续识别到该符号3次以上(即positive三次以上),切换为状态3,并记为闪烁。
  • 连续没有识别到该符号3次以上(即negative四次以上),切换为状态0,并记为暗。
  • 停留在状态2时长超过2s将会进行状态的坍缩,会坍缩到上一个状态,有可能是状态2,也有可能是状态3

对于状态3的符号:

  • 连续没有识别到该符号3次以上(即negative三次以上),切换为状态2。

  • 连续识别到该符号5次以上(即positive五次以上),切换为状态1,并记为常亮

闪烁频率判断算法

对于闪烁频率的判断,由于检测的频率和性能的问题,实际上比较复杂,算法中采用的是100ms收集一次识别结果的方式。

例如:

对于400ms闪烁的情况:

  • 理想情况:0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 ……
  • 实际情况:0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 ……

对于200ms闪烁的情况:

  • 理想情况:0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 ……
  • 实际情况:0 0 0 1 0 0 1 1 1 0 0 1 1 0 1 1 1 0 1 1 ……

下图是对于闪烁频率判断的具体操作方式

代码示例

下列为状态机与频率计算算法

class Label:#初始化def __init__(self):self.frequency = 0        #记录闪烁频率self.isLight = False      #常亮标志self.isFlashing = False   #闪烁标志self.id = 0               #符号IDself.status = 0           #临时状态self.posCount = 0         #检测到1计数self.negCount = 0         #检测到0计数self.start_time = 0       #用以判断频率self.flag_time = 0        #用以判断是否是0之后的第一个1#计数次数def count(self,flag):if(flag == 0):self.negCount = self.negCount + 1self.posCount = 0self.flag_time = 0#检测到该符号if(flag == 1):#0之后的第一个1if(self.flag_time == 0):self.flag_time = 1temp_time = time.time()self.frequency = float(temp_time - self.start_time)*1000 #单位msself.start_time = temp_timeself.posCount = self.posCount + 1self.negCount = 0#刷新状态          def refresh(self):#详情请见confluence常亮和闪烁状态切换页面if(self.status == 0):#连续positive5次---->状态1,常亮if(self.posCount >= 5):self.isLight = Trueself.isFlashing = Falseself.status = 1self.posCount = 0self.negCount = 0elif(self.status == 1):#当处于状态1时,negative3次---->状态2,常亮if(self.negCount >= 3):self.status = 2self.posCount = 0self.negCount = 0elif(self.status == 2):#当处于状态2时,negative10次---->状态0,暗if(self.negCount >= 10):self.status = 0self.isFlashing = Falseself.isLight = Falseself.posCount = 0self.negCount = 0#当处于状态2时,positive4次---->状态3,闪烁if(self.posCount >= 4):self.status = 3self.isFlashing = Trueself.isLight = Falseself.posCount = 0self.negCount = 0elif(self.status == 3):#当处于状态3时,negative4次---->状态2,闪烁if(self.negCount >= 4):self.status = 2self.posCount = 0self.negCount = 0#当处于状态3时,posCount10次---->状态1,常亮if(self.posCount >= 10):self.status = 1self.isLight = Trueself.isFlashing = Falseself.posCount = 0self.negCount = 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/851859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DDD领域应用理论实践分析回顾

目录 一、DDD的重要性 (一)拥抱互联网黑话(抓痛点、谈愿景、搞方法论) (二)DDD真的重要吗? 二、领域驱动设计DDD在B端营销系统的实践 (一)设计落地步骤 &#xff0…

Ansys Mechanical|使用Trace Mapping建立PCB板的有限元模型

Trace Mapping需要使用ECAD的方法 传统方法 vs ECAD方法 传统方法既繁琐又费时。以下是一些数据: 导出电路板布局的step文件大约需要30分钟。 导入Ansys SpaceClaim中大约需要10分钟。 进行布尔运算和共享拓扑操作大约需要24小时甚至更久。 而ECAD方法更加快速且…

剧本新纪元:探索短剧系统的魔力

在现代社会,随着科技的迅猛进步和生活节奏的不断加快,传统的长篇电视剧和电影已不能完全满足所有人的需求。短剧,由于其简短、快速、直接的特性,正在逐步成为一种文化新趋势。短剧系统正是这一趋势的典型代表,它以独特…

自己用pip下载好模块啦,但是在pycharm里面不显示?

问题: 今天在cmd里面用pip命令安装第三方模块,最后用pip list 命令发现已经成功安装,但是在pycharm里面用该模块的时候,还是爆红,显示没有该库 。 解决方法: 第一种(项目刚创建)&am…

如何学习软件测试,并成功找到工作

在IT行业日益繁荣的今天,软件测试作为确保软件质量的关键环节,越来越受到企业的重视。对于初入职场的小白来说,掌握软件测试技能不仅能够帮助他们快速适应工作,还能为未来的职业发展奠定坚实的基础。本文将为职场小白推荐学习软件…

NVIDIA DeepStream SDK 说明及链接

NVIDIA DeepStream SDK DeepStream 的多平台支持为您提供了一种更快、更简单的方式来开发视觉AI应用程序和服务。您甚至可以在本地、边缘和云中部署它们,只需单击一个按钮。 开始 在Launchpad上试用 什么是 NVIDIA DeepStream? NVIDIA 的 DeepStream …

公交车载视频监控系统解决方案

公交车载视频监控系统基于iVMS-7200移动视频监控管理平台,通过3G/4G网络接入车载前端,实现实时监控、录像回放、GIS地图定位、轨迹回放、设备状态查询、紧急报警等功能。 车载前端包含车载硬盘录像机(简称车载DVR或MDVR)、车载专用摄像机、车载LCD显示屏…

50.Python-web框架-Django中引入静态的bootstrap样式

目录 Bootstrap 官网 特性 下载 在线样例 Bootstrap 入门 Bootstrap v5 中文文档 v5.3 | Bootstrap 中文网 在django中使用bootstrap 新建static\bootstrap5目录,解压后的Bootstrap文件,拷贝项目里就好。 在template文件里引用css文…

k8s metrics-server服务监控pod 的 cpu、内存

项目场景: 需要开启指标服务,依据pod 的 cpu、内存使用率进行自动的扩容或缩容 pod 的数量 解决方案: 下载 metrics-server 组件配置文件: wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/…

植物大战僵尸杂交版 MacBook 苹果电脑下载安装详细教程

最近老是看到别人玩植物大战僵尸杂交版,可是找了一圈发现都是PC版本的,原来游戏作者只做了一个PC版本,还好最终没有放弃终于在 Mac 上安装上了植物大战僵尸杂交版 版本是 2.0.88 真的蛮好玩的就是关卡有亿点点难,我最爱玩无尽模式…

一站式解决ComfyUI安装、调试和界面操作,附安装包 C001

点击打开以上网页,页面往下拉,找到“Direct link to download”,点击即可下载官方安装包。 下载完成后,将安装包移动到你想要安装的地方,解压(推荐使用7-Zip),然后点击“run_nvidia_…

无需插件脚本,IDEA配置多服务一键启动

分享本教程的初衷是本人在本地调试时业务场景中需要调用多个服务,并且每次为了找到需要启动的服务花了很多不必要的时间,我相信很多同为开发的小伙伴也有和我一样的困扰。但是学会这招后多个服务需要同时启动时仅需一键即可搞定。接下来让我们一步步设置…

【PasteSpider】的集群组件【PasteCluster】(让你的项目快速支持集群模式)的思路及实现(含源码)

PasteSpider是什么? 一款使用.net编写的开源的Linux容器部署助手,支持一键发布,平滑升级,自动伸缩,Key-Value配置,项目网关,环境隔离,运行报表,差量升级,私有仓库&…

物联网网关和飞鸟物联平台如何助力其实现智能化升级,提升生产效率-天拓四方

随着工业4.0时代的到来,物联网技术逐渐成为推动工业转型升级的关键力量。物联网网关作为连接工业设备与网络的核心枢纽,在工业自动化、数据收集与分析等方面发挥着越来越重要的作用。本案例将围绕一家知名制造企业,展示物联网网关和飞鸟物联平…

提升消费者满意度的五星售后服务认证

在当今竞争激烈的市场环境中,消费者满意度是企业取得成功的重要因素。五星售后服务认证作为一种权威性认证,可以显著提高消费者满意度,增强企业的竞争力。本文将从四个方面探讨五星售后服务认证如何提高消费者满意度。 五星售后服务认证是由国…

SpringCash

文章目录 简介引入依赖application.yml配置常用注解使用1. 启动类添加注解使用方法上添加注解 简介 Spring Cache是一个框架,实现了基于注解的缓存功能底层可以使用EHCache、Caffeine、Redis实现缓存。 注解一般放在Controller的方法上,CachePut 注解一…

高精度定位技术的必要性与实际应用

在当今社会,随着科技的飞速发展,高精度精准定位技术已成为一项不可或缺的基础技术,其应用范围涉及军事、航空、智能交通、无人驾驶、智慧城市建设等众多领域。高精度精准定位不仅为人们的日常生活带来极大便利,还对提升国家的科技…

鸿蒙轻内核A核源码分析系列六 MMU协处理器(1)

在前面系列分析虚实映射时,涉及到了一些MMU协处理器与相关的汇编代码没有深入讲解。本文来专门分析那些协处理器与汇编代码。 本文中所涉及的源码,以OpenHarmony LiteOS-A内核为例,均可以在开源站点 https://gitee.com/openharmony/kernel_l…

运行mvn命令打包项目jar包报错?“Fatal error compiling: 无效的目标发行版: 19 ”, 让我来看看~

最近写实验,要打包项目,但是不管是在cmd运行“mvn clean package -Dmaven.test.skiptrue”命令,还是在idea上去操作,都出现了这样的一个错误: [EROR] Failed to exeoute goal org.apache.maven.plugins:maven-comnpile…

倾斜摄影优化之重:轻量化

老子云倾斜摄影轻量化 1、支持全网多端流畅展示 2、支持私有化部署 3、一键轻量化G级模型 4、多种精度选择 5、支持二次开发 (1)、压缩可达98%以上 (2)、多种精度任选:普清、标清、高清、超清 (3&am…