建立统计过程中排除异常干扰机制

简介: 建立统计过程中排除异常干扰机制

前言


  经过前面的物品检测与统计,我们已经初步实现了该功能:如何对生产线上的物品进行检测并统计? 但是在文末段提出了异常分析,本篇文章将专门解决提出的异常分析。




背景


  在生产过程中,理想的检测结果应该是:摄像头下的画面存在目标物时,能够正确检测出该目标物的颜色并对该类别物体的总数进行统计。由于一些不可控的情况真实会存在,虽然概率很低,但是我们严格要求自己完成任务。在这里我将建立一种机制进行剔除异常干扰值。

image.png


理想情况


  在理想的检测算法下物体的初始状态在图像内有如下几种情况:


相离


  这种情况是最为理想的情况,此时的初始值与检测值相同【详见:如何对生产线上的物品进行检测并统计?



相切


  根据上图所示相切存在两种情况,分别是刚进入图像内和刚好要离开图像内。在刚进入图像内时,此时的初始值刚好起到作用了(原数 = 检测数 = 0);在刚要离开图像内时,由于初始值为0,此时存在一种情况:检测过程中停电了,物体刚要离开图像边界时停下了,当设备启动后,会对物品重复统计 我们需要对次进行剔除。


  针对这种情况,应在重启设备的时候,保证图像内无任何物品干扰



相交&包含


  这两种情况在初始值为0的情况下都可以检测并统计到,对检测统计无影响。




非理想情况


  非理想情况下,我们在这里只考虑“误差”这种情况如下:在检测物品的颜色的过程中,出现了某短暂的某一帧检测结果出现偏差,但随之后的检测结果都为正确的。


  例如检测结果为 000100000 :【这是代表没有物品在传送带上,中间出现的1表示出现误检】;同理在一串1中出现了某个非1的数字也是属于异常数字。当然了这个数字可能出现一个或多个,那么我们需要建立一种机制进行规避掉这种情况。

image.png



demo代码


