Распознавание силуэтов и их атрибутов

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

Атрибуты силуэтов следующие:

  • пол:

    • мужской;

    • женский;

  • возраст (по группам):

    • 0-16 лет;

    • 17-35 лет;

    • 36-50 лет;

    • 50+ лет;

  • тип одежды:

    • обобщенная категория одежды верхней части тела: с длинными рукавами, с короткими рукавами, без рукавов;

    • детализированный тип одежды верхней части тела: куртка, пальто, жилет без рукавов, толстовка, футболка, рубашка, платье;

    • тип одежды нижней части тела: брюки, юбка, шорты, неопределенный;

    • тип головного убора: шапка/шляпа/кепка, капюшон/платок, без головного убора;

  • цвет одежды (верх/низ);

  • наличие средств индивидуальной защиты (СИЗ):

    • наименование СИЗ: жилет, каска;

    • цвет СИЗ;

    • точность распознавания СИЗ;

  • наличие сумки:

    • на спине;

    • в руке(-ах).

Распознавание силуэтов и атрибутов силуэтов можно настроить на уровне установки продукта. В этом разделе описывается как включить распознавание силуэтов и атрибутов силуэтов, если этот шаг был пропущен при установке.

Для включения распознавания силуэтов и их атрибутов выполните следующие действия:

  1. В файле конфигурации /opt/findface-multi/configs/findface-extraction-api/findface-extraction-api.yaml укажите модели нейронных сетей для распознавания объектов типа силуэт и их атрибутов.

    Важно

    Удостоверьтесь, что для каждой модели вы указали правильный тип ускорения CPU или GPU: он должен совпадать с типом ускорения findface-extraction-api. Обратите внимание, что findface-extraction-api на CPU может работать только с CPU-моделями, в то время как findface-extraction-api на GPU поддерживает как GPU-, так и CPU-модели.

    1. Откройте файл конфигурации findface-extraction-api.yaml.

      sudo vi /opt/findface-multi/configs/findface-extraction-api/findface-extraction-api.yaml
      
    2. Укажите модель детектора силуэтов в разделе detectors -> models, вставив следующий код:

      GPU

      detectors:
      
        ...
        models:
          ...
          body_gustav:
            aliases:
            - body
            - edie
            - shiloette
            - glen
            model: detector/body.gustav_normal.015.gpu.fnk
            options:
              min_object_size: 32
              resolutions:
              - 256x256
              - 384x384
              - 512x512
              - 768x768
              - 1024x1024
              - 1536x1536
              - 2048x2048
        ...
      

      CPU

      detectors:
      
        ...
        models:
          ...
          body_gustav:
            aliases:
            - body
            - edie
            - shiloette
            - glen
            model: detector/body.gustav_normal.015.cpu.fnk
            options:
              min_object_size: 32
              resolutions:
              - 256x256
              - 384x384
              - 512x512
              - 768x768
              - 1024x1024
              - 1536x1536
              - 2048x2048
        ...
      
    3. Убедитесь, что раздел objects -> body содержит quality_attribute: body_quality и, в зависимости от вашего типа ускорения, base_normalizer: facenorm/cropbbox.v2.gpu.fnk или base_normalizer: facenorm/cropbbox.v2.cpu.fnk:

      GPU

      objects:
        ...
        body:
          base_normalizer: facenorm/cropbbox.v2.gpu.fnk
          quality_attribute: body_quality
        ...
      

      CPU

      objects:
        ...
        body:
          base_normalizer: facenorm/cropbbox.v2.cpu.fnk
          quality_attribute: body_quality
        ...
      
    4. Убедитесь, что раздел normalizers содержит модель нормализатора cropbbox, как показано в примере ниже. Данный нормализатор требуется для работы экстракторов.

      GPU

      normalizers:
        ...
      
        models:
          ...
          cropbbox:
            model: facenorm/cropbbox.v2.gpu.fnk
          ...
      

      CPU

      normalizers:
        ...
      
        models:
          ...
          cropbbox:
            model: facenorm/cropbbox.v2.cpu.fnk
          ...
      
    5. Укажите модели для экстракции векторов признаков в разделе extractors -> models, в зависимости от необходимых экстракторов:

      GPU

      extractors:
         ...
         models:
          body_action_base6: ''
          body_action_car: ''
          body_action_fights: ''
          body_age_gender: pedattr/pedattr.age_gender.v0.gpu.fnk
          body_bags: pedattr/pedattr.bags.v0.gpu.fnk
          body_clothes: pedattr/pedattr.clothes_type.v0.gpu.fnk
          body_clothes34671: ''
          body_color: pedattr/pedattr.color.v1.gpu.fnk
          body_emben: pedrec/pedrec.clio.gpu.fnk
          body_fall: ''
          body_handface: ''
          body_protective_equipment: pedattr/pedattr.protective.v1.gpu.fnk
          body_quality: pedattr/pedattr.quality.v0.gpu.fnk
      

      CPU

      extractors:
         ...
         models:
          body_action_base6: ''
          body_action_car: ''
          body_action_fights: ''
          body_age_gender: pedattr/pedattr.age_gender.v0.cpu.fnk
          body_bags: pedattr/pedattr.bags.v0.cpu.fnk
          body_clothes: pedattr/pedattr.clothes_type.v0.cpu.fnk
          body_clothes34671: ''
          body_color: pedattr/pedattr.color.v1.cpu.fnk
          body_emben: pedrec/pedrec.clio.cpu.fnk
          body_fall: ''
          body_handface: ''
          body_protective_equipment: pedattr/pedattr.protective.v1.cpu.fnk
          body_quality: pedattr/pedattr.quality.v0.cpu.fnk
      

      Доступны следующие экстракторы:

      Экстрактор

      Настройка

      возраст и пол

      body_age_gender: pedattr/pedattr.age_gender.v0.gpu.fnk

      body_age_gender: pedattr/pedattr.age_gender.v0.cpu.fnk

      наличие сумки

      body_bags: pedattr/pedattr.bags.v0.gpu.fnk

      body_bags: pedattr/pedattr.bags.v0.cpu.fnk

      тип одежды

      body_clothes: pedattr/pedattr.clothes_type.v0.gpu.fnk

      body_clothes: pedattr/pedattr.clothes_type.v0.cpu.fnk

      цвет одежды

      body_color: pedattr/pedattr.color.v1.gpu.fnk

      body_color: pedattr/pedattr.color.v1.cpu.fnk

      вектор признаков объекта силуэт

      body_emben: pedrec/pedrec.clio.gpu.fnk

      body_emben: pedrec/pedrec.clio.cpu.fnk

      наличие СИЗ

      body_protective_equipment: pedattr/pedattr.protective.v1.gpu.fnk

      body_protective_equipment: pedattr/pedattr.protective.v1.cpu.fnk

      качество изображения силуэта

      body_quality: pedattr/pedattr.quality.v0.gpu.fnk

      body_quality: pedattr/pedattr.quality.v0.cpu.fnk

      Совет

      Для того чтобы отключить модель, передайте в соответствующий параметр пустое значение ''. Не удаляйте сам параметр, поскольку в этом случае будет выполняться поиск модели по умолчанию.

      Важно

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

      GPU

      extractors:
         ...
         models:
          body_action_base6: ''
          body_action_car: ''
          body_action_fights: ''
          body_age_gender: ''
          body_bags: ''
          body_clothes: ''
          body_clothes34671: ''
          body_color: ''
          body_emben: pedrec/pedrec.clio.gpu.fnk
          body_fall: ''
          body_handface: ''
          body_protective_equipment: ''
          body_quality: pedattr/pedattr.quality.v0.gpu.fnk
      

      CPU

      extractors:
         ...
         models:
          body_action_base6: ''
          body_action_car: ''
          body_action_fights: ''
          body_age_gender: ''
          body_bags: ''
          body_clothes: ''
          body_clothes34671: ''
          body_color: ''
          body_emben: pedrec/pedrec.clio.cpu.fnk
          body_fall: ''
          body_handface: ''
          body_protective_equipment: ''
          body_quality: pedattr/pedattr.quality.v0.cpu.fnk
      
    6. Перезапустите контейнер findface-multi-findface-extraction-api-1.

      sudo docker container restart findface-multi-findface-extraction-api-1
      
  2. Внесите изменения в конфигурационный файл /opt/findface-multi/configs/findface-video-worker/findface-video-worker.yaml.

    1. В разделе models укажите модели нейронных сетей для объекта body по аналогии с примером:

      GPU

      sudo vi /opt/findface-multi/configs/findface-video-worker/findface-video-worker.yaml
      
      models:
        ...
        detectors:
          ...
          body:
            fnk_path: /usr/share/findface-data/models/detector/body.jasmine_fast.018.gpu.fnk
            min_size: 60
          ...
        normalizers:
          ...
          body_norm:
            fnk_path: /usr/share/findface-data/models/facenorm/cropbbox.v2.gpu.fnk
          body_norm_quality:
            fnk_path: /usr/share/findface-data/models/facenorm/cropbbox.v2.gpu.fnk
          ...
        extractors:
          ...
          body_quality:
            fnk_path: /usr/share/findface-data/models/pedattr/pedattr.quality.v0.gpu.fnk
            normalizer: body_norm_quality
      

      CPU

      sudo vi /opt/findface-multi/configs/findface-video-worker/findface-video-worker.yaml
      
      models:
        ...
        detectors:
          ...
          body:
            fnk_path: /usr/share/findface-data/models/detector/body.jasmine_fast.018.cpu.fnk
            min_size: 60
          ...
        normalizers:
          ...
          body_norm:
            fnk_path: /usr/share/findface-data/models/facenorm/cropbbox.v2.cpu.fnk
          body_norm_quality:
            fnk_path: /usr/share/findface-data/models/facenorm/cropbbox.v2.cpu.fnk
          ...
        extractors:
          ...
          body_quality:
            fnk_path: /usr/share/findface-data/models/pedattr/pedattr.quality.v0.cpu.fnk
            normalizer: body_norm_quality
      
    2. Убедитесь, что добавлен раздел objects -> body:

      objects:
        ...
        body:
          normalizer: body_norm
          quality: body_quality
          track_features: ''
      
    3. Перезапустите контейнер findface-multi-findface-video-worker-1.

      sudo docker container restart findface-multi-findface-video-worker-1
      
  3. Откройте файл конфигурации /opt/findface-multi/configs/findface-video-manager/findface-video-manager.yaml и убедитесь, что он содержит раздел body в detectors, аналогичный приведенному ниже.

    sudo vi /opt/findface-multi/configs/findface-video-manager/findface-video-manager.yaml
    
    detectors:
      ...
      body:
        filter_min_quality: 0.6
        filter_min_size: 70
        filter_max_size: 8192
        roi: ''
        fullframe_crop_rot: false
        fullframe_use_png: false
        jpeg_quality: 95
        overall_only: true
        realtime_post_first_immediately: false
        realtime_post_interval: 1
        realtime_post_every_interval: false
        track_interpolate_bboxes: true
        track_miss_interval: 1
        track_overlap_threshold: 0.25
        track_max_duration_frames: 0
        track_send_history: false
        post_best_track_frame: true
        post_best_track_normalize: true
        post_first_track_frame: false
        post_last_track_frame: false
        tracker_type: simple_iou
        track_deep_sort_matching_threshold: 0.65
        track_deep_sort_filter_unconfirmed_tracks: true
        track_object_is_principal: false
        track_history_active_track_miss_interval: 0
    
  4. Включите распознавание силуэтов и атрибутов силуэтов в файле конфигурации /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py. Выполните следующие действия:

    1. В разделе FFSECURITY установите 'ENABLE_BODIES: True.

      sudo vi /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py
      
      FFSECURITY = {
          ...
      
          # optional objects to detect
          'ENABLE_BODIES': True,
          ...
      
    2. Чтобы улучшить качество распознавания силуэтов, мы рекомендуем включить дополнительный анализ атрибутов. В этом случае система сравнивает не только векторы признаков двух силуэтов, но и их атрибуты. Вывод о совпадении силуэтов делается только в том случае, если совпадают как векторы признаков, так и атрибуты.

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

      • bottom_color: цвет одежды нижней части тела;

      • top_color: цвет одежды верхней части тела;

      • headwear: тип и наличие/отсутствие головного убора;

      • detailed_upper_clothes: детализированный тип одежды верхней части тела, например, куртка;

      • upper_clothes: обобщенная категория одежды верхней части тела: с длинными рукавами, с короткими рукавами, без рукавов;

      • lower_clothes: тип одежды нижней части тела, например, брюки;

      • bag_hand: наличие сумки в руке(-ах);

      • bag_back: наличие сумки на спине;

      • helmet_type: включает такие характеристики, как цвет каски, определение ее видимости на человеке, отсутствие/наличие;

      • vest_type: включает такие характеристики, как цвет жилета, определение его видимости на человеке, отсутствие/наличие;

      • age_group: принадлежность к одной из четырех возрастных групп: 0-16, 17-35, 36-50, 50+ лет;

      • gender: пол: мужской, женский.

      Для того чтобы включить дополнительный анализ атрибутов, установите True в разделе FFSECURITY -> EXTRA_BODY_MATCHING для атрибутов, которые вы хотите сравнивать. Установите значение min_confidence в диапазоне от 0 до 1.

      FFSECURITY = {
          # use additional features for extra confidence when matching body by emben
          'EXTRA_BODY_MATCHING': {
              'bottom_color': {'enabled': False, 'min_confidence': 0},
              'top_color': {'enabled': False, 'min_confidence': 0},
              'headwear': {'enabled': False, 'min_confidence': 0},
              'detailed_upper_clothes': {'enabled': False, 'min_confidence': 0},
              'upper_clothes': {'enabled': False, 'min_confidence': 0},
              'lower_clothes': {'enabled': False, 'min_confidence': 0},
              'bag_hand': {'enabled': False, 'min_confidence': 0},
              'bag_back': {'enabled': False, 'min_confidence': 0},
              'bag_ground': {'enabled': False, 'min_confidence': 0},
              'helmet_type': {'enabled': False, 'min_confidence': 0},
              'vest_type': {'enabled': False, 'min_confidence': 0},
              'age_group': {'enabled': False, 'min_confidence': 0},
              'gender': {'enabled': False, 'min_confidence': 0},
          },
      

      Примечание

      Атрибут bag_ground пока недоступен для дополнительного анализа.

      Примечание

      Проконсультируйтесь с нашими техническими экспертами (support@ntechlab.com), чтобы установить оптимальное значение для min_confidence.

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

    3. В разделе FFSECURITY укажите атрибуты силуэтов, которые требуется отображать в событиях распознавания.

      # available features: age_gender, bags, clothes, color, protective_equipment
      'BODY_EVENTS_FEATURES': ['protective_equipment', 'age_gender', 'bags', 'color', 'clothes'],
      
    4. Перезапустите контейнер findface-multi-findface-multi-legacy-1.

      sudo docker container restart findface-multi-findface-multi-legacy-1
      
    5. В веб-интерфейсе перейдите на вкладку Источники видео. Выберите камеру на кладке Камеры (либо загруженный файл на вкладке Загрузки, либо внешний детектор на соответствующей вкладке). Перейдите на кладку Основные. Поставьте флажок Силуэты в разделе Детекторы.