В настоящее время я занимаюсь разработкой проекта для пешеходов (с использованием OpenCV + QT в Linux). Моя идея о подходе:
- Рамки захвата
- Сделать вычитание фона
- четкие шумы (разрушать, расширять)
- найти капли (cvBlobslib) - объекты переднего плана
- Для каждого большого двоичного объекта установите ROI и выполните поиск пешеходов (LBP с detectMultiScale) в этих больших двоичных объектах (для повышения производительности).
- Для каждого найденного пешехода выполняют поиск в верхней части тела (не уверен) (лучшая надежность)
- Если один и тот же пешеход обнаружен на продолжающихся кадрах (возможно, 3-4 кадра) - добавьте эту область к распределительному сдвигу и проследите - отметьте как пешехода
- Исключить отслеживаемые области распредвала из определения BLOB-объектов для следующих кадров
- Если пешеход пересекает номер приращения линии
Я хочу проверить, нахожусь ли я на правильном пути. Есть ли у вас какие-либо предложения о том, как улучшить мой подход? Если бы кто-то работал над чем-то похожим, я был бы признателен за полезные советы, ресурсы (и критику) по этой проблеме.
Ответы:
Я вижу ряд возможных проблем с этим подходом. Я говорю на собственном опыте здесь от улучшения системы подсчета пешеходов с очень похожим подходом, поэтому я не хочу обескураживать. Напротив, я хотел бы предупредить вас о возможных препятствиях, которые вам, возможно, придется преодолеть, чтобы построить точную и надежную систему.
Во-первых, фоновое вычитание предполагает, что интересующие вас объекты всегда будут двигаться, а объекты, которые вы не заинтересованы в подсчете, останутся полностью неподвижными. Конечно, это может иметь место в вашем сценарии, но это все еще очень ограничивающее предположение. Я также обнаружил, что фоновое вычитание очень чувствительно к изменениям освещения (я согласен с геометрикой).
Будьте осторожны с предположением, что один шарик = один человек , даже если вы думаете, что ваша среда хорошо контролируется. Слишком часто случалось так, что капли, соответствующие людям, оставались незамеченными, потому что они не двигались или были слишком маленькими, поэтому они были удалены в результате эрозии или по каким-либо критериям порогового значения (и, поверьте, вы не хотите входить в " настраивать пороги пока все не работает "ловушка. не работает;)). Может также случиться, что один шарик соответствует двум людям, идущим вместе, или одному человеку, несущему какой-то багаж. Или собака. Так что не делайте умных предположений о каплях.
К счастью, поскольку вы упоминаете, что вы используете LBP для обнаружения людей , я думаю, что вы на правильном пути, чтобы не делать ошибок в параграфе выше. Я не могу комментировать эффективность LBP в частности, хотя. Я также читал, что HOG (гистограмма градиентов) - это современный метод обнаружения людей, см. Гистограммы ориентированных градиентов для обнаружения людей .
Мое последнее замечание связано с использованием Camshift . Он основан на цветных гистограммах, поэтому сам по себе он прекрасно работает при отслеживании одного объекта, который легко различить по цвету, если окно отслеживания достаточно велико и в нем нет окклюзий или резких изменений. Но как только вам придется отслеживать несколько целей, которые могут иметь очень похожие цветовые описания и которые будут перемещаться очень близко друг к другу, вы просто не сможете обойтись без алгоритма, который каким-то образом позволяет вам поддерживать несколько гипотез. Это может быть фильтр частиц или структура, такая как MCMCDA (Марковская цепочка Монте-Карло данных, см. Марковская цепочка Монте-Карло данных Ассоциация для многоцелевого отслеживания). Мой опыт использования только Meanshift при отслеживании нескольких объектов - это все, что не должно происходить с отслеживанием: потеря отслеживания, запутывание целей, фиксация в фоновом режиме и т. Д. Прочтите немного о проблемах отслеживания нескольких объектов и ассоциации данных, это может быть на в конце концов, я считаю, что нужно учесть несколько человек (я говорю «может быть», потому что ваша цель - не отслеживать, поэтому я не отказываюсь от возможности какого-то умного подхода, который учитывается без отслеживания ...)
Мой последний совет является: есть только так много вы можете сделать с данным подходом , и вы будете нуждаться любитель материалом для достижения более высокой производительности (так что я не согласен с user36624 в этом отношении). Это может означать изменение части вашего алгоритма на что-то более мощное или изменение архитектуры в целом. Конечно, вы должны знать, какие модные вещи действительно полезны для вас. Есть публикации, которые пытаются решить проблему принципиальным образом, в то время как другие просто придумывают алгоритм для данного набора данных и ожидают, что вы обучите классификатор, который на самом деле не подходит для рассматриваемой проблемы, при этом требуя от вас настроить несколько порогов тоже. Люди подсчета являетсяпродолжающиеся исследования, так что не ожидайте, что все будет легко. Постарайтесь выучить вещи, которые немного выходят за рамки ваших возможностей, а затем делайте это снова и снова ...
Я признаю, что я не предлагал никаких решений и вместо этого только указал на недостатки в вашем подходе (которые все исходят из моего собственного опыта). Для вдохновения я рекомендую вам прочитать некоторые недавние исследования, например, « Стабильное многоцелевое отслеживание» в видео наблюдения в реальном времени . Удачи!
источник
Я думаю, что вы спрашиваете о возможности вашего пешеходного алгоритма.
Есть две основные стратегии для такого рода проблем:
(снизу вверх) Рассматривайте это как чисто проблему обнаружения, когда в каждом кадре вы обнаруживаете только пешеходов. Как только вы их обнаружите, а) подсчитать их количество в кадре довольно легко; и б) отслеживание любого из них в последовательных кадрах также легко. Поэтому вы все решаете.
(сверху вниз) Рассматривайте это как проблему распознавания действий, когда вы определяете, является ли ROI в последовательных кадрах пешеходом или нет в соответствии с его действиями. Как только вы решите эту проблему, вы решите проблемы обнаружения и отслеживания одновременно.
Ваш эвристический алгоритм находится в первой категории. Я не хочу отговаривать вас, но вы можете упустить ключевой момент, как обнаружить пешехода, Потому что реальные данные могут быть более сложными, чем вы думали. Например, если это камера метро, кадры которой могут быть заполнены пешеходами и, таким образом, удаление фона или обнаружение капель не помогает вообще. В этом случае, возможно, более разумно использовать алгоритмы обнаружения и распознавания лиц для решения проблемы, потому что, если вы найдете лицо, вы найдете пешехода. С другой стороны, в зависимости от вашего определения пешехода может быть верно, что не все, фигурирующие в кадре, должны рассматриваться как пешеходы. В этом случае может быть разумно использовать алгоритмы распознавания действий (вторая категория), в которых вы можете явно определить пешехода на основе его или ее поведения.
Вот несколько советов, основанных на моем опыте:
Придерживайтесь того, что вы знаете и что вы можете легко подобрать. Не тратьте свое время на что-то причудливое, но требующее много опыта, которого у вас нет. Поверьте мне, все эти алгоритмы будут хорошими в некоторых случаях, но плохими в других. Поэтому первым делом нужно заставить что-то работать, независимо от того, хорошо это или плохо.
Узнайте больше о своих данных, а затем определите свой метод. Общее описание проблемы во многих случаях является недостаточным.
Если вы хотите продемонстрировать свою идею, лучше использовать MATLAB и создать прототип.
источник