Внешние системы управления видео (VMS)

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

Интеграция с внешними VMS возможна через плагин. Взаимодействие между плагином и FindFace Multi осуществляется по HTTP. Плагин взаимодействует с VMS, FindFace Multi – с плагином.

В этой главе:

Этот раздел содержит пошаговое руководство по установке и настройке функции внешних VMS в FindFace Multi. Пользователь должен иметь большой опыт администрирования ОС Linux и контейнеров Docker.

Создание сервисной учетной записи для плагина интеграции с VMS

Создайте пользователя (имя пользователя: ntech) с определенным набором разрешений, который будет использоваться в качестве сервисной учетной записи для плагина интеграции. Для этого выполните приведенную ниже команду:

adduser --system --disabled-password --disabled-login --home /var/empty \
                --no-create-home --quiet --force-badname --group ntech

Включение плагина в FindFace Multi

  1. Откройте файл /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py и найдите раздел External VMS Integration settings.

  2. Измените параметр 'ENABLED' на True.

  3. Запомните значение TOKEN, так как оно вам понадобится для настройки плагина позже. Значение по умолчанию – PLUGIN_TOKEN. Пожалуйста, обратите внимание, что префикс токена VmsPluginToken должен быть только в конфигурационном файле findface-multi-legacy.py. Если плагин установлен на том же хосте, что и FindFace Multi, используйте имя контейнера и порт http://findface-vms-integration-plugin:18333 в качестве адреса плагина.

    ...
    # -- External VMS integration settings --
       # cleanup settings
       'EXTERNAL_VMS_EVENTS_MAX_AGE': 0,
       'EXTERNAL_VMS_SEND_EVENTS_STATUS_MAX_AGE': 0,
       'EXTERNAL_VMS': {
           'ENABLED': True,
           'PLUGIN_ADDRESS': 'http://findface-vms-integration-plugin:18333',
           'TOKEN': 'VmsPluginToken PLUGIN_TOKEN',
           'EVENT_SENDER': {
               'ENABLED': True,
               'ALLOWED_TYPES': ['face'],
               'SENDER_TASKS': 1,
               'MAX_SEND_ATTEMPTS': 1,
               'MIN_EVENT_SEND_TIMEOUT': 0.1,
               'MAX_EVENT_SEND_TIMEOUT': 100,
               'RESPONSE_TIMEOUT': 10,
           },
       },
    ...
    

    Совет

    В данном примере плагин установлен на том же хосте, что и FindFace Multi. Если плагин установлен на другом хосте, укажите правильный адрес сервера, на котором находится плагин интеграции с VMS, в параметре PLUGIN_ADDRESS.

    Примечание

    Если вам нужно отправлять события на VMS, установите значение 'ENABLED': True в разделе EVENT_SENDER.

  4. Выполните перезапуск контейнеров FindFace Multi.

    cd /opt/findface-multi/
    
    sudo docker-compose restart
    

Краткое описание параметров приведено ниже:

Параметр

Описание

EXTERNAL_VMS_EVENTS_MAX_AGE

Время хранения событий, полученных от VMS (дни). 0 – неограниченно.

EXTERNAL_VMS_SEND_EVENTS_STATUS_AGE

Время хранения событий, отправленных в VMS (дни). 0 – неограниченно.

EXTERNAL_VMS: ENABLED

Статус модуля интеграции VMS c FindFace. Если ENABLED, то в пользовательском интерфейсе появится опция “Внешние VMS”.

PLUGIN_ADDRESS

IP адрес плагина.

TOKEN

Токен, необходимый плагину интеграции с VMS для аутентификации в Findface Multi (должен соответствовать токену в файле конфигурации плагина).

EVENT_SENDER:ENABLED

Если True, все совпадающие события в Findface Multi будут отправлены во внешние VMS.

ALLOWED_TYPES

Типы отправляемых объектов ['face', 'body', 'car'].

SENDER_TASKS

Количество одновременных задач для отправки событий в плагин. Значение по умолчанию = 1. При необходимости оно может быть увеличено. За дополнительной информацией обратитесь к нашим экспертам за консультацией (support@ntechlab.com).

