Подробное объяснение и реализация отслеживания лица

искусственный интеллект компьютерное зрение
Подробное объяснение и реализация отслеживания лица

1. Введение в технологию отслеживания лиц

На основе дискриминационного корреляционного фильтра (discriminative correlation filter, DCF) визуального трекера обладает отличной производительностью и высокой вычислительной эффективностью и может использоваться в приложениях реального времени.DCFTracker — очень популярный метод, основанный на отслеживании ограничивающей рамки. существует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Библиотека реализуетDCFтрекер, идеально подходит для отслеживания лица, с помощьюdlib.correlation_tracker()Функция инициализирует трекер,tracker.start_track()Функция используется для запуска отслеживания объекта,tracker.update()Функция обновляет трекер и возвращает доверие трекера.Чтобы получить позицию отслеживаемого объекта, вам нужно использоватьtracker.get_position()функция.