丢垃圾视频时间检测 -- 基于状态机的实现

文章目录

  • Overview
  • Key Points
  • Pseudo-code

Overview

需要考虑的方面

  • 状态定义和转换条件
  • 时序约束
  • 空间约束
  • 异常处理

状态机的设计需要考虑的场景:

  • 没有人
  • 人进入
  • 人携带垃圾
  • 人离开但垃圾留下
  • 垃圾消失
  • 异常情况(检测失败、多人多垃圾等)

Key Points

状态设计

  • NO_PERSON: 初始状态,场景为空
  • PERSON_ONLY: 检测到人
  • PERSON_WITH_LITTER: 人和垃圾共同出现
  • LITTER_ONLY: 人离开,垃圾留下

状态转移路径

NO_PERSON => PERSON_ONLY => PERSON_WITH_LITTER => LITTER_ONLY

状态转移条件

  • NO_PERSON -> PERSON_ONLY: 检测到人
  • PERSON_ONLY -> NO_PERSON: 人消失
  • PERSON_ONLY -> PERSON_WITH_LITTER: 人靠近垃圾
  • PERSON_WITH_LITTER -> LITTER_ONLY: 人离开但垃圾留下
  • PERSON_WITH_LITTER -> PERSON_ONLY: 垃圾消失
  • LITTER_ONLY -> NO_PERSON: 垃圾消失

约束条件

  • 空间约束:人和垃圾的距离阈值
  • 时间约束:状态持续时间的上下限
  • 检测约束:目标检测的置信度阈值
  • 异常处理
    • 状态超时重置
      • PERSON_WITH_LITTER 的持续时间过长,截断当前帧为结束帧
    • 多目标情况处理
      • 遍历每个 (Person - Litter) Pair, 找到距离最近的 Pair.

Pseudo-code

定义 状态枚举:NO_PERSON = 0        # 场景中没有人和垃圾PERSON_ONLY = 1      # 只有人PERSON_WITH_LITTER = 2  # 人和垃圾共同出现LITTER_ONLY = 3      # 只有垃圾定义 类 LitteringDetector:属性:current_state: 当前状态frame_start: 事件开始帧frame_end: 事件结束帧state_duration: 当前状态持续时间# 配置参数MAX_DISTANCE: 人和垃圾的最大距离阈值MIN_DURATION: 状态持续最小帧数MAX_DURATION: 状态持续最大帧数方法 初始化():current_state = NO_PERSONframe_start = Noneframe_end = Nonestate_duration = 0方法 检测单帧(frame, frame_id):# 1. 目标检测persons = 检测人物()litters = 检测垃圾()# 2. 状态转移逻辑如果 current_state == NO_PERSON:如果 检测到人:转换到 PERSON_ONLY重置状态持续时间否则如果 current_state == PERSON_ONLY:如果 没有检测到人:转换到 NO_PERSON否则如果 检测到人和垃圾且距离小于阈值:转换到 PERSON_WITH_LITTER记录开始帧 frame_start否则如果 current_state == PERSON_WITH_LITTER:如果 没有检测到人但检测到垃圾:转换到 LITTER_ONLY记录结束帧 frame_end返回检测到丢垃圾事件否则如果 没有检测到垃圾:转换到 PERSON_ONLY否则如果 current_state == LITTER_ONLY:如果 没有检测到垃圾:转换到 NO_PERSON# 3. 更新状态持续时间state_duration += 1# 4. 状态超时检查如果 state_duration > MAX_DURATION:重置到初始状态 NO_PERSON返回 未检测到事件方法 检查空间关系(person, litter):计算人和垃圾的距离返回 距离 < MAX_DISTANCE

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

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

相关文章

easyexcel 导出日期格式化

