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