Перейти к основному содержимому
Версия: 3.21.1

Обработка видеопотоков

Обзор

Для обработки видеопотоков в Face SDK используется интерфейсный объект VideoWorker, который берет на себя всю необходимую синхронизацию и контроль за потоками. Вам необходимо только подавать кадры видеопотока и реализовать несколько коллбэков.

VideoWorker можно использовать для решения следующих задач:

Пример использования объекта VideoWorker см. в сэмпле video_recognition_demo.

Связанные туториалы:

Создание объекта VideoWorker

Создать объект VideoWorker можно с помощью метода FacerecService.createVideoWorker.

Примеры

pbio::FacerecService::Config video_worker_config("video_worker_lbf.xml");
video_worker_config.overrideParameter("search_k", 3);
pbio::VideoWorker::Ptr video_worker = service->createVideoWorker(
pbio::VideoWorker::Params()
.video_worker_config(video_worker_config)
.recognizer_ini_file(recognizer_config)
.streams_count(streams_count)
.processing_threads_count(processing_threads_count)
.matching_threads_count(matching_threads_count)
.age_gender_estimation_threads_count(age_gender_estimation_threads_count)
.emotions_estimation_threads_count(emotions_estimation_threads_count)
.short_time_identification_enabled(enable_sti)
.short_time_identification_distance_threshold(sti_recognition_threshold)
.short_time_identification_outdate_time_seconds(sti_outdate_time)
);

Где:

  • video_worker_config – путь до файла конфигурации VideoWorker или объект FacerecService.Config.
  • video_worker_params – параметры конструктора VideoWorker.
  • recognizer_config – файл конфигурации объекта Recognizer (см. Распознавание лиц).
  • streams_count – количество видеопотоков, для каждого из которых будет создан поток трекинга.
  • processing_threads_count – количество потоков для создания шаблонов лиц (потоки обработки). Эти потоки являются общими для всех видеопотоков и распределяют ресурсы равномерно по все видеопотокам независимо от их загруженности (за исключением видеопотоков без лиц в кадре).
  • matching_threads_count – количество потоков для сравнения шаблонов лиц, созданных из кадров видеопотоков, с базой. Как и потоки обработки, они распределяют работу равномерно по всем видеопотокам.
  • age_gender_estimation_threads_count – количество потоков для определения пола и возраста. Как и потоки обработки, они распределяют работу равномерно по всем видеопотокам.
  • emotions_estimation_threads_count – количество потоков для определения эмоций. Как и потоки обработки, они распределяют работу равномерно по всем видеопотокам.
  • enable_sti – флаг, включающий кратковременную идентификацию.
  • sti_recognition_threshold – порог для кратковременной идентификации.
  • sti_outdate_time – длина временного интервала для кратковременной идентификации в секундах.

Все доступные файлы конфигурации хранятся в папке conf дистрибутива Face SDK.

Подача кадров

Для подачи кадров видеопотока в VideoWorker используйте метод VideoWorker.addVideoFrame. Этот метод потокобезопасен, поэтому можно подавать кадры из разных потоков без дополнительной синхронизации.

В качестве аргументов метода указываются frame (цветное изображение кадра), stream_id (целочисленный идентификатор видеопотока) и timestamp_microsec (временная метка кадра в микросекундах). Метод возвращает frame_id (целочисленный идентификатор кадра), который будет использоваться в коллбэках для обозначения этого кадра.

Коллбэки

Передача результатов обработки кадров реализована с помощью набора коллбэков. Данные обработки, получаемые с разных потоков, оформляются в структуру типа data, которая передается в качестве аргумента вызываемого коллбэка. Атрибуты структуры data отличаются для каждого типа коллбэка.

В зависимости от решаемых задач в Face SDK реализованы следующие типы коллбэков:

  • TrackingCallbackU (Трекинг, оценка пола, возраста и эмоций, оценка Liveness)
  • TrackingLostCallbackU (Трекинг лиц)
  • TemplateCreatedCallbackU (Создание шаблонов)
  • MatchFoundCallbackU (Идентификация)
  • StiPersonOutdatedCallbackU (Кратковременная идентификация)

Чтобы добавить коллбэк, используйте метод VideoWorker.add(имя коллбэка). Метод возвращает callback_id (целочисленный идентификатор коллбэка). Чтобы удалить коллбэк, воспользуйтесь методом VideoWorker.remove(имя коллбэка), передав callback_id в качестве аргумента.

Трекинг лиц

примечание

