Подсчет объектов Python и Raspberry Picamera, считает несколько раз - PullRequest
0 голосов
/ 05 февраля 2019

Недавно я работал над проектом, использующим Raspberry Pi Camera OpenCV и Python для подсчета людей, проходящих мимо определенной области, в режиме реального времени, поскольку для меня это будет проще, чем обработка записанного видео.

В целом, код работает и все, но у меня возникла проблема со счетной частью:

1 - если объект остается в контрольной строке, он продолжает прибавлять к счетчикам;

2 - Иногда, в зависимости от скорости объекта, он подсчитывается несколько раз;

Я не специалист по питону, и мне может не хватать слов на английском, чтобы найти правильное решение,поэтому я подумал, что, может быть, кто-нибудь скажет мне, что было бы лучше, чтобы решить эту проблему.Чтобы проиллюстрировать это, здесь приведен пример gif:

enter image description here

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

Это код, который проверяет, пересекает ли объект линию:

if (TestaInterseccaoEntrada(CoordenadaYCentroContorno,CoordenadaYLinhaEntrada,CoordenadaYLinhaSaida)):
    ContadorEntradas += 1

if (TestaInterseccaoSaida(CoordenadaYCentroContorno,CoordenadaYLinhaEntrada,CoordenadaYLinhaSaida)):  
    ContadorSaidas += 1

Я думал об использованиикакая-то задержка с time.sleep (x) в цикле, но это, очевидно, не решает ее, а также выглядит плохо = D.

При необходимости я могу выложить остальную часть кода здесь, ноЭто здесь, чтобы держать вещи в порядке: Вставка кода

Не обращайте внимания на какой-либо плохой синтаксис или ошибки, часть его не моя, а часть выглядит ужасно!XD

Заранее спасибо.

1 Ответ

0 голосов
/ 06 февраля 2019

Классный проект!Сложно посчитать количество ограничивающих рамок, которые проходят каждую строку, если вы не отслеживаете их.Еще хуже, если вы хотите сосчитать их в обоих направлениях.

Из-за этой трудности обычно люди предпочитают отслеживать объект и затем смотреть на траекторию, чтобы определить, прошел ли объект линию или нет.

Эта ссылка поможет вам понять разницу.Он также предоставляет код для обнаружения (но у вас уже работает эта часть) и отслеживания (что вам потребуется) https://www.pyimagesearch.com/2018/08/13/opencv-people-counter/

Кроме того, самый простой способ отследить - связать поля с самым высокимдолговая расписка.Хорошую и простую реализацию можно найти здесь:

https://github.com/bochinski/iou-tracker

Удачи!

...