Видеодетекция лиц: findface-video-manager и findface-video-worker

Примечание

Компонент findface-video-worker поставляется в пакетах с ускорением на CPU (findface-video-worker-cpu) и GPU (findface-video-worker-gpu).

В этом разделе:

Функции findface-video-manager

Сервис findface-video-manager является частью модуля видеодетекции лиц и используется для непосредственного управления детекцией лиц на видео.

Сервис findface-video-manager взаимодействует с findface-video-worker следующим образом:

  • Обеспечивает findface-video-worker настройками и списком видеопотоков для обработки. Для этого он выдает findface-video-worker так называемое job-задание, задачу на обработку видео, которая содержит параметры конфигурации и сведения о видеопотоке.

  • В распределенной системе распределяет видеопотоки (job-задания) по свободным экземплярам findface-video-worker.

Примечание

Параметры конфигурации, передаваемые через job-задания, имеют больший приоритет, чем аналогичные параметры в файле конфигурации /etc/findface-video-manager.conf.

Для работы findface-video-manager требуется установленный сервис ETCD. ETCD представляет собой стороннее программное обеспечение, реализующее распределенное хранилище ключей findface-video-manager. Используется в качестве координационной службы в распределенной системе, обеспечивая отказоустойчивость работы видеодетектора лиц.

Полный список функций findface-video-manager:

  • конфигурирование параметров видеодетектора лиц,

  • управление списком видеопотоков для обработки,

  • управление видеодетекцией лиц.

Функции findface-video-worker

Компонент findface-video-worker (или findface-video-worker-gpu) является частью модуля видеодетекции лиц и служит для обнаружения лиц «на лету» в видеопотоке или видеофайле. Он поддерживает большинство видеоформатов и кодеков, которые могут быть декодированы FFmpeg.

Сервис findface-video-worker взаимодействует с сервисами findface-video-manager и findface-facerouter следующим образом:

  • По запросу findface-video-worker получает от findface-video-manager job-задание с настройками и списком видеопотоков для обработки.

  • Сервис findface-video-worker отправляет полученные нормализованные изображения лиц вместе с полными кадрами и метаданными, такими как рамка вокруг лица, ID камеры и время детекции, в сервис findface-facerouter для дальнейшей обработки.

Примечание

В ПК FindFace функции findface-facerouter выполняются сервисом findface-security.

Полный список функций findface-video-manager:

  • обнаружение лиц на видео,

  • извлечение нормализованных изображений лиц,

  • поиск наилучшего изображения лица,

  • дедупликация кадров с лицом (только один кадр на каждое событие распознавания лица).

При обработки видео findface-video-worker последовательно использует следующие алгоритмы:

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

  • Детектор лиц. Алгоритм детектирует, отслеживает и захватывает лица на видео. Может работать одновременно с несколькими лицами в кадре. С помощью встроенной нейронной сети выполняет поиск кадра с лучшим изображением лица. Как только лучшее изображение найдено, отправляет его в компонент findface-facerouter.

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

  • Режим реального времени

  • Буферный режим

Режим реального времени

В режиме реального времени findface-video-worker начинает отправлять изображения лица в компонент findface-facerouter на лету после появления лица в поле зрения видеокамеры. Доступны следующие опции отправки (см. /etc/findface-video-manager.conf и Добавление камеры):

  • Если параметр realtime_post_every_interval: true, детектор лиц выбирает лучший кадр в течение каждого из последовательных промежутков времени, равных realtime_post_interval, и отправляет его в findface-facerouter.

  • Если realtime_post_every_interval: false, детектор лиц выбирает лучшее изображение лица динамически:

    1. Сначала оценивается качество изображения лица. Если оно превышает некое предустановленное пороговое значение, то лицо отправляется в findface-facerouter.

    2. Порог повышается после каждой отправки изображения лица в findface-facerouter. Каждый раз, когда детектор лиц получает изображение того же лица лучшего качества, оно отправляется.

    3. При исчезновении лица из поля зрения видеокамеры снова устанавливается пороговое значение по умолчанию.

  • Если realtime_post_first_immediately: true: детектор лиц отправляет первое лицо из трека сразу после того, как оно пройдет через фильтры качества, размера и региона захвата (ROI), не дожидаясь окончания первого realtime_post_interval в режиме реального времени. Способ отправки последующих изображений лица зависит от установленного значения realtime_post_every_interval. Если realtime_post_first_immediately: false, детектор лиц отправляет первое лицо после окончания первого realtime_post_interval.

Буферный режим

Буферный режим требует меньший объем дискового пространства по сравнению с режимом реального времени, поскольку для каждого лица компонент findface-video-worker отправляет только одно изображение из трека, но наивысшего качества.

Буферный режим включается через параметр overall_only (см. /etc/findface-video-manager.conf и Добавление камеры).