Если VideoWorker используется только для трекинга лиц, в параметрах конструктора необходимо указать matching_thread=0 и processing_thread=0 и применить лицензию Face Detector. При создании объекта VideoWorker для одного потока укажите параметр streams_count=1.

Результаты трекинга передаются с помощью двух коллбэков:

VideoWorker.TrackingCallbackU (Tracking-коллбэк)

Во время нахождения человека в поле зрения камеры формируется его трек (последовательность кадров видеопотока, на которых изображен один и тот же человек). Каждому треку присваивается свой целочисленный идентификатор (track_id).

Кадры видеопотока попадают в конвейер трекинга - структуру, которая отвечает за синхронизацию и распределение кадров по потокам обработки. После обработки каждого кадра вызывается Tracking-коллбэк, который возвращает результаты трекинга. Результаты трекинга фиксируются в передаваемой структуре TrackingCallbackData(C++, Java, C#, Python).

Tracking-коллбэки с одинаковым идентификатором stream_id вызываются в порядке возрастания frame_id. Поэтому если сразу после коллбэка со stream_id=1 и frame_id=100 был получен коллбэк со stream_id=1 и frame_id=102, значит кадр с frame_id=101 был пропущен для видеопотока 1.

VideoWorker.TrackingLostCallbackU (TrackingLost-коллбэк)

Этот коллбэк вызывается, когда человек вышел из кадра (трек потерян), и возвращает лучший сэмпл и шаблон лица. Лучший сэмпл может быть пустым, если включен конфигурационный параметр weak_tracks_in_tracking_callback. Результаты обработки фиксируются в передаваемой структуре TrackingLostCallbackData (C++, Java, C#, Python).

Коллбэк вызывается последним для пары <stream_id, track_id>. После него ни один Tracking-, MatchFound- или TrackingLost-коллбэк для видеопотока stream_id не может содержать сэмпла с этим же идентификатором track_id.

Для каждой пары <stream_id, track_id>, которая была передана в Tracking-коллбэке, существует ровно один TrackingLost-коллбэк.

Исключение составляют треки, удаленные в процессе сброса состояния работы видеопотока с помощью метода VideoWorker.resetStream.Метод возвращает track_id_threshold, целое число, означающее, что все удаленные в ходе resetStream треки имели track_id < track_id_threshold, а все новые треки будут иметь track_id >= track_id_threshold. После возврата управления от resetStream не будет вызвано ни одного коллбэка, относящегося к предыдущим трекам, включая TrackingLost-коллбэк.

примечание

Ошибки, возникшие в коллбэках, будут перехвачены и сгенерированы заново в методе VideoWorker.checkExceptions, поэтому не забывайте регулярно вызывать метод VideoWorker.checkExceptions для контроля ошибок.

предупреждение

Не вызывайте методы, которые изменяют состояние VideoWorker внутри коллбэков, во избежание взаимной блокировки. Безопасными для вызова в коллбэках являются только методы VideoWorker.getMethodName и VideoWorker.getStreamsCount.

Создание шаблонов

примечание

Если VideoWorker используется для трекинга и создания биометрических шаблонов, в параметрах конструктора необходимо указать processing_thread>0 и matching_thread=0 и использовать лицензию Video Engine Standard. При создании VideoWorker для одного потока укажите параметры streams_count=1, processing_threads_count=1, matching_threads_count=0.

VideoWorker.TemplateCreatedCallbackU (TemplateCreated-коллбэк)

Коллбэк VideoWorker.TemplateCreatedCallbackU возвращает результаты генерации шаблонов в виде структуры TemplateCreatedCallbackData (C++, Java, C#, Python). Коллбэк вызывается каждый раз, когда внутри VideoWorker создается шаблон.

TemplateCreated-коллбэк вызывается после как минимум одного Tracking-коллбэка и перед TrackingLost-коллбэком с теми же stream_id и track_id.

Создание шаблонов включено по умолчанию для всех видеопотоков. Вы можете включить/отключить создание шаблонов для конкретного видеопотока с помощью методов VideoWorker.disableProcessingOnStream и VideoWorker.enableProcessingOnStream.

Оценка пола, возраста и эмоций

примечание

Для оценки пола и возраста в параметрах конструктора VideoWorker необходимо указать age_gender_estimation_threads_count > 0, а для оценки эмоций - параметр emotions_estimation_threads_count > 0.

Данные о поле, возрасте и эмоциях приходят в коллбэк VideoWorker.TrackingCallbackU. Если данные об эмоциях обновляются в режиме реального времени, то данные о поле и возрасте пересчитываются только в случае, если найден сэмпл с лучшим качеством.

Оценка пола, возраста и эмоций включена по умолчанию для всех видеопотоков.

Отключить оценку пола, возраста и эмоций на конкретном потоке можно при помощи методов:

  • VideoWorker.disableAgeGenderEstimationOnStream (пол и возраст)
  • VideoWorker.disableEmotionsEstimationOnStream (эмоции)

Заново включить определение пола, возраста и эмоций на конкретном потоке можно при помощи методов:

  • VideoWorker.enableAgeGenderEstimationOnStream (пол и возраст)
  • VideoWorker.enableEmotionsEstimationOnStream (эмоции)

Оценка Liveness

Активная (сценарная) проверка

Данный тип оценки Liveness требует от пользователя выполнения определенных действий (сценария), например, "повернуть голову", "моргнуть" и т.д.

Для включения проверок необходимо указать параметр enable_active_liveness = 1 в файле конфигурации объекта VideoWorker. После этого все лица для идентификации будут проходить через несколько проверок:

  • SMILE: улыбка. Для использования проверки SMILE необходимо указать количество потоков в параметре emotions_estimation_threads_count объекта VideoWorker.
  • BLINK: моргание
  • TURN_UP: поворот головы вверх
  • TURN_DOWN: поворот головы вниз
  • TURN_RIGHT: поворот головы вправо
  • TURN_LEFT: поворот головы влево
  • PERSPECTIVE: проверка изменения положения лица (необходимо приблизить лицо к камере)

Чтобы включить/отключить проверку, откройте файл конфигурации active_liveness_estimator.xml и укажите значения 0 (проверка выключена) или 1 (проверка включена) для одной или нескольких проверок: check_smile, check_perspective, check_blink, check_turn_up, check_turn_down, check_turn_right, check_turn_left.

Также, в файле конфигурации active_liveness_estimator.xml можно настроить следующие параметры проверки:

  • check_count: количество включенных проверок для прохождения. Если указанное число меньше количества включенных проверок, система произвольно выберет несколько проверок для прохождения, а если указанное число больше количества включенных проверок, некоторые проверки будут повторяться несколько раз.
  • max_frames_wait: время ожидания начала выполнения проверки (в кадрах). Если за это время проверка так и не началась, она считается невыполненной, и возвращается статус CHECK_FAIL.
  • rotation_yaw_threshold: порог прохождения проверки. Чтобы пройти проверку, нужно повернуть голову под указанным углом.
  • rotation_pitch_threshold: порог прохождения проверки. Чтобы пройти проверку, нужно повернуть голову под указанным углом.
  • blinks_threshold: порог прохождения проверки. 0.3 - значение по умолчанию, 0 - глаз закрыт, 1 - глаз открыт. Моргание засчитывается, если выставленное значение равно или менее 0.3.
    blinks_number: количество морганий необходимых для прохождения проверки. emotion_threshold_smile: порог для проверки smile. Чем меньше указанное значение, тем слабее нужно улыбнуться, чтобы пройти проверку. face_align_angle: перед началом проверки и между проверками лицо должно находиться в нейтральном положении (фронтально по направлению к камере). Значение параметра - это максимально допустимое отклонение углов поворота головы для начала проверки.

Порядок проверок может быть случайным (данный режим выбран по умолчанию), либо задан при инициализации (путем создания списка из неповторяющихся проверок).

Пример списка проверок представлен в демонстрационной программе video_recognition_demo (C++/C#/Java/Python).

Статус проверки приходит в свойство active_liveness_result коллбэка TrackingCallback, которое содержит следующие поля:

  • verdict: статус текущей проверки (объект ActiveLiveness.Verdict)
  • type: тип проверки (объект ActiveLiveness.LivenessChecks)
  • progress_level: степень прогресса прохождения проверки – число в диапазоне [0,1]

Объект ActiveLiveness.Verdict содержит следующие поля:

  • ALL_CHECKS_PASSED: все проверки пройдены
  • CURRENT_CHECK_PASSED: текущая проверка пройдена
  • CHECK_FAIL: проверка не пройдена
  • WAITING_FACE_ALIGN: ожидание нейтрального положения лица
  • NOT_COMPUTED: оценка принадлежности лица реальному человеку не производится
  • IN_PROGRESS: выполняется проверка

Идентификация лиц

примечание

Для трекинга лиц, создания биометрических шаблонов и сравнения их с базой (идентификация) в параметрах конструктора необходимо указать matching_thread>0 и processing_thread>0 и применить лицензию Video Engine Extended. При создании VideoWorker для одного потока необходимо указать параметры streams_count=1, processing_threads_count=1 и matching_threads_count=1.

Чтобы задать или изменить базу данных, используйте метод VideoWorker.setDatabase(может быть вызван в любое время). В качестве аргументов передайте elements (вектор элементов базы) и acceleration (тип ускорения поиска).

Идентификация выполняется следующим образом: по сэмплу отслеживаемого лица создается биометрический шаблон, который сравнивается с шаблонами из базы данных, и если расстояние до ближайшего элемента оказывается меньше порогового расстояния distance_threshold, указанного в этом элементе, фиксируется совпадение.

Коллбэк VideoWorker.MatchFoundCallbackU вызывается после N последовательных совпадений с элементами, относящимися к одному и тому же человеку, и возвращает результат сравнения с базой (идентификации). Результат сравнения фиксируется в передаваемой структуре MatchFoundCallbackData (C++, Java, C#, Python).

Также, выставив значение параметра файла конфигурации <not_found_match_found_callback> равным 1, можно включить вызов этого коллбэка после N последовательных несовпадений (т.е. когда ближайший элемент оказывается дальше порогового расстояния distance_threshold). В этом случае идентификатор match_result первого элемента в MatchFoundCallbackData.search_result будет с нулевым расстоянием, а идентификаторы person_id и element_id будут равны VideoWorker.MATCH_NOT_FOUND_ID. Число N можно задать в файле конфигурации в параметре <consecutive_match_count_for_match_found_callback>.

Коллбэк вызывается после как минимум одного Tracking-коллбэка и перед TrackingLost-коллбэком с теми же stream_id и track_id.

Максимальное количество элементов, возвращаемое в MatchFoundCallbackData.search_result, устанавливается в файле конфигурации в параметре search_k и может быть изменено с помощью метода FacerecService.Config.overrideParameter (см. Примеры).

Кратковременная идентификация

примечание

Кратковременная идентификация не влияет на использование лицензии. Требуется по крайней мере один поток для создания шаблонов processing_thread>0.

Кратковременная идентификация (short time identification, STI) позволяет системе узнать человека, проходившего перед камерой некоторое время назад, даже если этот человек отсутсвует в базе, и даже если идентификация отключена. Таким образом, один и тот же человек, который в течение, например, одной минуты несколько раз выходил из кадра и снова заходил в кадр, будет идентифицироваться как одно и то же лицо.

Включить кратковременную идентификацию можно с помощью флага enable_sti в параметрах конструктора VideoWorker. При попадании человека в кадр по кадру создается сэмпл, по которому строится биометрический шаблон. Затем происходит сравнение этого шаблона с шаблонами лиц людей, которые вышли из кадра не более чем sti_outdate_time секунд назад (sti_outdate_time задается в параметрах конструктора VideoWorker).

Совпадения объединяются в группу sti_person. Идентификатор группы sti_person (sti_person_id) совпадает со значением track_id первого элемента, сформировавшего группу sti_person.

Когда определенная группа sti_person превышает временной промежуток sti_outdate_time, вызывается коллбэк VideoWorker.StiPersonOutdatedCallbackU. Возвращаемые в коллбэке данные фиксируются в виде структуры StiPersonOutdatedCallbackData (C++, Java, C#, Python).

Параметры файлов конфигурации объекта VideoWorker

Нажмите, чтобы отобразить список параметров из файла конфигурации, которые могут быть изменены с помощью метода FacerecService.Config.overrideParameter
  • max_processed_width и max_processed_height – ограничение размера изображения, подаваемого в детектор.
  • min_size и max_size – минимальный и максимальный размер лица для трекинга (размер определен для изображения, уже уменьшенного под ограничения max_processed_width и max_processed_height). Для детектора REFA можно указать относительные значения, тогда абсолютные значения будут увеличины относительно ширины изображения.
  • min_neighbors – целочисленный параметр детектора, который позволяет отбрасывать ложные детекции. Вы можете изменить этот параметр, исходя из ситуации: например, можно увеличить значение, если наблюдается большое число ложных детекций, и уменьшить значение, если большое число лиц не детектируется. Рекомендуем не менять значение этого параметра без необходимости.
  • min_detection_period – вещественное число, означает минимальное время (в секундах) между двумя запусками детектора. Используется для уменьшения нагрузки на процессор. Нулевое значение отключает ограничение. Выставленные высокие значения увеличивают задержку обнаружения новых лиц.
  • max_detection_period – целое число, означает максимальное время между двумя запусками детектора. Нулевое значение отключает это ограничение. Если вы обрабатываете видео оффлайн, можно выставить значение 1, чтобы не пропустить ни одного лица.
  • consecutive_match_count_for_match_found_callback – целое число, означает количество последовательных совпадений отслеживаемого лица с одним и тем же человеком из базы, которое будет расцениваться как верное совпадение (см. также VideoWorker.MatchFoundCallbackU)
  • recognition_yaw_min_threshold, recognition_yaw_max_threshold, recognition_pitch_min_threshold и recognition_pitch_max_threshold – вещественные числа, означают ограничения ориентации лиц для сравнения с базой.
  • min_tracking_face_size – вещественное число, означает минимальный размер отслеживаемого лица.
  • max_tracking_face_size – вещественное число, означает максимальный размер отслеживаемого лица. Неположительное значение отключает это ограничение.
  • min_template_generation_face_size – вещественное число, означает минимальный размер лица для генерации шаблона. Лица меньшего размера будут отмечены флагом weak = true.
  • single_match_mode – целое число, 1 означает, что режим однократного распознавания включен, 0 – выключен. Если режим включен, то по треку, имеющему одно совпадение с базой, больше не будут генерироваться шаблоны, и производится сравнения с базой.
  • delayed_samples_in_tracking_callback – целое число, 1 – включен, 0 – выключен. Детектор, который обнаруживает новые лица, не успевает обрабатывать все кадры, соответственно, некоторые сэмплы могут быть получены с задержкой. В случае, если выбрано значение параметра 1, все задержанные сэмплы будут передаваться в VideoWorker.TrackingCallbackU, иначе задержанные сэмплы будут появляться, только если будет нарушен порядок вызова коллбэков (т.е. сэмпл трека должен быть передан хотя бы один раз в TrackingCallback перед вызовом TrackingLostCallback для этого трека). Чтобы определить, к какому кадру фактически относится сэмпл, используйте метод RawSample.getFrameID.
  • weak_tracks_in_tracking_callback – целое число, 1 – включен, 0 – выключен. По умолчанию этот флаг выключен, и сэмплы с флагом weak = true не передаются в Tracking-коллбэк, если на момент их создания не существовало сэмплов с таким же track_id (track_id = sample.getID()) с флагом weak = false. Если флаг weak_tracks_in_tracking_callback включен, то в Tracking-коллбэк передаются все сэмплы, поэтому TrackingLost-коллбэк может быть вызван с best_quality_sample = NULL.
  • search_k – целое число, означает максимальное количество элементов, возвращаемых в коллбэке VideoWorker.MatchFoundCallbackU (это параметр k, передаваемый внутри в Recognizer.search).
  • processing_queue_size_limit – целое число, означает максимальный размер очереди сэмплов на создание шаблонов. Служит для ограничения потребления памяти в случаях, когда новые лица появляются быстрее, чем создаются шаблоны.
  • matching_queue_size_limit – целое число, означает максимальный размер очереди шаблонов на сравнение с базой. Служит для ограничения потребления памяти в случаях, когда новые шаблоны появляются быстрее, чем происходит сравнение с базой (например, при очень большой базе).
  • recognizer_processing_less_memory_consumption – целое число, которое будет передано в качества значения флага processing_less_memory_consumption в методе FacerecService.createRecognizer для создания объекта Recognizer.
  • not_found_match_found_callback – целое число, 1 – включен, 0 – выключен, означает вызов VideoWorker.MatchFoundCallbackU после N последовательных несовпадений.
  • depth_data_flag – целое число, 1 – включен режим работы с кадрами глубины для подтверждения Liveness при распознавании, 0 – выключен. Все переопределенные параметры с префиксом depth_liveness. в имени пробрасываются в файл конфигурации для DepthLivenessEstimator, префикс удаляется из имени. Если необходимо переопределить параметр paramname для DepthLivenessEstimator, требуется переопределить параметр depth_liveness.paramname для VideoWorker. См. FacerecService.Config.overrideParameter.
  • timestamp_distance_threshold_in_microsecs – максимальная допустимая разница между временными метками цветного изображения и соответствующего кадра глубины в микросекундах. Используется, если включен параметр depth_data_flag.
  • max_frames_number_to_synch_depth – максимальный размер очереди при синхронизации данных глубины. Используется, если включен параметр depth_data_flag.
  • max_frames_queue_size – максимальный размер очереди кадров, используемых трекером. Используется при включенном параметре depth_data_flag, рекомендуемое значение: max(3, rgbFPS / depthFPS).
  • max_occlusion_time_wait – вещественное число в секундах. Когда трекер обнаруживает перекрытие лица, он удерживает позицию лица и пытается отследить его на новых кадрах в течение этого времени.
  • max_occlusion_count_wait – целое число. Аналогичен параметру max_occlusion_time_wait, но в этом случае время измеряется в количестве кадров, а не в секундах. Используется, только когда установлен флаг offline_work_i_e_dont_use_time.
  • offline_work_i_e_dont_use_time – целое число, 1 – включен, 0 – выключен. По умолчанию этот флаг выключен. При включении проверка по max_detector_confirm_wait_time не производится. Также вместо max_occlusion_time_wait используется max_occlusion_count_wait.
  • fda_max_bad_count_wait – целое число. Когда fda_tracker обнаруживает снижение качества лица, он пытается отследить это лицо с помощью трекера общего назначения (вместо алгоритма fda, разработатнного для лиц) в течение не более fda_max_bad_count_wait кадров.
  • base_angle – целое число: 0, 1, 2 или 3. Ориентация камеры: 0 – стандартная, 1 означает +90 градусов, 2 означает -90 градусов, 3 означает 180 градусов. При изменении ориентации камеры установите новое значение ориентации для этого параметра, иначе качество детекции снизится.
  • fake_detections_cnt – целое число. Количество стартовых позиций для поиска лиц при конфигурации video_worker_fdatracker_fake_detector.xml. Стартовая позиция - это заданное положение лица на изображении. Мы можем задать параметры стартовой позиции, если мы уверены в наличии лица на заданной области изображения. Изображение с размеченной стартовой позицией поступает в fake detector, функция которого - передача изображения сразу в фиттер. Подразумевается, что на изображении уже присутствует лицо, а значит можно сразу перейти к определению антропометрических точек.
  • fake_detections_period – целое число. Каждая стартовая позиция будет использоваться раз в fake_detections_period кадров.
  • fake_rect_center_xN, fake_rect_center_yN, fake_rect_angleN, fake_rect_sizeN – вещественные числа, которые обозначают параметры стартовых позиций. Стартовая позиция - N от 0 до fake_detections_cnt – 1 включительно. fake_rect_center_xNx координата центра относительно ширины изображения. fake_rect_center_yNy координата центра относительно высоты изображения. fake_rect_angleN – угол roll в градусах. fake_rect_sizeN – размер относительно max(ширина изображения, высота изображения).
  • downscale_rawsamples_to_preferred_size – целое число, 1 – включен, 0 – выключен. По умолчанию этот флаг включен. Когда флаг включен, Capturer уменьшает все образцы до предпочтительного размера (см. RawSample.downscaleToPreferredSize) в целях уменьшения потребления памяти, что приводит к снижению производительности. Рекомендуется отключать downscale_rawsamples_to_preferred_size и использовать RawSample.downscaleToPreferredSize вручную для образцов, которые вам нужно сохранить или удерживать в оперативной памяти в течение длительного времени.
  • squeeze_match_found_callback_groups – целое число, 1 – включен, 0 – выключен. По умолчанию этот флаг выключен. Когда трек в первый раз получает N последовательных совпадений с одним и тем же человеком из базы, все N совпадений будут отправлены (N = значение consecutive_match_count_for_match_found_callback), т.е. будет произведено N последовательных вызовов MatchFoundCallback. Но если squeeze_match_found_callback_groups включен, то будет отправлено только одно совпадение с минимальным расстоянием до базы.
  • debug_log_enabled – целое число, 1 – включен, 0 – выключен. По умолчанию этот флаг выключен. Также этот флаг можно включить, установив значение 1 в переменную окружения FACE_SDK_VIDEOWORKER_DEBUG_LOG_ENABLED. Если этот флаг включен, то VideoWorker логирует результаты работы в std::clog.
  • need_stable_results – целое число, 1 – включен, 0 – выключен. По умолчанию этот флаг выключен. Используется для генерации одинаковых разультатов при работе с одинаковыми данными. Отключает несколько оптимизаций, которые могут давать отличающиеся результаты из-за нестабильного порядка многопоточного выполнения операций. Также включается флаг offline_work_i_e_dont_use_time и устанавливается значение max_detection_period, равное 1, отключается пропуск кадров (отключение ограничения от max_frames_queue_size).