1.旧版本 在新的版本中formate已经被打上废弃标记。那么不推荐使用这种方式。 2.推荐方式 推荐使用另外一种方式【 Converter 】代码如下&#xff0c;例如需要格式化到毫秒【yyyy-MM-dd HH:mm:ss SSS】级别 创建一个公共Converter import com.alibaba.excel.converters.Conv…

DApp开发前端框架选择:React还是Vue?

在区块链DApp开发中&#xff0c;前端框架的选择对用户体验和开发效率至关重要。React和Vue作为两大主流前端框架&#xff0c;各自拥有广泛的开发者基础和丰富的生态支持。那么在DApp开发中&#xff0c;该如何选择适合自己的框架呢&#xff1f;下面我们来比较一下&#xff0c;看…

6. 一分钟读懂“抽象工厂模式”

6.1 模式介绍 书接上文&#xff0c;工厂方法模式只能搞定单一产品族&#xff0c;遇到需要生产多个产品族时就歇菜了。于是&#xff0c;在需求的“花式鞭策”下&#xff0c;程序员们再次绷紧脑细胞&#xff0c;创造出了更强大的抽象工厂模式&#xff0c;让工厂一次性打包多个产品…

gulp应该怎么用,前端批量自动化替换文件

背景 最近公司准备把所有项目中用到的国际化相关的key规范化&#xff0c;原因是: 一直以来公司的app和web端 在针对相同的需求以及相同的国际化语言&#xff0c;需要设置不同的两份国际化文件&#xff0c;难以维护旧版的国际化文件中&#xff0c;存在的大量值重复&#xff0c…

UML箭线图的理解和实践

在软件开发的世界里&#xff0c;UML&#xff08;统一建模语言&#xff09;作为一种标准化的建模语言&#xff0c;扮演着举足轻重的角色。UML类图更是软件开发设计和架构过程中的核心工具&#xff0c;它不仅能帮助开发者明确系统中的类及其关系&#xff0c;还能为后续的代码实现…

hive 行转列

行转列的常规做法是&#xff0c;group bysum(if())【或count(if())】 建表: CREATE TABLE table2 (year INT,month INT,amount DOUBLE );INSERT INTO table2 (year, month, amount) VALUES(1991, 2, 1.2),(1991, 3, 1.3),(1991, 4, 1.4),(1992, 1, 2.1),(1992, 2, 2.2),(1992…

【NoSQL数据库】Hbase基本操作——数据库表的增删改查

目录 一、Hbase原理 二、HBase数据库操作 三、遇到的问题和解决方法 一、Hbase原理 HBase的数据模型&#xff1a; 行键 时间戳 列族&#xff1a;contents 列族&#xff1a;anchor 列族&#xff1a;mime “com.cnn.www” T9 Achor:cnnsi.com”CNN” T8 Achor:…

【ETCD】ETCD用户密码认证

目录 概述 特殊用户和角色 root用户 root角色 用户操作 角色操作 启用身份验证 使用etcdctl进行身份验证 使用TLS通用名称 概述 etcd 2.1中增加了身份验证功能。etcd v3 API对身份验证功能的API和用户界面进行了轻微修改&#xff0c;以更好地适应新的数据模型。本指南…

王道考研编程题总结

我还在完善中&#xff0c;边复习边完善&#xff08;这个只是根据我自身总结的&#xff09; 一、 线性表 1. 结构体 #define MaxSize 40 typedef struct{ElemType data[MaxSize]&#xff1b;int length; }SqList 2. 编程题 1. 删除最小值 题意 &#xff1a;从顺序表中删除…

Vue3技术开发,使用纯CSS3动手制作一个3D环绕的相册展示效果,支持传入任意图片.3D轮播相册的组件

主要讲述封装一个3D轮播相册的组件&#xff0c;效果图如下&#xff0c;仅仅传入一个图片的数组即可&#xff0c;效果如下&#xff1a; 使用Vue3技术开发&#xff0c;支持传入任意张数的图片。 使用方法 <template><Swiper :list"list" /> </templat…