Настройка видеодетекции лиц

Настройка видеодетектора лиц выполняется через следующие файлы конфигурации:

  1. Файл конфигурации компонента findface-video-manager /etc/findface-video-manager.conf:

    listen: 127.0.0.1:18810
    etcd:
      endpoints: 127.0.0.1:2379
      dial_timeout: 3s
    kafka:
      enabled: false
      endpoints: 127.0.0.1:9092
    master:
      lease_ttl: 10
      self_url: 127.0.0.1:18811
      self_url_http: 127.0.0.1:18810
    rpc:
      listen: 127.0.0.1:18811
      heart_beat_timeout: 4s
    router_url: http://127.0.0.1:18820/v0/frame
    exp_backoff:
      enabled: false
      min_delay: 1s
      max_delay: 1m0s
      factor: 2
      flush_interval: 2m0s
    ntls:
      enabled: false
      url: http://127.0.0.1:3185/
      update_interval: 1m0s
    prometheus:
      jobs_processed_duration_buckets:
      - 1
      - 30
      - 60
      - 500
      - 1800
      - 3600
      - 21600
      - .inf
    job_scheduler_script: ''
    stream_settings:
      ffmpeg_params: []
      md_threshold: 0.002
      md_scale: 0.3
      fd_frame_height: -1
      uc_max_time_diff: 30
      uc_max_dup: 3
      uc_max_avg_shift: 10
      det_period: 8
      realtime: false
      npersons: 4
      disable_drops: false
      tracker_threads: 4
      parse_sei: false
      image_arg: photo
      additional_headers: []
      additional_body: []
      api_timeout: 15000
      api_ssl_verify: true
      post_uniq: true
      min_score: -2
      min_d_score: -1000
      realtime_dly: 500
      realtime_post_perm: false
      rot: ''
      roi: ''
      draw_track: false
      send_track: 0
      min_face_size: 0
      max_face_size: 0
      overall: true
      only_norm: false
      max_candidates: 0
      jpeg_quality: 95
      ffmpeg_format: ''
    stream_settings_gpu:
      play_speed: -1
      filter_min_quality: 0.45
      filter_min_face_size: 1
      filter_max_face_size: 8192
      normalized_only: false
      jpeg_quality: 95
      overall_only: false
      use_stream_timestamp: false
      ffmpeg_params: []
      router_timeout_ms: 15000
      router_verify_ssl: true
      router_headers: []
      router_body: []
      start_stream_timestamp: 0
      imotion_threshold: 0
      rot: ''
      roi: ''
      realtime_post_interval: 1
      realtime_post_every_interval: false
      ffmpeg_format: ''
      disable_drops: false
      router_full_frame_png: false
      router_disable_normalized: false
      crop_fullframe_rot: false
      realtime_post_first_immediately: false
      post_first_track_frame: false
      post_last_track_frame: false
      track_max_duration_frames: 0
      send_track_history: false
      stream_data_filter: ''
    

Пользовательская настройка findface-video-manager выполняется с использованием следующих параметров:

Опция

Описание

etcd -> endpoints

IP-адрес и порт сервиса etcd. Значение по умолчанию: 127.0.0.1:2379.

ntls -> enabled

Если true, компонент findface-video-manager отправляет в компонент findface-video-worker задания только на обработку того количества видеокамер, которое указано в лицензии. Значение по умолчанию: false.

ntls -> url

IP-адрес и порт сервера findface-ntls. Значение по умолчанию: http://127.0.0.1:3185/.

router_url

IP-адрес и порт сервера findface-facerouter, который получает обнаруженные лица из findface-video-worker. В ПК FindFace функции findface-facerouter выполняет компонент findface-security. Значение по умолчанию: http://127.0.0.1:18820/v0/frame.

Вы также можете использовать следующие параметры:

Примечание

В разделе файла stream_settings-gpu вы найдете настройки, общие для всех видеопотоков. Настройки в данном разделе работают как в GPU, так и CPU-конфигурации. Настройки определенного потока, переданные в job-задании, имеют приоритет над настройками в файле конфигурации (см. Job-задания).

Примечание

Раздел stream_settings файла устарел и необходим только для обратной совместимости.

Опция

Описание

crop_fullframe_rot

Обрезать отправляемые полные кадры по ROT (региону отслеживания). Значение по умолчанию: false.

disable_drops

Включает/отключает отправку в компонент findface-facerouter всех подходящих лиц без пропусков. По умолчанию, если findface-video-worker не обладает достаточными ресурсами для обработки всех кадров с лицами, он отбрасывает некоторые из них. Если данная опция активна, findface-video-worker помещает лишние кадры в очередь, чтобы обработать их впоследствии. Значение по умолчанию: false.

