Отслеживание - это процесс определения местоположения движущегося объекта или нескольких объектов во времени в видеопотоке. Отслеживание объекта отличается от обнаружения объекта. Обнаружение объекта - это процесс определения местоположения объекта, представляющего интерес, в одном кадре. Отслеживание ассоциирует обнаружение объекта в нескольких кадрах.
Отслеживание нескольких объектов требует обнаружения, прогнозирования и связи данных.
Обнаружение: Обнаружение интересующих объектов в видеокадре.
Предсказание: Спрогнозировать местоположение объекта в следующем кадре.
Связь данных: используйте прогнозируемые расположения, чтобы связать обнаружения между кадрами для формирования дорожек.
Выбор правильного подхода для обнаружения интересующих объектов зависит от того, что вы хотите отслеживать и неподвижна ли камера.
Для обнаружения объектов в движении стационарной камерой можно выполнить вычитание фона с помощью vision.ForegroundDetector Системный объект. Подход вычитания фона работает эффективно, но требует, чтобы камера была неподвижной.
Для обнаружения движущихся объектов с помощью движущейся камеры можно использовать метод обнаружения скользящего окна. Этот подход обычно работает медленнее, чем фоновый подход вычитания. Для обнаружения и отслеживания определенной категории объектов используйте системные объекты или функции, описанные в таблице.
| Тип отслеживаемого объекта | Камера | Функциональность |
|---|---|---|
| Все, что движется | Постоянный |
|
| Лица, глаза, нос, рот, верхняя часть тела | Стационарный, подвижный |
|
| Пешеходы | Стационарный, подвижный |
|
| Пользовательская категория объектов | Стационарный, подвижный |
|
Отслеживание объекта во времени означает, что необходимо предсказать его местоположение в следующем кадре. Простейший способ прогнозирования заключается в предположении, что объект будет находиться вблизи своего последнего известного местоположения. Другими словами, предыдущее обнаружение служит следующим предсказанием. Этот способ особенно эффективен для высокой частоты кадров. Однако использование этого способа прогнозирования может завершиться неудачей, когда объекты движутся с изменяющейся скоростью или когда частота кадров является низкой относительно скорости движущегося объекта.
Более сложным способом прогнозирования является использование наблюдаемого ранее движения объекта. Фильтр Кальмана (vision.KalmanFilter) предсказывает следующее местоположение объекта, предполагая, что он перемещается в соответствии с моделью движения, такой как постоянная скорость или постоянное ускорение. Фильтр Калмана также учитывает шум процесса и шум измерений. Шум процесса - это отклонение фактического движения объекта от модели движения. Шум измерения - это ошибка обнаружения.
Чтобы упростить настройку фильтра Калмана, используйте configureKalmanFilter. Эта функция устанавливает фильтр для отслеживания движения физического объекта с постоянной скоростью или постоянным ускорением в декартовой системе координат. Статистика одинакова по всем измерениям. Если необходимо настроить фильтр Калмана с различными допущениями, необходимо создать vision.KalmanFilter непосредственно объект.
Ассоциация данных - это процесс связывания обнаружений, соответствующих одному физическому объекту, между кадрами. Временная история конкретного объекта состоит из нескольких обнаружений и называется дорожкой. Представление дорожки может включать всю историю предыдущих расположений объекта. Альтернативно, он может состоять только из последнего известного местоположения объекта и его текущей скорости.
Чтобы сопоставить обнаружение с дорожкой, необходимо установить критерии для оценки совпадений. Как правило, этот критерий устанавливается путем определения функции затрат. Чем выше стоимость согласования обнаружения с дорожкой, тем меньше вероятность того, что обнаружение принадлежит дорожке. Простая функция затрат может быть определена как степень перекрытия между ограничивающими рамками прогнозируемых и обнаруженных объектов. Пример отслеживания пешеходов из движущегося автомобиля реализует эту функцию затрат с помощью bboxOverlapRatio функция. Можно реализовать более сложную функцию затрат, которая учитывает неопределенность прогноза, используя distance функции vision.KalmanFilter объект. Можно также реализовать пользовательскую функцию затрат, чем включить информацию о размере и внешнем виде объекта.
Стробирование - это метод исключения крайне маловероятных совпадений из рассмотрения, например, путем установления порога для функции затрат. Наблюдение не может быть сопоставлено с дорожкой, если стоимость превышает определенное пороговое значение. Использование этого порогового способа эффективно приводит к круговой области стробирования вокруг каждого предсказания, где может быть найдено совпадающее обнаружение. Альтернативный способ стробирования заключается в том, чтобы сделать область стробирования достаточно большой, чтобы включить k-ближайшие соседи предсказания.
Связь данных сводится к задаче двухстороннего согласования с минимальным весом, которая является хорошо изученной областью теории графов. Двудольный граф представляет дорожки и обнаружения как вершины. Он также представляет стоимость согласования обнаружения и дорожки как взвешенного ребра между соответствующими вершинами.
assignDetectionsToTracks функция реализует вариант Мункреса венгерского алгоритма двудольного согласования. Его вводом является матрица затрат, где строки соответствуют дорожкам, а столбцы соответствуют обнаружениям. Каждая запись содержит стоимость назначения определенного обнаружения определенной дорожке. Вы можете реализовать стробирование, установив стоимость невозможных матчей на бесконечность.
Связь данных должна учитывать тот факт, что в поле зрения могут появиться новые объекты или что отслеживаемый объект может покинуть поле зрения. Другими словами, в любом данном кадре может потребоваться создать некоторое количество новых дорожек, и некоторое количество существующих дорожек может потребоваться отбросить. assignDetectionsToTracks функция возвращает индексы неназначенных дорожек и неназначенных обнаружений в дополнение к согласованным парам.
Одним из способов обработки непревзойденных обнаружений является создание новой дорожки из каждого из них. Кроме того, можно создавать новые дорожки из непревзойденных обнаружений, превышающих определенный размер, или из обнаружений, имеющих определенные расположения или внешний вид. Например, если сцена имеет одну точку входа, например дверной проем, то можно указать, что только несопоставимые обнаруженные объекты, расположенные рядом с точкой входа, могут начать новые дорожки, и что все остальные обнаруженные объекты считаются шумами.
Другим способом обработки несопоставленных дорожек является удаление любой дорожки, которая остается несопоставимой для определенного количества кадров. Кроме того, можно указать удаление несопоставленной дорожки, когда ее последнее известное местоположение находится рядом с точкой выхода.
assignDetectionsToTracks | bboxOverlapRatio | configureKalmanFilter | extractHOGFeatures | selectStrongestBbox | trainCascadeObjectDetector | vision.CascadeObjectDetector | vision.ForegroundDetector | vision.KalmanFilter | vision.PeopleDetector | vision.PointTracker