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

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

前言


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




背景


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

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中示例的逻辑进行判断统计
相关文章
|
2月前
|
数据采集 Java Python
优化数据的抓取规则:减少无效请求
本文详细介绍了一种高效抓取贝壳等二手房平台房价信息的方法,重点在于过滤无效链接和减少冗余请求。文章首先分析了目标数据和平台特点,然后提出了URL过滤、分页控制、动态设置User-Agent和Cookies、代理IP轮换及多线程优化等策略。最后,提供了一个结合代理IP技术的Python爬虫代码示例,展示了如何具体实现上述优化措施,从而显著提升数据抓取的稳定性和效率。
73 26
优化数据的抓取规则:减少无效请求
|
Java
策略枚举:消除在项目里大批量使用if-else的优雅姿势
可以替换大量的if-else语句,且具备较好的可读性与扩展性,同时能显得轻量化,我比较推荐使用策略枚举来消除if-else。
117 0
|
JavaScript 安全 前端开发
修改MD5值:降低iOS应用程序关联性判定,减少拒绝风险
ios应用程序存储一些图片,资源,配置信息,甚至敏感数据如用户信息、证书、私钥等。这些数据怎么保护呢?可以使用iOS提供的Keychain来保护敏感数据,也可以使用加密技术,或者使用Ipa Guard 来弱化文件名称含义,增加破解难度。实现保护iOS app应用程序不被反编译、破解或篡改。
|
设计模式 JavaScript 前端开发
如何优雅的消除系统重复代码
在程序猿的日常工作中,不仅要跟随业务侧的发展不断开发新的需求,同时也需要维护老的已有平台。无论是开发新需求还是维护老系统,我们都会遇到同样一个问题,系统中总是充斥着很多重复的代码。
29562 11
如何优雅的消除系统重复代码
GoogleGuava - 第 1 章 基本工具——Throwables:简化异常和错误的传播与检查
GoogleGuava - 第 1 章 基本工具——Throwables:简化异常和错误的传播与检查
153 0
GoogleGuava - 第 1 章 基本工具——Throwables:简化异常和错误的传播与检查
|
测试技术
测试应该如何处理跟开发之间的“敏感”关系?
测试从业者,打交道最多的就是开发,而测试和开发之间的关系在行业内被称为‘天敌’。最近部门内有些产品线成员和开发同事在协作之间也是双方抱怨不断,为此形成此文,算是给大家一些思路参考。 **作为测试工程师,你知道要怎么更好地来处理跟开发之间的关系么?其实对于存在这种所谓的‘敌对’关系,并不难理解。
1406 0
|
数据可视化 数据挖掘
差异分析③
统计差异基因数目 tfit
1120 0
|
数据挖掘 Serverless
差异分析②
样品的无监督聚类 检查基因表达分析最重要的探索性策略之一是多维定标(MDS)图或类似的图。该图以无监督的方式显示了样本之间的相似性和不相似性,以便人们可以了解在进行正式测试之前可以检测差异表达的程度。
1152 0
下一篇
无影云桌面