MAX_SEND_ATTEMPTS

Количество попыток отправки до того, как она будет признана неудачной.

MIN_EVENT_SEND_TIMEOUT MAX_EVENT_SEND_TIMEOUT

Время между попытками отправки, если произошла неудачная отправка. Оно будет расти экспоненциально от минимума к максимуму до тех пор, пока увеличивается количество попыток MAX_SEND_ATTEMPTS.

RESPONSE_TIMEOUT

Время ожидания ответа от плагина при отправке события.

Создание новой базы данных в PostgreSQL

  1. Откройте файл /opt/findface-multi/docker-compose.yaml и запишите значение POSTGRES_PASSWORD. Оно понадобится для следующего шага.

    sudo vi /opt/findface-multi/docker-compose.yaml
    ...
     postgresql:
       environment: {POSTGRES_PASSWORD: POSTGRES_PASSWORD}
    ...
    
  2. Войдите в контейнер findface-multi-postgresql-1, выполнив следующую команду:

    sudo docker exec -i findface-multi-postgresql-1 /bin/bash -c "PGPASSWORD={POSTGRES_PASSWORD} psql --username postgres"
    

    Чтобы убедиться, что вы успешно вошли в контейнер, используйте команду \l для просмотра списка баз данных:

                                                                     List of databases
                 Name             |  Owner   | Encoding | Locale Provider |   Collate   |    Ctype    | ICU Locale | ICU Rules |   Access privileges
    ------------------------------+----------+----------+-----------------+-------------+-------------+------------+-----------+-----------------------
     alerts                       | ntech    | UTF8     | libc            | C.UTF-8     | C.UTF-8     |            |           |
     ffsecurity                   | ntech    | UTF8     | libc            | C.UTF-8     | C.UTF-8     |            |           |
     ffsecurity_audit             | ntech    | UTF8     | libc            | C.UTF-8     | C.UTF-8     |            |           |
     ffsecurity_identity_provider | ntech    | UTF8     | libc            | C.UTF-8     | C.UTF-8     |            |           |
     postgres                     | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           |
     replication_receiver         | ntech    | UTF8     | libc            | C.UTF-8     | C.UTF-8     |            |           |
     replication_sender           | ntech    | UTF8     | libc            | C.UTF-8     | C.UTF-8     |            |           |
     superset                     | superset | UTF8     | libc            | C.UTF-8     | C.UTF-8     |            |           |
     template0                    | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =c/postgres          +
                                  |          |          |                 |             |             |            |           | postgres=CTc/postgres
     template1                    | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =c/postgres          +
                                  |          |          |                 |             |             |            |           | postgres=CTc/postgres
    (10 rows)
    
  3. Выполните следующую команду, чтобы создать новую базу данных, необходимую для работы VMS:

    CREATE DATABASE ffsintegration WITH OWNER ntech ;
    
  4. Подтвердите создание базы данных, снова выполнив команду \l. После завершения используйте параметр \q для выхода из PostgreSQL.

    CREATE DATABASE ffsintegration WITH OWNER ntech ;
    CREATE DATABASE
    \l
                                                                     List of databases
                 Name             |  Owner   | Encoding | Locale Provider |   Collate   |    Ctype    | ICU Locale | ICU Rules |   Access privileges
    ------------------------------+----------+----------+-----------------+-------------+-------------+------------+-----------+-----------------------
     alerts                       | ntech    | UTF8     | libc            | C.UTF-8     | C.UTF-8     |            |           |
     ffsecurity                   | ntech    | UTF8     | libc            | C.UTF-8     | C.UTF-8     |            |           |
     ffsecurity_audit             | ntech    | UTF8     | libc            | C.UTF-8     | C.UTF-8     |            |           |
     ffsecurity_identity_provider | ntech    | UTF8     | libc            | C.UTF-8     | C.UTF-8     |            |           |
     ffsintegration               | ntech    | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           |
     postgres                     | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           |
     replication_receiver         | ntech    | UTF8     | libc            | C.UTF-8     | C.UTF-8     |            |           |
     replication_sender           | ntech    | UTF8     | libc            | C.UTF-8     | C.UTF-8     |            |           |
     superset                     | superset | UTF8     | libc            | C.UTF-8     | C.UTF-8     |            |           |
     template0                    | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =c/postgres          +
                                  |          |          |                 |             |             |            |           | postgres=CTc/postgres
     template1                    | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =c/postgres          +
                                  |          |          |                 |             |             |            |           | postgres=CTc/postgres
    (11 rows)
    
    \q
    

