早上好,我是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
,但是在循环内或循环外返回的值是相同的。这是执行此操作的正确方法,还是有一些更有效的方法来执行此操作。请多多包涵,我是编程新手,谢谢。