我正在创建简化的对象,以便在使用opencv进行可视化的tensorflow中轻松计数。我想连续不断地单独更新每个对象的质心(中心)位置。同时保留将新对象添加到列表的功能。
我尝试更新下面代码中显示的质心。
for index, value in enumerate(classes[0]):
if scores[0, index] > 0.5:
current_count = [category_index.get(value)]
if len(current_count) > total_count:
total_count = len(current_count)
print('Total count = ', total_count)
b = boxes[0]
for i in range(b.shape[0]):
# top right
y1 = b[i, 0] * height
x1 = b[i, 1] * width
# bottom left
y2 = b[i, 2] * height
x2 = b[i, 3] * width
centx = int(x1 + ((x2-x1)/2))
centy = int(y1 + ((y2-y1)/2))
centroid = (centx, centy)
p1 = objclass.ObjClass(i, centroid, False, False)
if len(objects) != 0 and len(objects) == total_count:
for idx, item in enumerate(objects):
if i == objects[idx].num:
objects[idx].centroid = p1.centroid
break
elif i > len(objects) and i != objects[idx].num:
objects.append(p1)
elif len(objects) == 0:
objects.append(p1)
break
有趣的是,如果我删除行
elif i > len(objects) and i != objects[idx].num:
objects.append(p1)
列表中的单个对象将更新其质心,尽管它会更新到检测到的其他对象的初始位置。
类代码
class ObjClass():
def __init__(self, num, centroid, incount, outcount):
self.num = num
self.centroid = centroid
self.incount = incount
self.outcount = outcount
此代码无法按预期工作,无论质心保持相同的对象数量如何(质心保持在首次检测到对象时的状态)。
输出是这样的:
for idx, item in enumerate(objects):
print(objects[idx].num, objects[idx].centroid)
重复此输出,仅显示0和2。
答案 0 :(得分:0)
虽然这不能直接回答我遇到的特定代码问题。我已经发布了tensorflow不会在帧之间跟踪对象,这意味着如果屏幕上有多个对象,则代码仅会将随机检测到的对象的质心应用于已检测到的对象。它无法知道是否有错。
此记录为HERE