ffmpeg_format

Передает формат FFMPEG (mxg, flv и т. д.), если он не может быть автоматически определен.

ffmpeg_params

Список ffmpeg-параметров видеопотока со значениями в виде массива ключ=значение: [“rtsp_transpotr=tcp”, .., “ss=00:20:00”]. Полный список параметров на сайте FFMPEG. Значение по умолчанию: параметры не указаны.

filter_max_face_size

Определяет максимальный размер лица в пикселях. Лица большего размера не отправляются. Значение по умолчанию: 8192.

filter_min_face_size

Определяет минимальный размер лица в пикселях. Лица меньшего размера не отправляются. Значение по умолчанию: 1.

filter_min_quality

Минимальное пороговое значение качества изображения лица. Значение по умолчанию: 0.45. Не меняйте значение по умолчанию без предварительной консультации с нашими техническими экспертами (support@ntechlab.com).

imotion_threshold

Минимальная интенсивность движения, которая будет регистрироваться детектором движения. Пороговое значение определяется эмпирически. Реперные точки: 0 = детектор выключен, 0.002 = значение по умолчанию, 0.05 = минимальная интенсивность слишком высока, чтобы зарегистрировать движение.

jpeg_quality

Качество сжатия исходного кадра в JPEG. Значение по умолчанию: 95 % от исходного размера.

normalized_only

Включает/отключает отправку только нормализованных лиц без исходных кадров. Значение по умолчанию: false.

overall_only

Буферный режим. Отправлять для лица один кадр наилучшего качества. Значение по умолчанию: true.

play_speed

Если меньше нуля, то скорость не ограничивается. В остальных случаях поток читается со скоростью play_speed. Не применимо для потоков с камер видеонаблюдения.

post_first_track_frame

Отправлять первый кадр трека. Значение по умолчанию: false.

post_last_track_frame

Отправлять последний кадр трека. Значение по умолчанию: false.

realtime_post_every_interval

Только для режима реального времени. Включает отправку лучшего кадра в течение периода времени realtime_post_interval. Если false, лучший кадр ищется динамически в порядке возрастания качества. Значение по умолчанию: false.

realtime_post_first_immediately

Отправлять лицо сразу после его появления в поле зрения видеокамеры (режим реального времени). Значение по умолчанию: false.

realtime_post_interval

Только для режима реального времени. Период времени в секундах, в течение которого детектор лиц выбирает лучший кадр из трека и отправляет его в компонент findface-facerouter. Значение по умолчанию: 1.

router_body

Массив дополнительных полей в POST-запросе с изображением лица в формате [“ключ=значение”]. По умолчанию дополнительные поля не передаются.

roi

Включает отправку на Сервер лиц, обнаруженных только внутри интересующей области WxH+X+Y. По умолчанию область не задана.

rot

Включает детектирование и отслеживание лиц только внутри заданной прямоугольной области WxH+X+Y. Используйте данную опцию, чтобы уменьшить нагрузку на findface-video-worker. По умолчанию область не задана.

router_disable_normalized

Отправлять только полные кадры без нормализованных изображений. Не включайте этот параметр, не посоветовавшись с нашей командой, так как он может повлиять на работу всей системы. Значение по умолчанию: false (отправка как полных кадров, так и нормализованных изображений).

router_full_frame_png

Отправлять полные кадры в формате PNG, а не в формате JPEG, как установлено по умолчанию. Не включайте этот параметр, не посоветовавшись с нашей командой, так как он может повлиять на работу всей системы. Значение по умолчанию: false (отправлять в формате JPEG).

router_headers

Массив дополнительных заголовков в POST-запросе с изображением лица в формате [“ключ=значение”]. По умолчанию дополнительные заголовки не передаются.

router_timeout_ms

Время ожидания в миллисекундах ответа от компонента findface-facerouter (findface-security в стандартной конфигурации ПК FindFace) на API-запрос компонента findface-video-worker. Если время ожидания истекло, регистрируется ошибка. Значение по умолчанию: 15000.

router_verify_ssl

Включает/отключает проверку подписи SSL-сертификата при взаимодействии по https findface-video-worker с компонентом findface-facerouter (findface-security в стандартной конфигурации ПК FindFace). Значение по умолчанию: true. Если false, может быть принят самоподписанный сертификат.

send_track_history

Отправлять историю трека. Значение по умолчанию: false.

start_stream_timestamp

Прибавлять указанное количество секунд к временным меткам из потока.

use_stream_timestamp

