1. Введение в технологию отслеживания лиц
На основе дискриминационного корреляционного фильтра (discriminative correlation filter
, DCF
) визуального трекера обладает отличной производительностью и высокой вычислительной эффективностью и может использоваться в приложениях реального времени.DCF
Tracker — очень популярный метод, основанный на отслеживании ограничивающей рамки.
существуетdlib
библиотека на основеDCF
трекер, который можно легко использовать для отслеживания объектов. В этой статье мы описываем, как использовать этот трекер для отслеживания лиц и выбранных пользователем объектов, также известный как дискриминативный трекер масштаба-пространства (Discriminative Scale Space Tracker
, DSST
), трекеру нужно только ввести исходное видео и ограничительную рамку начального положения цели, а затем трекер автоматически предскажет траекторию цели.
2. Отслеживание лиц с помощью трекера на основе dlib DCF
При отслеживании лица мы сначала используемdlib
Детектор лиц инициализируется, а затем используется на основеdlib DCF
трекерDSST
Займитесь отслеживанием лица. Вызовите следующую функцию, чтобы инициализировать связанный трекер:
tracker = dlib.correlation_tracker()
Это инициализирует трекер со значениями по умолчанию (filter_size = 6, num_scale_levels = 5, scale_window_size = 23, Regularizer_space = 0,001, nu_space = 0,025, Regularizer_scale = 0,001, nu_scale = 0,025, scale_pyramid_alpha = 1,020).filter_size
иnum_scale_levels
Чем больше значение , тем выше точность слежения, но это требует большей вычислительной мощности;filter_size
Рекомендуемое значение использования5
,6
и7
;num_scale_levels
Рекомендуемое значение использования4
,5
и6
.
использоватьtracker.start_track()
Отслеживание может быть запущено. Прежде чем начать отслеживание, нам нужно выполнить обнаружение лица и передать обнаруженное местоположение лица этому методу:
if tracking_face is False:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 尝试检测人脸以初始化跟踪器
rects = detector(gray, 0)
# 检查是否检测到人脸
if len(rects) > 0:
# 开始追踪
tracker.start_track(frame, rects[0])
tracking_face = True
Когда лицо обнаружено, средство отслеживания лиц начнет отслеживать содержимое внутри ограничивающей рамки. Чтобы обновить позицию отслеживаемого объекта, вызовитеtracker.update()
метод:
tracker.update(frame)
tracker.update()
Метод обновляет средство отслеживания и возвращает метрику, которая измеряет достоверность средства отслеживания, которую можно использовать для повторной инициализации средства отслеживания с обнаружением лиц.
Чтобы получить позицию отслеживаемого объекта, необходимо вызватьtracker.get_position()
метод:
pos = tracker.get_position()
tracker.get_position()
Метод возвращает позицию отслеживаемого объекта. Наконец, постройте предсказанное местоположение лица:
cv2.rectangle(frame, (int(pos.left()), int(pos.top())), (int(pos.right()), int(pos.bottom())), (0, 255, 0), 3)
На следующем рисунке показан процесс отслеживания эффекта алгоритма отслеживания лица:
На изображении выше вы можете видеть, что алгоритм в настоящее время отслеживает обнаруженное лицо, и вы также можете нажать цифру 1, чтобы повторно инициализировать отслеживание.
3. Отслеживание объектов с помощью трекера на основе dlib DCF
Помимо лица, на основеdlib DCF
Трекер можно использовать для отслеживания произвольных объектов. Далее мы используем мышь, чтобы выбрать объект для отслеживания и прослушивания событий клавиатуры, если мы нажмем1
, начнет отслеживать объекты в пределах предопределенной ограничивающей рамки; если вы нажмете2
, предопределенная ограничивающая рамка будет очищена, алгоритм отслеживания остановится и будет ждать, пока пользователь выберет другую ограничивающую рамку.
Например, если мы не заинтересованы в обнаружении Мисс и Сестрички, а предпочитаем кошек, то мы можем сначала нарисовать прямоугольник мышью, чтобы выбрать кошку, а затем нажать1
Начните отслеживать котенка, если мы хотим отслеживать другие объекты, мы можем нажать2
Перерисуйте прямоугольник и обведите.
# 设置并绘制一个矩形,跟踪矩形框内的对象
if len(points) == 2:
cv2.rectangle(frame, points[0], points[1], (0, 0, 255), 3)
dlib_rectangle = dlib.rectangle(points[0][0], points[0][1], points[1][0], points[1][1])
if tracking_face is True:
# 更新跟踪器并打印测量跟踪器的置信度
print(tracker.update(frame))
# 获取被跟踪对象的位置
pos = tracker.get_position()
# 绘制被跟踪对象的位置
cv2.rectangle(frame, (int(pos.left()), int(pos.top())), (int(pos.right()), int(pos.bottom())), (0, 255, 0), 3)
Как показано ниже, мы видим, как алгоритм отслеживает объект и выводит результат в реальном времени:
резюме
dlib
Библиотека реализуетDCF
трекер, идеально подходит для отслеживания лица, с помощьюdlib.correlation_tracker()
Функция инициализирует трекер,tracker.start_track()
Функция используется для запуска отслеживания объекта,tracker.update()
Функция обновляет трекер и возвращает доверие трекера.Чтобы получить позицию отслеживаемого объекта, вам нужно использоватьtracker.get_position()
функция.