【问题标题】:How to calculate distance between two person using python opencv?如何使用python opencv计算两个人之间的距离?
【发布时间】:2020-08-23 17:16:26
【问题描述】:

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

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 

下面是sn-p的代码:

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))

在上面的代码中id1id2是两个人的id。 p1[0]p1[1] 是人员 1 的 xy 坐标,p2[0] p2[1] 是人​​员 2 的 x y 坐标。我正在计算两个人的xy 坐标之间的euclidean 距离。

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

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

【问题讨论】:

  • 那是因为图像/视频是 3D 世界的 2D 投影。为了获得以米为单位的实际距离,您需要了解人们与相机之间的距离。只要你没有那个,你所能计算的就是以像素为单位的出现距离,这就是你现在所拥有的。
  • @mapf 这意味着我还需要计算人与相机之间的距离。?请问有这篇文章的链接吗?
  • 这就是它的意思,虽然它非常重要。我刚刚看了看,发现this
  • 由于提到了 2d 投影,所以变量很多。要进行计算,您应该知道 3d 世界中的实际位置。那将是他们的脚在地上。如果这些是可见的,并且您可以在图片地面上创建一个网格,例如 1mx1m,那么您可以计算距离。
  • @Mace 知道了。所以你的意思是我需要知道我的 ROI 的尺寸和面积,然后才能准确

标签: python opencv computer-vision euclidean-distance


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-02-20
    • 2020-07-18
    • 2019-02-16
    • 2016-07-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    相关资源
    最近更新 更多