Фильтрация возвращаемых значений переменной большинством голосов - PullRequest
0 голосов
/ 26 марта 2019

Добрый день, я новичок в python, и в настоящее время я пытаюсь работать с моим назначением обнаружения объектов.В настоящее время я работаю с фильтрами и веду подсчет обнаруженных объектов.Например, у меня есть 3 возвращаемые переменные, такие как блоки (появившиеся ограничивающие рамки для подсчета), classId и достоверность (для определения классов объектов иего вероятность) с

print (len(boxes),classId,confidence)

и я получил такие значения (1 секунда для 50+ значений)

(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 и trust (среднее значение для этого), чтобы исключить случайные колебания.Вот часть моих кодов,

        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))

Вот что я пытаюсь сделать:

Если classId для Sunbear появлялся 5 или более раз непрерывно , он будет печатать возвращенные значения и счетчик будет сбрасываться обратно до 0, иначе он будет продолжать сбрасываться в ноль до тех пор, пока не будет выполнено условие.

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

но каким-то образом возвращаемые значения являютсято же самое внутри или вне цикла.Это правильный способ сделать это, или есть более эффективные способы сделать это.Пожалуйста, потерпите меня, я новичок в программировании, заранее спасибо.

...