Как рассчитать расстояние между двумя людьми, используя python opencv? - PullRequest
1 голос
/ 08 мая 2020

Я работаю над проектом, в котором мне нужно рассчитать расстояние между обнаруженными людьми в прямом эфире. Для этого я следую приведенному ниже конвейеру:

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 и id2 - это идентификаторы двух человек. p1[0] и p1[1] - координаты x и y человека 1, а p2[0] p2[1] - координаты x y человека2. Я вычисляю euclidean расстояние между x и y координатами обоих людей.

Теперь предположим, что два человека стоят на расстоянии 2 метра друг от друга, для этого я получаю евклидово расстояние в коде как 250. Теперь предположим, что если эти два человека сейчас стоят немного далеко от камеры, но расстояние между ними по-прежнему составляет 2 метра, в этом случае я получаю евклидово расстояние как 343, что означает, что расстояние между людьми в коде увеличивается, если они немного далеки от камеры.

Первоначально я думал, что этот logi c будет работать нормально независимо от того, где находятся люди в кадре, но похоже, что он не работает. Может ли кто-нибудь помочь мне предложить несколько хороших рабочих решений для этого. Пожалуйста помоги. Спасибо

1 Ответ

2 голосов
/ 08 мая 2020

Как ответ на вопрос в вашем комментарии.

enter image description here

В режиме просмотра камеры у вас есть 3D-сокращение. И единственное, в чем вы можете быть уверены, находясь в поле зрения человека, - это его ноги на земле.

Если вы учтете 3D-сокращение и нарисуете сетку на виде, вы сможете хорошо оценить расстояние, пересчитав сетку и позиции в квадрат.

...