过滤具有多数投票的返回值变量

时间:2019-03-26 02:35:46

标签: python object-detection

早上好,我是python的新手,目前我正在尝试处理对象检测任务。我目前正在使用的功能是对已检测到的对象进行过滤和计数。例如,我有3个返回变量,例如 box (出现的边界框进行计数), classId 信心(以确定对象类别及其概率)

print (len(boxes),classId,confidence)

我得到了这样的值(50多个值需要1秒)

(1, 'Sunbear', 0.91407496)

(1, 'Sunbear', 0.93277943)

(1, 'Sunbear', 0.8578589)

(2, 'Sunbear', 0.29979056)

(1, 'Sunbear', 0.8787856)

(2, 'Sunbear', 0.32679325)

(1, 'Sunbear', 0.79356045)

这就是我想要做的:

取每10个(或更多)返回的框的值,classId和可信度(此平均值)出现的多数值,以消除随机波动。这是我的代码的一部分,

        classIds = []
        confidences = []
        boxes = []
        for out in outs:
            for detection in out:
                scores = detection[5:]
                classId = np.argmax(scores)
                confidence = scores[classId]
                if confidence > confThreshold:
                    center_x = int(detection[0] * frameWidth)
                    center_y = int(detection[1] * frameHeight)
                    width = int(detection[2] * frameWidth)
                    height = int(detection[3] * frameHeight)
                    left = int(center_x - width / 2)
                    top = int(center_y - height / 2)
                    classIds.append(classId)
                    confidences.append(float(confidence))
                    boxes.append([left, top, width, height])
                    if classId ==0:
                        classId = 'Asian_elephant'
                    elif classId ==1:
                        classId = 'Sunbear'
                    elif classId ==2:
                        classId = 'Tapir'
                    #print ()
                    #logging.debug('%s %s %s', len(boxes), confidence,classId)
                    #logging.debug(boxes)
                    print ((len(boxes),classId,confidence))

这是我要尝试的操作:

如果'Sunbear'的classId连续出现5次或更多次 ,它将打印返回的值,并且计数将重置为0,否则它将一直重置为零,直到满足条件为止

                    count=0
                    while classId=='Sunbear':  
                        count+=1
                        if count>=5:
                            print ((len(boxes),classId,confidence))
                            break

,但是在循环内或循环外返回的值是相同的。这是执行此操作的正确方法,还是有一些更有效的方法来执行此操作。请多多包涵,我是编程新手,谢谢。

0 个答案:

没有答案