Если true, отправлять на сервер временные метки полученные из потока. Если false, отправлять текущие дату и время.

  1. Если вы выбрали пакет findface-video-worker-cpu с ускорением на CPU, используйте файл конфигурации /etc/findface-video-worker-cpu.ini:

    ## read streams from file, do not use VideoManager
    ## type:string env:CFG_INPUT longopt:--input
    input =
    
    ## exit on first finished job, only when --input specified
    ## type:bool env:CFG_EXIT_ON_FIRST_FINISHED longopt:--exit-on-first-finished
    exit_on_first_finished = false
    
    ## batch size
    ## type:number env:CFG_BATCH_SIZE longopt:--batch-size
    batch_size = 4
    
    ## http server port for metrics, 0=do not start server
    ## type:number env:CFG_METRICS_PORT longopt:--metrics-port
    metrics_port = 0
    
    ## resize scale, 1=do not resize
    ## type:double env:CFG_RESIZE_SCALE longopt:--resize-scale
    resize_scale = 1.000000
    
    ## maximum number of streams
    ## type:number env:CFG_CAPACITY longopt:--capacity
    capacity = 10
    
    ## command to obtain videomanager's grpc ip:port
    ## type:string env:CFG_MGR_CMD longopt:--mgr-cmd
    mgr_cmd =
    
    ## videomanager grpc ip:port
    ## type:string env:CFG_MGR_STATIC longopt:--mgr-static
    mgr_static = 127.0.0.1:18811
    
    ## ntls server ip:port
    ## type:string env:CFG_NTLS_ADDR longopt:--ntls-addr
    ntls_addr = 127.0.0.1:3133
    
    ## debug: save faces to dir
    ## type:string env:CFG_SAVE_DIR longopt:--save-dir
    save_dir =
    
    ## minimum face size
    ## type:number env:CFG_MIN_FACE_SIZE longopt:--min-face-size
    min_face_size = 60
    
    ## preinit detector for specified resolutions: "640x480;1920x1080"
    ## type:string env:CFG_RESOLUTIONS longopt:--resolutions
    resolutions =
    
    ## use `resolutions` as only possible values, others will rescale
    ## type:bool env:CFG_STRICT_RESOLUTIONS longopt:--strict-resolutions
    strict_resolutions = false
    
    ## worker labels: labels = k=v;group=enter
    ## type:string env:CFG_LABELS longopt:--labels
    labels =
    
    ## use timestamps from SEI packet
    ## type:bool env:CFG_USE_TIME_FROM_SEI longopt:--use-time-from-sei
    use_time_from_sei = false
    
    ## reader frame buffer size
    ## type:number env:CFG_FRAME_BUFFER_SIZE longopt:--frame-buffer-size
    frame_buffer_size = 128
    
    ## skip count
    ## type:number env:CFG_SKIP_COUNT longopt:--skip-count
    skip_count = 2
    
    #------------------------------
    [streamer]
    #------------------------------
    ## streamer/shots webserver port, 0=disabled
    ## type:number env:CFG_STREAMER_PORT longopt:--streamer-port
    port = 18999
    
    ## streamer url - how to access this worker on streamer_port
    ## type:string env:CFG_STREAMER_URL longopt:--streamer-url
    url = 127.0.0.1:18999
    
    ## use tracks instead detects for streamer
    ## type:bool env:CFG_STREAMER_TRACKS longopt:--streamer-tracks
    tracks = false
    
    ## use tracks with lastFrameId=currentFrameId (.tracks must be true)
    ## type:bool env:CFG_STREAMER_TRACKS_LAST longopt:--streamer-tracks-last
    tracks_last = false
    
    #------------------------------
    [liveness]
    #------------------------------
    ## path to liveness fnk
    ## type:string env:CFG_LIVENESS_FNK longopt:--liveness-fnk
    fnk =
    
    ## path to normalization for liveness
    ## type:string env:CFG_LIVENESS_NORM longopt:--liveness-norm
    norm =
    
    ## liveness internal algo param
    ## type:double env:CFG_LIVENESS_INTERVAL longopt:--liveness-interval
    interval = 1.000000
    
    ## liveness internal algo param
    ## type:number env:CFG_LIVENESS_STDEV_CNT longopt:--liveness-stdev-cnt
    stdev_cnt = 1
    
    #------------------------------
    [imotion]
    #------------------------------
    ## use shared decoder for imotion (experimental)
    ## type:bool env:CFG_IMOTION_SHARED_DECODER longopt:--imotion-shared-decoder
    shared_decoder = false
    
    #------------------------------
    [send]
    #------------------------------
    ## posting faces threads
    ## type:number env:CFG_SEND_THREADS longopt:--send-threads
    threads = 8
    
    ## posting faces maximum queue size
    ## type:number env:CFG_SEND_QUEUE_LIMIT longopt:--send-queue-limit
    queue_limit = 256
    
    #------------------------------
    [tracker]
    #------------------------------
    ## interpolate undetected bboxes in track
    ## type:bool env:CFG_TRACKER_INTERPOLATE_BBOXES longopt:--tracker-interpolate-bboxes
    interpolate_bboxes = true
    
    ## max face miss duration, sec
    ## type:double env:CFG_TRACKER_MISS_INTERVAL longopt:--tracker-miss-interval
    miss_interval = 1.000000
    
    ## overlap threshold
    ## type:double env:CFG_TRACKER_OVERLAP_THRESHOLD longopt:--tracker-overlap-threshold
    overlap_threshold = 0.250000
    
    #------------------------------
    [models]
    #------------------------------
    ## path to pedestrian detector fnk
    ## type:string env:CFG_MODELS_BODY_DETECTOR longopt:--models-body-detector
    body_detector =
    
    ## path to detector fnk
    ## type:string env:CFG_MODELS_DETECTOR longopt:--models-detector
    detector = /usr/share/findface-data/models/facedet/cheetah_fast.cpu.fnk
    
    ## path to quality fnk
    ## type:string env:CFG_MODELS_QUALITY longopt:--models-quality
    quality = /usr/share/findface-data/models/faceattr/quality.v1.cpu.fnk
    
    ## path to norm for quality fnk
    ## type:string env:CFG_MODELS_NORM_QUALITY longopt:--models-norm-quality
    norm_quality = /usr/share/findface-data/models/facenorm/bee_fast.cpu.fnk
    
    ## path to norm_crop2x fnk, for face send
    ## type:string env:CFG_MODELS_NORM_CROP2X longopt:--models-norm-crop2x
    norm_crop2x = /usr/share/findface-data/models/facenorm/crop2x.v2_maxsize400.cpu.fnk
    
    ## path to cache directory
    ## type:string env:CFG_MODELS_CACHE_DIR longopt:--models-cache-dir
    cache_dir = /var/cache/findface/models_cache
    

    Если вы выбрали пакет findface-video-worker-gpu с ускорением на GPU, используйте файл конфигурации /etc/findface-video-worker-gpu.ini.

    ## cuda device number
    ## type:number env:CFG_DEVICE_NUMBER longopt:--device-number
    device_number = 0
    
    ## read streams from file, do not use VideoManager
    ## type:string env:CFG_INPUT longopt:--input
    input =
    
    ## exit on first finished job, only when --input specified
    ## type:bool env:CFG_EXIT_ON_FIRST_FINISHED longopt:--exit-on-first-finished
    exit_on_first_finished = false
    
    ## batch size
    ## type:number env:CFG_BATCH_SIZE longopt:--batch-size
    batch_size = 8
    
    ## http server port for metrics, 0=do not start server
    ## type:number env:CFG_METRICS_PORT longopt:--metrics-port
    metrics_port = 0
    
    ## resize scale, 1=do not resize
    ## type:double env:CFG_RESIZE_SCALE longopt:--resize-scale
    resize_scale = 1.000000
    
    ## maximum number of streams
    ## type:number env:CFG_CAPACITY longopt:--capacity
    capacity = 30
    
    ## command to obtain videomanager's grpc ip:port
    ## type:string env:CFG_MGR_CMD longopt:--mgr-cmd
    mgr_cmd =
    
    ## videomanager grpc ip:port
    ## type:string env:CFG_MGR_STATIC longopt:--mgr-static
    mgr_static = 127.0.0.1:18811
    
    ## ntls server ip:port
    ## type:string env:CFG_NTLS_ADDR longopt:--ntls-addr
    ntls_addr = 127.0.0.1:3133
    
    ## debug: save faces to dir
    ## type:string env:CFG_SAVE_DIR longopt:--save-dir
    save_dir =
    
    ## minimum face size
    ## type:number env:CFG_MIN_FACE_SIZE longopt:--min-face-size
    min_face_size = 60
    
    ## preinit detector for specified resolutions: "640x480;1920x1080"
    ## type:string env:CFG_RESOLUTIONS longopt:--resolutions
    resolutions =
    
    ## use `resolutions` as only possible values, others will rescale
    ## type:bool env:CFG_STRICT_RESOLUTIONS longopt:--strict-resolutions
    strict_resolutions = false
    
    ## worker labels: labels = k=v;group=enter
    ## type:string env:CFG_LABELS longopt:--labels
    labels =
    
    ## use timestamps from SEI packet
    ## type:bool env:CFG_USE_TIME_FROM_SEI longopt:--use-time-from-sei
    use_time_from_sei = false
    
    ## reader frame buffer size
    ## type:number env:CFG_FRAME_BUFFER_SIZE longopt:--frame-buffer-size
    frame_buffer_size = 128
    
    ## skip count
    ## type:number env:CFG_SKIP_COUNT longopt:--skip-count
    skip_count = 0
    
    #------------------------------
    [streamer]
    #------------------------------
    ## streamer/shots webserver port, 0=disabled
    ## type:number env:CFG_STREAMER_PORT longopt:--streamer-port
    port = 18999
    
    ## streamer url - how to access this worker on streamer_port
    ## type:string env:CFG_STREAMER_URL longopt:--streamer-url
    url = 127.0.0.1:18999
    
    ## use tracks instead detects for streamer
    ## type:bool env:CFG_STREAMER_TRACKS longopt:--streamer-tracks
    tracks = false
    
    ## use tracks with lastFrameId=currentFrameId (.tracks must be true)
    ## type:bool env:CFG_STREAMER_TRACKS_LAST longopt:--streamer-tracks-last
    tracks_last = false
    
    #------------------------------
    [liveness]
    #------------------------------
    ## path to liveness fnk
    ## type:string env:CFG_LIVENESS_FNK longopt:--liveness-fnk
    fnk =
    
    ## path to normalization for liveness
    ## type:string env:CFG_LIVENESS_NORM longopt:--liveness-norm
    norm =
    
    ## liveness internal algo param
    ## type:double env:CFG_LIVENESS_INTERVAL longopt:--liveness-interval
    interval = 1.000000
    
    ## liveness internal algo param
    ## type:number env:CFG_LIVENESS_STDEV_CNT longopt:--liveness-stdev-cnt
    stdev_cnt = 1
    
    #------------------------------
    [imotion]
    #------------------------------
    ## use shared decoder for imotion (experimental)
    ## type:bool env:CFG_IMOTION_SHARED_DECODER longopt:--imotion-shared-decoder
    shared_decoder = false
    
    #------------------------------
    [send]
    #------------------------------
    ## posting faces threads
    ## type:number env:CFG_SEND_THREADS longopt:--send-threads
    threads = 8
    
    ## posting faces maximum queue size
    ## type:number env:CFG_SEND_QUEUE_LIMIT longopt:--send-queue-limit
    queue_limit = 256
    
    #------------------------------
    [tracker]
    #------------------------------
    ## interpolate undetected bboxes in track
    ## type:bool env:CFG_TRACKER_INTERPOLATE_BBOXES longopt:--tracker-interpolate-bboxes
    interpolate_bboxes = true
    
    ## max face miss duration, sec
    ## type:double env:CFG_TRACKER_MISS_INTERVAL longopt:--tracker-miss-interval
    miss_interval = 1.000000
    
    ## overlap threshold
    ## type:double env:CFG_TRACKER_OVERLAP_THRESHOLD longopt:--tracker-overlap-threshold
    overlap_threshold = 0.250000
    
    #------------------------------
    [models]
    #------------------------------
    ## path to pedestrian detector fnk
    ## type:string env:CFG_MODELS_BODY_DETECTOR longopt:--models-body-detector
    body_detector =
    
    ## path to detector fnk
    ## type:string env:CFG_MODELS_DETECTOR longopt:--models-detector
    detector = /usr/share/findface-data/models/facedet/cheetah_fast.gpu.fnk
    
    ## path to quality fnk
    ## type:string env:CFG_MODELS_QUALITY longopt:--models-quality
    quality = /usr/share/findface-data/models/faceattr/quality.v1.gpu.fnk
    
    ## path to norm for quality fnk
    ## type:string env:CFG_MODELS_NORM_QUALITY longopt:--models-norm-quality
    norm_quality = /usr/share/findface-data/models/facenorm/bee_fast.gpu.fnk
    
    ## path to norm_crop2x fnk, for face send
    ## type:string env:CFG_MODELS_NORM_CROP2X longopt:--models-norm-crop2x
    norm_crop2x = /usr/share/findface-data/models/facenorm/crop2x.v2_maxsize400.gpu.fnk
    
    ## path to cache directory
    ## type:string env:CFG_MODELS_CACHE_DIR longopt:--models-cache-dir
    cache_dir = /var/cache/findface/models_cache
    
    #------------------------------
    [video_decoder]
    #------------------------------
    ## decode video on cpu
    ## type:bool env:CFG_VIDEO_DECODER_CPU longopt:--video-decoder-cpu
    cpu = false
    

    Пользовательская настройка findface-video-worker на CPU/GPU выполняется с использованием следующих параметров:

    CPU

    GPU

    Описание

    batch_size

    Отправлять лица в пакетах указанного размера.

    capacity

    Максимальное количество видеопотоков, обрабатываемых findface-video-worker.

    Н/п

    cpu

    При необходимости декодировать видео на CPU.

    Н/п

    device_number

    Номер используемого GPU-устройства.

    exit_on_first_finished

    (Только если указан input) Выйти после завершения первого job-задания.

    input

    Обрабатывать видеопотоки из файла, игнорируя данные потоков, поступающие от findface-video-manager.

    labels

    Метки, используемые для привязки экземпляра findface-video-worker к определенной группе камер. См. Привязка группы камер к экземпляру findface-video-worker.

    liveness -> fnk

    Путь к детектору живых лиц (Liveness).

    liveness -> norm

    Путь к нормализатору, используемому в детекторе живых лиц (Liveness).

    mgr-cmd

    Команда для получения IP-адреса компонента findface-video-manager (опционально вместо mgr-static).

    mgr-static

    IP-адрес сервера findface-video-manager, который обеспечивает findface-video-worker настройками и списком видеопотоков для обработки.

    metrics_port

    Порт HTTP-сервера для отправки метрик. Если 0, метрики не отправляются.

    min_face_size

    Минимальный обнаруживаемый размер лица.

    ntls-addr

    IP-адрес и порт сервера findface-ntls.

    resize_scale

    Масштабировать видеокадры с заданным коэффициентом.

    resolutions

    Предварительно инициализируйте findface-video-worker для конкретных разрешений. Например, «640x480;1920x1080».

    save_dir

    (Для отладки) Сохранять обнаруженные лица в заданный каталог.

    streamer -> port, url

    IP-адрес и порт для доступа к видеостене.

    use_time_from_sei

    (Для MPEG-2) Используйте временные метки SEI (supplemental enhancement information).