Установка и настройка плагина для интеграции VMS с FindFace

  1. Откройте файл /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py и найдите раздел DATABASES. Запомните значение PASSWORD для пользователя ntech:

    sudo vi /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py
    
    ...
    # Database is used to store cameras, camera groups, watchlists and so on.
    # Only PostgreSQL is supported.
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'DISABLE_SERVER_SIDE_CURSORS': True,
            'NAME': 'ffsecurity', 'HOST': 'pgbouncer', 'PORT': 6432, 'USER': 'ntech', 'PASSWORD': 'PASSWORD'
        }
    }
    
  2. Запросите плагин findface-vms-integration-plugin.img у представителя компании NtechLab.

  3. Загрузите плагин в систему.

    docker load < findface-vms-integration-plugin.img
    
  4. Отредактируйте файл /opt/findface-multi/docker-compose.yaml, добавив в него секцию findface-vms-integration-plugin.

    sudo vi /opt/findface-multi/docker-compose.yaml
    

    Добавьте секцию findface-vms-integration-plugin в конец файла /opt/findface-multi/docker-compose.yaml.

    findface-vms-integration-plugin:
      depends_on: [findface-ntls, postgresql, findface-multi-legacy]
      image: findface-vms-integration-plugin:latest
      networks: [product-network]
      volumes: ['./configs/findface-vms-integration-plugin/findface-vms-integration-plugin.conf:/etc/findface-vms-integration-plugin.conf']
      restart: always
    

    Совет

    Версия плагина может отличаться от указанной в документации. Для получения последней версии обратитесь в службу технической поддержки по адресу support@ntechlab.com.

  5. Создайте конфигурационный файл для плагина.

    sudo mkdir configs/findface-vms-integration-plugin/
    sudo vi configs/findface-vms-integration-plugin/findface-vms-integration-plugin.conf
    

    Ниже приведен пример конфигурационного файла findface-vms-integration-plugin.conf.

    # URL prefix for API version 1 endpoints
    # Default: /api/v1
    #
    API_V1_STR: /v1
    
    # App listens on this interface. Set it to 0.0.0.0 to listen on all available interfaces
    # Default: 127.0.0.1
    #
    HOST: 0.0.0.0
    
    # App accepts HTTP connections on this port
    # Default: 18333
    #
    # PORT: 18333
    
    # Public URL for App
    #Default: http://127.0.0.1:18333
    #
    #PUBLIC_URL: http://127.0.0.1:18333
    
    # Public URL for FFS
    # Default: http://127.0.0.1
    #
    FFS_PUBLIC_URL: http://172.23.218.85 # Replace 172.23.218.85 with your FindFace Multi IP address.
    
    # Full database URL dialect+driver://username:password@host:port/database.
    # Alternatively, connection parameters can be specified one by one (see below).
    #
    # SQLALCHEMY_DATABASE_URI:
    
    # Database host
    #
    POSTGRES_SERVER: postgresql # name of the postgresql container
    
    # Database port number
    #
    POSTGRES_PORT: 5432
    
    # Database user
    #
    POSTGRES_USER: ntech
    
    # Database user password
    #
    POSTGRES_PASSWORD: POSTGRES_PASSWORD  # the PostgreSQL password for the ``ntech`` user from the ``/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py`` configuration file
    
    # Database name
    #
    POSTGRES_DB: ffsintegration
    
    # Log SQL statements
    # Default: FALSE
    #
    # LOG_QUERIES: FALSE
    
    # Secret token used to validate requests made by FindFace Security
    # Required: yes
    #
    FFS_TOKEN: PLUGIN_TOKEN
    
    # Include traceback information in error responses
    # Default: FALSE
    #
    RESP_TRACEBACK: True
    
    # Logging level
    # Default: INFO
    #
    #LOG_LEVEL: DEBUG
    
    # Enable journald log handler.
    # Default: TRUE
    #
    # LOG_TO_JOURNALD: TRUE
    
    # Timeout for requests to VMS
    # Default: 10
    #
    # VMS_REQUEST_TIMEOUT_SEC: 10
    
    # Timeout for requests to FindFace
    # Default: 10
    #
    # FF_REQUEST_TIMEOUT_SEC: 10
    

    Совет

    В данном примере плагин установлен на том же хосте, что и FindFace Multi. Если плагин установлен на другом хосте, укажите правильный адрес сервера FindFace Multi в параметре POSTGRES_SERVER, а URL – в параметре FFS_PUBLIC_URL.

  6. Если вы установили плагин на тот же хост, что и FindFace Multi, то вам нужно только добавить правильный логин и пароль для локальной базы данных PostgreSQL.

    POSTGRES_USER: ntech
    POSTGRES_PASSWORD: POSTGRES_PASSWORD
    

    Значение POSTGRES_PASSWORD можно получить из файла /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py.

  7. Для включения внешнего плагина VMS в FindFace Multi запустите все контейнеры FindFace Multi из директории /opt/findface-multi.

    sudo docker-compose up -d
    
  8. Откройте FindFace Multi в браузере. Вы увидите, что появился раздел НастройкиВнешние VMS.

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

