当前位置: 首页 > news >正文

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

文章目录

  • 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.lryc.cn/news/497825.html

相关文章:

  • 【QT】一个简单的串口通信小工具(QSerialPort实现)
  • 24/12/5 算法笔记<强化学习> doubleDQN,duelingDQN
  • 道可云人工智能元宇宙每日资讯|全国工商联人工智能委员会成立会议在南京举办
  • MySQL数据库(2)-检查安装与密码重置
  • C# 13 中的新增功能
  • 视频自学笔记
  • easyexcel 导出日期格式化
  • 02-开发环境搭建
  • DBeaver导入csv到数据库
  • React第十一节 组件之间通讯之发布订阅模式(自定义发布订阅器)
  • tcpreplay/tcpdump-重放网络流量/捕获、过滤和分析数据包
  • ASPICE评估体系概览:对象、范围与参考标准解析
  • 力扣92.反转链表Ⅱ
  • Java设计模式之适配器模式:深入JDK源码探秘Set类
  • java八股-流量封控系统
  • 【WebRTC】Android SDK使用教学
  • 基于单片机的智能晾衣控制系统的设计与实现
  • 多人聊天室 NIO模型实现
  • 三、使用 Maven:命令行环境
  • Blender导入下载好的fbx模型像的骨骼像针戳/像刺猬
  • 如何高效搭建智能BI数据分析系统
  • 第 6 章 Java 并发包中锁原理剖析Part one
  • 使用 Canvas 绘制一个镂空的圆形区域
  • 【Notepad++】---设置背景为护眼色(豆沙绿)最新最详细
  • 2024 数学建模国一经验分享
  • 安全见闻2
  • Web游戏开发指南:在 Phaser.js 中读取和管理游戏手柄输入
  • 代码随想录32 动态规划理论基础,509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯。
  • 记录一个Flutter 3.24单元测试点击事件bug
  • 使用Python将 word文档转pdf文档