Job-задания

Сервис findface-video-manager выдает findface-video-worker так называемое job-задание, задачу на обработку видео, которая содержит параметры конфигурации и сведения о видеопотоке.

Существует 2 типа job-заданий:

  • камера:

    curl http://127.0.0.1:18810/job/ffsec-camera:22 | jq
    {
      "id": "ffsec-camera:22",
      "enabled": true,
      "stream_url": "rtsp://ntech:[email protected]:654/000000010000babe0000accc8e9e3a58/live",
      "labels": {},
      "router_url": "http://127.0.0.1/video-detector/frame",
      "single_pass": false,
      "stream_settings": {
        "ffmpeg_params": [],
        "md_threshold": 0.002,
        "md_scale": 0.3,
        "fd_frame_height": -1,
        "uc_max_time_diff": 30,
        "uc_max_dup": 3,
        "uc_max_avg_shift": 10,
        "det_period": 8,
        "realtime": false,
        "npersons": 4,
        "disable_drops": false,
        "tracker_threads": 4,
        "parse_sei": false,
        "image_arg": "photo",
        "additional_headers": [],
        "additional_body": [],
        "api_timeout": 15000,
        "api_ssl_verify": true,
        "post_uniq": true,
        "min_score": -2,
        "min_d_score": -1000,
        "realtime_dly": 500,
        "realtime_post_perm": false,
        "rot": "",
        "roi": "",
        "draw_track": false,
        "send_track": 0,
        "min_face_size": 0,
        "max_face_size": 0,
        "overall": true,
        "only_norm": false,
        "max_candidates": 0,
        "jpeg_quality": 95,
        "ffmpeg_format": ""
      },
      "stream_settings_gpu": {
        "play_speed": -1,
        "filter_min_quality": 0.45,
        "filter_min_face_size": 1,
        "filter_max_face_size": 8192,
        "normalized_only": false,
        "jpeg_quality": 95,
        "overall_only": false,
        "use_stream_timestamp": false,
        "ffmpeg_params": [],
        "router_timeout_ms": 15000,
        "router_verify_ssl": true,
        "router_headers": [
          "Authorization=Token 7db297c4107518b52b4e2195b72c5947"
        ],
        "router_body": [],
        "start_stream_timestamp": 0,
        "imotion_threshold": 0,
        "rot": "",
        "roi": "",
        "realtime_post_interval": 1,
        "realtime_post_every_interval": false,
        "ffmpeg_format": "",
        "disable_drops": false,
        "router_full_frame_png": false,
        "router_disable_normalized": false,
        "crop_fullframe_rot": false,
        "realtime_post_first_immediately": false
      },
      "status": "INPROGRESS",
      "status_msg": "",
      "statistic": {
        "processed_duration": 5729.5728,
        "faces_posted": 43,
        "faces_failed": 0,
        "faces_not_posted": 0,
        "processing_fps": 15.589469,
        "frames_dropped": 0,
        "frames_processed": 87121,
        "frames_imotion_skipped": 0,
        "decoding_soft_errors": 0,
        "frame_width": 1920,
        "frame_height": 1200,
        "job_starts": 1
      },
      "restream_url": "ws://127.0.0.1:18999/stream/ffsec-camera:22",
      "shots_url": "http://127.0.0.1:18999/shot/ffsec-camera:22",
      "worker_id": "tevmenova-ntechlab_gpu_2a1fd5290195670b689d8e01e93b673c",
      "version": "bt1s8kjm51nv2hqc4qg0"
    
  • видеоархив:

    curl http://127.0.0.1:18810/job/ffsec-video-archive:1 | jq
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  2094    0  2094    0     0  2044k      0 --:--:-- --:--:-- --:--:-- 2044k
    {
      "id": "ffsec-video-archive:1",
      "enabled": true,
      "stream_url": "file:///var/lib/findface-security/uploads/videos/1.bin",
      "labels": {
        "camera_group_id": "1",
        "camera_id": ""
      },
      "router_url": "http://127.0.0.1/video-detector/frame",
      "single_pass": true,
      "stream_settings": {
        "ffmpeg_params": [],
        "md_threshold": 0.002,
        "md_scale": 0.3,
        "fd_frame_height": -1,
        "uc_max_time_diff": 30,
        "uc_max_dup": 3,
        "uc_max_avg_shift": 10,
        "det_period": 8,
        "realtime": false,
        "npersons": 4,
        "disable_drops": false,
        "tracker_threads": 4,
        "parse_sei": false,
        "image_arg": "photo",
        "additional_headers": [],
        "additional_body": [],
        "api_timeout": 15000,
        "api_ssl_verify": true,
        "post_uniq": true,
        "min_score": -2,
        "min_d_score": -1000,
        "realtime_dly": 500,
        "realtime_post_perm": false,
        "rot": "",
        "roi": "",
        "draw_track": false,
        "send_track": 0,
        "min_face_size": 0,
        "max_face_size": 0,
        "overall": true,
        "only_norm": false,
        "max_candidates": 0,
        "jpeg_quality": 95,
        "ffmpeg_format": ""
      },
      "stream_settings_gpu": {
        "play_speed": -1,
        "filter_min_quality": 0.45,
        "filter_min_face_size": 1,
        "filter_max_face_size": 8192,
        "normalized_only": false,
        "jpeg_quality": 95,
        "overall_only": false,
        "use_stream_timestamp": false,
        "ffmpeg_params": [],
        "router_timeout_ms": 15000,
        "router_verify_ssl": true,
        "router_headers": [
          "Authorization=Token 7db297c4107518b52b4e2195b72c5947"
        ],
        "router_body": [],
        "start_stream_timestamp": 0,
        "imotion_threshold": 0,
        "rot": "",
        "roi": "",
        "realtime_post_interval": 1,
        "realtime_post_every_interval": false,
        "ffmpeg_format": "",
        "disable_drops": true,
        "router_full_frame_png": false,
        "router_disable_normalized": false,
        "crop_fullframe_rot": false,
        "realtime_post_first_immediately": false
      },
      "status": "INPROGRESS",
      "status_msg": "",
      "statistic": {
        "processed_duration": 291,
        "faces_posted": 335,
        "faces_failed": 0,
        "faces_not_posted": 0,
        "processing_fps": 359.69928,
        "frames_dropped": 0,
        "frames_processed": 8731,
        "frames_imotion_skipped": 0,
        "decoding_soft_errors": 0,
        "frame_width": 1280,
        "frame_height": 720,
        "job_starts": 1
      },
      "restream_url": "ws://127.0.0.1:18999/stream/ffsec-video-archive:1",
      "shots_url": "http://127.0.0.1:18999/shot/ffsec-video-archive:1",
      "worker_id": "tevmenova-ntechlab_gpu_2a1fd5290195670b689d8e01e93b673c",
      "version": "bt1tm3bm51nv2hqc4qh0"
    

Каждое job-задание имеет следующие параметры:

  • id: id job-задания.

  • enabled: статус активности.

  • stream_url: URL/адрес видеопотока или файла для обработки.

  • labels: метки, по которым будет осуществляться обработка обнаруженных лиц в компоненте findface-facerouter (findface-security в стандартной конфигурации ПК FindFace).

  • single_pass: если true (по умолчанию false), то не перезапускать обработку потока в случае ошибки.

  • router_url: IP-адрес и порт компонента findface-facerouter (findface-security в стандартной конфигурации ПК FindFace), в который компонент findface-video-worker отправляет обнаруженные лица для последующей обработки.

  • stream_settings: используется только для обратной совместимости.

  • stream_settings_gpu: параметры видеопотока, дублирующие параметры в файле конфигурации /etc/findface-video-manager.conf (обладая при этом большим приоритетом).

  • status: статус job-задания.

  • status_msg: дополнительная информация о статусе job-задания.

  • statistic: статистика выполнения job-задания (продолжительность процесса обработки, количество отправленных и неотправленных лиц, кадровая частота обработки, количество обработанных и пропущенных кадров, время начала обработки и т. д.).

  • worker_id: id экземпляра findface-video-worker, выполняющего job-задание.