在每个迭代步骤中,我都有一个p1来描述每个人的位置。p1是元组,使得p1 =(x_point,y_point),p1描述了帧i中的人的位置。
基于这篇文章,https://www.pyimagesearch.com/2015/09/21/opencv-track-object-movement/在95到109行之间。我试图修改95到109行以测量距离一个人在运动方面的差异。
这个问题可以按照下面的代码重现,假设我每次迭代都得到p1(原来p1是SORT Tracking提供的值)。因为我正在处理大约29 fps的视频以及多个对象。根据以下代码(内部循环j),它可能会提供如下图像的错误结果?
编辑:在我看来,内循环无法处理多个对象检测作为提供的样本图像。
谢谢你的时间。
from collections import deque from random import randint import numpy as np
(direction_x, direction_y) = (0, 0) direction = "" points_list = deque(maxlen=32)
def sample_of_p1(): return (randint(0, 100),randint(0, 100))
for i in range(100): p1 = sample_of_p1() points_list.appendleft(p1)
for j in range(1, len(points_list)):
if(i >= 10):
direction_x = points_list[-10][0] - points_list[j][0]
direction_y = points_list[-10][1] - points_list[j][1]
if np.abs(direction_x) > 0:
dirx = "Right" if np.sign(direction_x) == 1 else "Left"
if np.abs(direction_y) > 0:
diry = "Top" if np.sign(direction_y) == 1 else "Bottom"
if dirx != "" and diry != "":
direction = "{} {}".format(diry, dirx)
else:
direction = dirx if dirx != "" else diry
else:
continue
代码似乎正确计算,但您可以进行一些优化。如果i> = 10,你可以把条件放在j的循环之外,这是一个小优化,但更优雅。
if i >= 10: for j in range(1, len(points_list)): //some code else: continue 此外,您没有在条件之前定义dirx和diry,因此如果不沿一个轴移动,程序可能会抛出异常。在文章中,它们在第109行初始化。
最后,条件np.abs(direction_x)> 0似乎有点松散。通常,当您想要定义一个动作时,您需要设置一个最小值(文章中的第20行,第113行)以捕捉重要的动作,而不仅仅是颤抖或可忽略的动作。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。