我使用暗流和yolov2进行目标检测,并使用计算机视觉绘制边界框和静态线。 我正在处理一个问题,当一个边界框与一条静态线相交时,程序应该生成一个计数。你知道吗
例如:如果一辆车通过这条线,计数应该增加1,这就是我想象的我的程序应该工作的方式。你知道吗
问题:当计数被生成时,计数是连续的,如果一辆车经过这条线,程序会一直计数,直到这辆车经过这条线的另一边。你知道吗
我试图通过简单的“如果”条件的例子来实现:如果检测到的对象点像(顶部x,顶部y)(底部x,底部y),计数应该增加,但点是动态的,因为检测是逐帧发生的,计数不准确。你知道吗
这是直线坐标,我相应地调整了直线。你知道吗
line = [(0, 430), (1200, 430)]
这是我用于交叉点的函数
def intersect(A,B,C,D):
return ccw(A,C,D) != ccw(B,C,D) and ccw(A,B,C) != ccw(A,B,D)
def ccw(A,B,C):
return (C[1]-A[1]) * (B[0]-A[0]) > (B[1]-A[1]) * (C[0]-A[0])
在这个函数的帮助下,我从一篇中等规模的文章中得到了这个函数,我试图生成边界框,并在这个函数本身中暗示intersect函数。你知道吗
def boxing(original_img, predictions):
newImage = np.copy(original_img)
for result in predictions:
#predictions = mot_tracker.update(result
top_x = result['topleft']['x']
top_y = result['topleft']['y']
btm_x = result['bottomright']['x']
btm_y = result['bottomright']['y']
#label = result['label'][1]
p0 = top_x,top_y
#p1 = btm_x,btm_y
p1 = btm_x,btm_y
#print(p0,p1)
#print(line[0],line[1])
def counter_catch():
if intersect(p0,p1,line[0],line[1]):
global counter
counter += 1
print(counter)
counter_catch()
cv2.putText(newImage, str(counter), (100,200), cv2.FONT_HERSHEY_DUPLEX, 5.0, (0, 255, 255), 5)
cords = (top_x,top_y,btm_x,btm_y)
cx,cy = ((top_x+btm_x)//2, (top_y+btm_y)//2)
#print(counter)
cv2.putText(newImage, "+",(cx,cy),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
confidence = result['confidence']
label = result['label'] + " " + str(round(confidence, 3))
if confidence > 0.5:
newImage = cv2.rectangle(newImage, (top_x, top_y), (btm_x, btm_y), (255,0,0),3)
newImage = cv2.putText(newImage, label, (top_x, top_y-5), cv2.FONT_HERSHEY_COMPLEX_SMALL , 0.8, (0, 230, 0), 1, cv2.LINE_AA)
return newImage
在视频上应用模型后,检测到的对象将具有检测线x1、y1、x2、y2的坐标。你知道吗
像这样
[{'label': 'person', 'confidence': 0.49965367, 'topleft': {'x': 96, 'y': 270}, 'bottomright': {'x': 136, 'y': 367}},
在这个帮助下,我试图创建一个计数器。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