首页 > 解决方案 > 如何使用python opencv计算两个人之间的距离?

问题描述

我正在做一个项目,我必须计算实时视频馈送中检测到的人之间的距离。为此,我遵循以下管道:

1. Detect person using MobilenetSSD Caffe model
2. Extract bouding box of the persons detected
3. Calculate the centroid of each bouding box
4. Calculate the distance between the each centroid 

下面是代码片段:

for (id1, p1), (id2, p2) in combinations(centroid_dict.items(), 2):
    ec_dist = dist.euclidean((p1[0], p1[1]), (p2[0], p2[1]))
    print("Euclidean distance {}".format(ec_dist))

在上面的代码中id1,andid2是两个人的 id。p1[0]p1[1]是人 1 的坐标 和x是人 2的坐标。我正在计算两个人的坐标和坐标之间的距离。yp2[0] p2[1]x yeuclideanxy

现在假设两个人彼此相距 2 米,为此我在代码中得到欧几里得距离250。现在让我们说如果这两个人现在离相机有点远,但他们之间的距离仍然是 2 米,在这种情况下,我得到的欧几里德距离为 343,这意味着如果他们在代码中的人之间的距离正在增加离相机有点远。

最初,我认为无论人在框架中的哪个位置,这个逻辑都可以正常工作,但看起来它不起作用。谁能帮我建议一些好的工作解决方案。请帮忙。谢谢

标签: pythonopencvcomputer-visioneuclidean-distance

解决方案


作为对您评论中问题的回答。

在此处输入图像描述

在相机视图中,您有 3d 缩短。唯一可以确定的人在视图中的位置是他们的脚在地上。

如果考虑到 3d 缩短并在视图上绘制网格,则可以通过重新计算网格和位置来很好地估计距离。


推荐阅读