本地运行打包好的dist

首先输入打包命令 每个人设置不一样 一般人 是npm run build如果不知道可以去package.json里去看。 打包好文件如下 命令行输入 :npm i -g http-server 进入到dist目录下输入 命令cmd 输入 http-server 成功

通过华为鲲鹏认证的软件产品如何助力信创产业

软件通过华为鲲鹏认证与信创产业有着密切的联系。鲲鹏认证是华为推动信创产业发展的一项重要举措&#xff0c;通过该认证&#xff0c;软件可以在华为的生态系统中实现更好的兼容性和性能优化&#xff0c;从而推动信创产业的全面发展和国产化替代。 鲲鹏认证的定义和重要性 鲲…

RabbitMQ介绍及安装

文章目录 一. MQ二. RabbitMQ三. RabbitMQ作用四. MQ产品对比五. 安装RabbitMQ1. 安装erlang2. 安装rabbitMQ3. 安装RabbitMQ管理界⾯4. 启动服务5. 访问界面6. 添加管理员用户7. 重新登录 一. MQ MQ( Message queue ), 从字⾯意思上看, 本质是个队列, FIFO 先⼊先出&#xff…

Vue生成类似于打卡页面

数据表格 <el-table :data"tableData" border height"calc(100vh - 240px)" :cell-style"cellFun"><el-table-column label"姓名" show-overflow-tooltip prop"name" align"center"/><el-table-co…

vscode上传本地文件到服务器

vscode上传本地文件到服务器 首先下载插件SFTP&#xff0c;我们通过ftp进行文件传输 VScode打开要传输的文件 使用快捷键 ctrlshiftP 打开搜索窗口&#xff0c;搜索SFTP 点击之后vscode文件夹下会生成对应json文件 我们编辑json信息根据远程的服务器情况填写&#xff0c;比如…

趣味数学 2.3.7 | 完全免费,无注册登录,简约纯净

趣味数学是一款完全免费的数学学习软件&#xff0c;支持安卓系统。它无需登录注册&#xff0c;界面简约纯净&#xff0c;分类详细&#xff0c;涵盖趣味数学、数学初练、应用计算、数字推理、图形推理、数字2048、题目练习和数学知识等多个分类。每个分类包含丰富的题目和关卡&a…

JavaScript 快速上手

目录 一. JavaScript 基本概念 二. JavaScript 基本语法 1. 三种引入方式 (1) 行内样式 (2) 内部样式 (3) 外部样式 2. 基础语法 (1) 变量 (2) 数据类型 (3) 运算符 3. JS 对象 (1) 数组 <1> 创建数组 <2> 数组操作 (2) 函数 <1> 普通函数 &…

php基础:文件处理2

1.文件属性 当我们在程序中操作文件时&#xff0c;可能会使用到文件的一些常见属性&#xff0c;比如文件的大小、类型、修改时间、访问时间以及权限等等。PHP 中提供了非常全面的用来获取这些属性的内置函数&#xff0c;如下表所示。 2.目录操作 新建目录&#xff1a;mkdir(路…

(二)FT2232HL调试器的驱动安装

1、FT2232HL调试器 FT2232HL调试器淘宝链接&#xff1a; http://e.tb.cn/h.TZH7byCQ1jwlqhy?tkdZo03JTjtwL ​ 2、软件下载 下载zadig-2.9.exe&#xff08;免安装&#xff09; 链接&#xff1a;https://www.filecroco.com/download-zadig/download/ ​ ​ 3、驱动安装 1…

远程debug

这里写自定义目录标题 一、首先配置idea二、配置jvm1、将刚才idea生成的jvm指令复制下来&#xff0c;就是如下内容&#xff08;注意要从你的idea中复制&#xff09;2、在粘贴之前&#xff0c;要拼接上java-jar命令&#xff0c;还有servery,suspendy命令&#xff0c;最后拼接项目…