import random
import time
import cv2
# 各类别的总数
Lab1 = 0
Lab2 = 0
Lab3 = 0
Lab4 = 0
Lab5 = 0
lablist1 = []
lablist2 = []
lablist3 = []
lablist4 = []
lablist5 = []
RawNum = 0  # 原始数据
while 1:
    frame = cv2.imread("apple.jpg")
    a = random.randint(0, 10)
    if a == 6 and a == 7 and a == 8 and a == 9 and a == 10 and a == 0:
        RawNum = a
        lablist1 = []
        lablist2 = []
        lablist3 = []
        lablist4 = []
        lablist5 = []
    else:
        RawNum = a
        if a == 1:
            lablist1.append(a)
            if len(lablist1) == 3 and lablist1[0] == lablist1[1] == lablist1[2] == 1:
                Lab1 += 1
                lablist1 = []
        elif a == 2:
            lablist2.append(a)
            if len(lablist2) == 3 and lablist2[0] == lablist2[1] == lablist2[2] == 2:
                Lab2 += 1
                lablist2 = []
        elif a == 3:
            lablist3.append(a)
            if len(lablist3) == 3 and lablist3[0] == lablist3[1] == lablist3[2] == 3:
                Lab3 += 1
                lablist3 = []
        elif a == 4:
            lablist4.append(a)
            if len(lablist4) == 3 and lablist4[0] == lablist4[1] == lablist4[2] == 4:
                Lab4 += 1
                lablist4 = []
        elif a == 5:
            lablist5.append(a)
            if len(lablist5) == 3 and lablist5[0] == lablist5[1] == lablist5[2] == 5:
                Lab5 += 1
                lablist5 = []
    Text1 = "Yellow-Num:%s " % Lab1
    Text2 = "Red-Num:%s " % Lab2
    Text3 = "Green-Num:%s " % Lab3
    Text4 = "black-Num:%s " % Lab4
    Text5 = "blue-Num:%s " % Lab5
    Text = str(a)
    cv2.putText(frame, Text1, (5, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)
    cv2.putText(frame, Text2, (5, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)
    cv2.putText(frame, Text3, (5, 60), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)
    cv2.putText(frame, Text4, (5, 80), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)
    cv2.putText(frame, Text5, (5, 100), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)
    cv2.putText(frame, Text, (5, 140), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)
    cv2.imshow("video", frame)
    key = cv2.waitKey(1) & 0xFF
    if key == 27:
        break



结语


  今天就先写到这里,总结一下的机制的核心有如下的两个:


  1. 启动设备的时候,需保证图像内无任何物品干扰;


  1. 在检测统计代码中进行如上demo中示例的逻辑进行判断统计
相关文章
|
JSON Dart Android开发
Flutter 2024: Impeller引擎引领渲染新纪元
Flutter 2024以Impeller引擎引领渲染新时代,全面提升性能与流畅度。Impeller已在iOS及Android(支持Vulkan/OpenGL)全面部署,Material 3集成深化视觉体验,多视图支持增强复杂UI管理。Dart 3.2与3.4版本迭代优化语言特性与性能,引入宏编程简化JSON处理。桌面与Web端持续优化,深化平台适配。
834 14
|
存储 固态存储 索引
DeepSeek 3FS解读与源码分析(3):Storage模块解读
2025年2月28日,DeepSeek 正式开源其颠覆性文件系统Fire-Flyer 3FS(以下简称3FS),重新定义了分布式存储的性能边界。本文将结合代码和design_notes 对storage部分进行分析和探讨。
|
监控 Java 数据库连接
详解Spring Batch:在Spring Boot中实现高效批处理
详解Spring Batch:在Spring Boot中实现高效批处理
2927 12
|
弹性计算 安全 网络安全
转发路由器 Transit Router(TR):实现企业级互联网络的灵活与可靠
转发路由器 Transit Router(简称“TR”)是地域范围内企业级核心转发网元,可为用户转发同地域或不同地域的网络实例间的流量,并支持在地域内定义灵活的互通、隔离、引流策略,帮助用户打造一张灵活、可靠、大规模的企业级互联网络。通过搭配云数据传输(简称“CDT”),用户可实现跨地域连接场景数据传输按流量计费的能力。
|
缓存 Java 关系型数据库
springboot事务-失效的情况
本文总结了常见的事务失效情况及解决方法,主要包括: 1. **事务注解失效**:`@Transaction`必须作用于`public`方法,且需被Spring容器管理。 2. **数据库引擎问题**:MyISAM不支持事务,应使用InnoDB。 3. **异常处理不当**:异常被捕获未抛出或不在默认捕获范围内。 4. **传播行为设置**:如设置为`Propagation.NOT_SUPPORTED`或`Propagation.REQUIRES_NEW`可能导致事务失效。 5. **类内方法调用**:同一类中方法调用导致事务失效,需通过代理类或其他方式解决。
673 0
|
Web App开发 监控 算法
详解 WebRTC 高音质低延时的背后 — AGC(自动增益控制)
本文将结合实例全面解析 WebRTC AGC 的基本框架,一起探索其基本原理、模式的差异、存在的问题以及优化方向。
详解 WebRTC 高音质低延时的背后 — AGC(自动增益控制)
|
Java
java基础 - 个人笔记
java基础 - 个人笔记
650 2
|
存储 缓存 监控
中间件Cache-Aside策略缓存未命中
【5月更文挑战第10天】
413 7
|
存储 机器学习/深度学习 人工智能
【2023云栖】黄博远:阿里云人工智能平台PAI年度发布
本文根据2023云栖大会阿里云计算平台事业部资深产品专家、阿里云人工智能平台PAI产品负责人-黄博远演讲实录整理而成,演讲主题:阿里云人工智能平台PAI年度发布
【2023云栖】黄博远:阿里云人工智能平台PAI年度发布