Для корректного воспроизведения видеоархивов с внешних VMS необходимо установить на внешнем сервере VMS тот же часовой пояс, что и на сервере FindFace Multi.

Добавление внешних VMS в FindFace Multi

  1. В разделе НастройкиВнешние VMS нажмите на кнопку + Новая VMS.

    wms_add_ru

  2. Укажите параметры вашей VMS в открывшихся окнах и нажмите на кнопку Сохранить, как только все будет готово:

    wms_info_ru

  3. После завершения вы можете управлять потоками со своих VMS на вкладке Камеры. Например, вы можете мгновенно добавить все или выбранные камеры в FindFace Multi.

    wms_cameras_ru

  4. Если вам нужно отправить события на внешнюю VMS, в настройках камеры, добавленной из VMS, проверьте, настроена ли отправка событий на внешние VMS:

    wms_general_ru

  5. При нажатии на кнопку ellipsis_button в мастере настройки обработки для созданной камеры доступны следующие действия:

    • Отфильтровать события

    • Активировать/Деактивировать

    • Удалить

    • Перезапустить

    • Сбросить настройки

    • Дублировать

  6. В обязательных свойствах списка наблюдения установите флажок Отправка событий сопоставления в VMS и нажмите на кнопку Сохранить, чтобы применить изменения.

    wms_watch_list_prop_ru

  7. Отправленные и полученные сообщения можно просмотреть на соответствующих вкладках выбранной VMS:

    wms_messages_ru

  8. Если Видеомагнитофон развернут и настроен, вы можете воспроизводить видеоархивы из внешних систем управления видео VMS (Axxon, Trassir) через него. Чтобы использовать эту функциональность, сначала убедитесь, что камера, добавленная из внешних VMS, активна. Затем перейдите на вкладку Эпизоды и события и наведите курсор на интересующее вас событие или эпизод. На миниатюре объекта (лица/силуэта или транспортного средства) отобразится кнопка play. Нажмите на нее, чтобы начать воспроизведение видео с того момента, когда было зафиксировано событие или эпизод с камеры.

    wms_player_event_ru

    Вы также можете воспроизводить видеоархив через камеру, нажав play на миниатюре камеры в списке камер на вкладке Источники видео. В результате видео с камеры внешних VMS будет отображаться в видеомагнитофоне. Если в указанное время в FindFace Multi имеется записанный видеоархив, то в видеомагнитофоне будет воспроизводиться он, а не видеоархив из внешних VMS.

    wms_player_camera_ru

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