Пошаговое развертывание из apt-репозитория

Данный раздел содержит подробную информацию о пошаговом развертывании компонентов ПК FindFace. Выполните приведенные ниже инструкции, придерживаясь заданного порядка.

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

Установка apt-репозитория

Прежде всего установите apt-репозиторий FindFace следующим образом:

  1. Загрузите файл инсталлятора findface-security-and-server-4.5.run.

  2. Поместите файл .run в любой каталог на сервере установки (например, /home/username).

  3. Из данного каталога сделайте файл .run исполняемым.

    chmod +x findface-security-and-server-4.5.run
    
  4. Запустите файл .run.

    sudo ./findface-security-and-server-4.5.run
    

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

    1. Устанавливаемый продукт: ПК FindFace.

    2. Тип установки: repo: Don't install anything, just set up the APT repository.

    3. Устанавливаемые модели нейронных сетей (при необходимости). Для того чтобы выбрать модели, сначала снимите выделение, введя в командной строке -*, затем введите через пробел порядковые номера нужных моделей, например: 1 3. Введите done для сохранения выбора и перехода к следующему шагу.

      Важно

      Должна быть установлена как минимум одна модель для биометрии лица.

    После этого apt-репозиторий FindFace будет автоматически установлен.

Установка необходимого стороннего ПО

Для работы ПК FindFace необходимо стороннее программное обеспечение PostgreSQL, Pgbouncer, Redis, etcd и memcached. Выполните следующие действия:

  1. Установите пакеты с указанным сторонним ПО следующим образом:

    sudo apt update
    sudo apt install -y postgresql-10 redis-server etcd memcached pgbouncer
    
  2. Откройте файл конфигурации /etc/memcached.conf. Установите максимальный размер памяти в мегабайтах, используемый для хранения элементов: -m 1024. Установите максимальный размер элемента: -I 16m. Если один или оба этих параметра отсутствуют, добавьте их в файл.

    sudo vi /etc/memcached.conf
    
    -m 1024
    -I 16m
    
  3. Предоставьте надежный пароль пользователю ntech (9T3g1nXy9yx3y8MIGm9fbef3dia8UTc3 в примере ниже). Внесите учетные данные в список пользователей pgbouncer.

    echo '"ntech" "9T3g1nXy9yx3y8MIGm9fbef3dia8UTc3"' | sudo tee -a /etc/pgbouncer/userlist.txt
    
  4. Настройте pgbouncer. Откройте файл /etc/pgbouncer/pgbouncer.ini и добавьте базу данных ffsecurity в раздел databases. Настройте указанные параметры, как показано в примере ниже. Остальные параметры должны быть закомментированы.

    sudo vi /etc/pgbouncer/pgbouncer.ini
    
    [databases]
    ffsecurity = dbname=ffsecurity host=localhost port=5432 user=ntech
    [pgbouncer]
    pidfile = /var/run/postgresql/pgbouncer.pid
    listen_addr = 127.0.0.1
    listen_port = 5439
    unix_socket_dir = /var/run/postgresql
    auth_type = plain
    auth_file = /etc/pgbouncer/userlist.txt
    pool_mode = transaction
    server_reset_query = DISCARD ALL
    max_client_conn = 16384
    default_pool_size = 20
    syslog = 1
    
  5. Добавьте сервисы стороннего ПО в автозагрузку Ubuntu и запустите их:

    sudo systemctl enable postgresql@10-main.service redis-server etcd.service memcached.service pgbouncer.service
    sudo systemctl restart postgresql@10-main.service redis-server etcd.service memcached.service pgbouncer.service
    

Обеспечение лицензирования

Вы получаете файл лицензии вместе с установочными пакетами ПК FindFace. Для лицензирования в закрытой сети вам также будет предоставлен ключ аппаратной защиты.

Лицензирование ПК FindFace обеспечивается следующим образом:

  1. Разверните findface-ntls, сервер лицензий в составе ядра FindFace.

    Важно

    Система на базе ПК FindFace может включать в себя только один экземпляр findface-ntls.

    Совет

    В файле конфигурации /etc/findface-ntls.cfg вы можете изменить папку для хранения файла лицензии и настроить удаленный доступ к веб-интерфейсу findface-ntls, используемому для управления лицензией. Подробнее см. findface-ntls.

    sudo apt update
    sudo apt install -y findface-ntls
    sudo systemctl enable findface-ntls.service && sudo systemctl start findface-ntls.service
    
  2. Загрузите файл лицензии через веб-интерфейс findface-ntls одним из следующих способов:

    • Откройте веб-интерфейс findface-ntls: http://<NTLS_IP_address>:3185/#/. Загрузите файл лицензии.

      Совет

      Впоследствии используйте основной веб-интерфейс ПК FindFace, чтобы посмотреть информацию о лицензиях, обновить или продлить лицензию (Настройки -> Лицензия).

    • Непосредственно положите файл лицензии в предназначенную для этого папку (по умолчанию, /opt/ntech/license, может быть изменена в файле конфигурации /etc/findface-ntls.cfg).

  3. При лицензировании в закрытой системе вставьте USB-ключ аппаратной защиты в USB-порт.

  4. Если лицензируемые компоненты установлены на удаленных серверах, впоследствии укажите IP-адрес сервера findface-ntls в их файлах конфигурации. Подробнее см. findface-extraction-api, findface-tarantool-server, Видеодетекция лиц: findface-video-manager и findface-video-worker.

Развертывание основной базы данных

Основная база данных ПК FindFace построена на PostgreSQL. Для того чтобы развернуть основную базу данных, выполните следующие действия:

  1. Откройте список пользователей pgbouncer /etc/pgbouncer/userlist.txt. Скопируйте пароль пользователя ntech (9T3g1nXy9yx3y8MIGm9fbef3dia8UTc3 в примере ниже).

    sudo cat /etc/pgbouncer/userlist.txt
    
    "ntech" "9T3g1nXy9yx3y8MIGm9fbef3dia8UTc3"
    
  2. В консоли PostgreSQL создайте пользователя ntech под скопированным паролем, а также базы данных ffsecurity и ffcounter PostgreSQL.

    sudo -u postgres psql
    
    postgres=# CREATE ROLE ntech WITH LOGIN PASSWORD '9T3g1nXy9yx3y8MIGm9fbef3dia8UTc3';
    
    postgres=# CREATE DATABASE ffsecurity WITH OWNER ntech ENCODING 'UTF-8' LC_COLLATE='en_US.UTF-8' LC_CTYPE='en_US.UTF-8' TEMPLATE template0;
    
    postgres=# CREATE DATABASE ffcounter WITH OWNER ntech ENCODING 'UTF-8' LC_COLLATE='C.UTF-8' LC_CTYPE='C.UTF-8' TEMPLATE template0;
    

    Совет

    Для выхода из консоли PostgreSQL введите \q и нажмите Enter.

  3. Разрешите авторизацию в PostgreSQL по UID клиента сокета. Перезапустите PostgreSQL.

    echo 'local all ntech peer' | sudo tee -a /etc/postgresql/10/main/pg_hba.conf
    
    sudo systemctl restart postgresql@10-main.service
    

Развертывание ядра FindFace

Для развертывания ядра FindFace выполните следующие действия:

Совет

Вы можете найти описание компонентов ядра FindFace и их параметров конфигурации в разделах Архитектура и Подробно о компонентах.

  1. Для ПК FindFace на GPU установите драйверы NVIDIA.

  2. Установите компоненты ядра FindFace:

    sudo apt update
    sudo apt install -y findface-tarantool-server findface-extraction-api findface-sf-api findface-upload findface-video-manager findface-video-worker-cpu findface-liveness-api
    

    Примечание

    Для того чтобы установить компонент findface-extraction-api с GPU-ускорением, вместо findface-extraction-api в команде введите findface-extraction-api-gpu.

    Примечание

    Для того чтобы установить компонент findface-video-worker с GPU-ускорением, вместо findface-video-worker-cpu в команде введите findface-video-worker-gpu. Если на физическом сервере установлено несколько видеокарт, см. Использование нескольких видеокарт.

    Важно

    Обязательно установите модели нейронных сетей на серверах с findface-extraction-api.

  3. В файле конфигурации /etc/findface-sf-api.ini включите параметр allow-return-facen.

    sudo vi /etc/findface-sf-api.ini
    
    ...
    limits:
      ...
      allow-return-facen: true
    ...
    
  4. В файле конфигурации /etc/findface-extraction-api.ini включите модели распознавания атрибутов лица, таких как пол, возраст, эмоции, очки, борода и медицинская маска, в зависимости от ваших нужд. Удостоверьтесь, что для каждой модели вы указали правильный тип ускорения CPU или GPU: он должен совпадать с типом ускорения findface-extraction-api. Обратите внимание, что findface-extraction-api на CPU может работать только с CPU-моделями, в то время как findface-extraction-api на GPU поддерживает как CPU-, так и GPU-модели. Подробнее см. Распознавание атрибутов лица.

    sudo vi /etc/findface-extraction-api.ini
    
    models:
      age: faceattr/age.v1.cpu.fnk
      emotions: faceattr/emotions.v1.cpu.fnk
      face: face/jackfruit_480.cpu.fnk
      gender: faceattr/gender.v2.cpu.fnk
      beard: faceattr/beard.v0.cpu.fnk
      glasses3: faceattr/glasses3.v0.cpu.fnk
      medmask3: faceattr/medmask3.v2.cpu.fnk
    

    Доступны следующие модели:

    Атрибут лица

    Ускорение

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

    биометрия лица

    CPU

    face: face/ifruit_320.cpu.fnk face: face/jackfruit_160.cpu.fnk face: face/jackfruit_320.cpu.fnk face: face/jackfruit_480.cpu.fnk

    GPU

    face: face/ifruit_320.gpu.fnk face: face/jackfruit_160.gpu.fnk face: face/jackfruit_320.gpu.fnk face: face/jackfruit_480.gpu.fnk

    возраст

    CPU

    age: faceattr/age.v1.cpu.fnk

    GPU

    age: faceattr/age.v1.gpu.fnk

    пол

    CPU

    gender: faceattr/gender.v2.cpu.fnk

    GPU

    gender: faceattr/gender.v2.gpu.fnk

    эмоции

    CPU

    emotions: faceattr/emotions.v1.cpu.fnk

    GPU

    emotions: faceattr/emotions.v1.gpu.fnk

    очки

    CPU

    glasses3: faceattr/glasses3.v0.cpu.fnk

    GPU

    glasses3: faceattr/glasses3.v0.gpu.fnk

    борода

    CPU

    beard: faceattr/beard.v0.cpu.fnk

    GPU

    beard: faceattr/beard.v0.gpu.fnk

    медицинская маска

    CPU

    medmask3: faceattr/medmask3.v2.cpu.fnk

    GPU

    medmask3: faceattr/medmask3.v2.gpu.fnk

    Совет

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

    models:
      gender: ""
      age: ""
      emotions: ""
    
  5. Откройте файл конфигурации /etc/findface-video-worker-cpu.ini (/etc/findface-video-worker-gpu.ini). В параметре mgr-static укажите IP-адрес сервера findface-video-manager, который будет обеспечивать findface-video-worker настройками и списком видеопотоков для обработки. В параметре capacity укажите максимальное количество видеопотоков, которое может быть обработано findface-video-worker. В разделе streamer укажите IP-адрес и порт для доступа к видеостене. Значение port должно быть 18999.

    sudo vi /etc/findface-video-worker-cpu.ini
    sudo vi /etc/findface-video-worker-gpu.ini
    
    mgr-static=127.0.0.1:18811
    
    capacity=10
    
    [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
    
  6. Добавьте сервисы ядра FindFace в автозагрузку Ubuntu и запустите их.

    sudo systemctl enable findface-extraction-api findface-sf-api findface-video-manager findface-video-worker-cpu findface-liveness-api
    sudo systemctl start findface-extraction-api findface-sf-api findface-video-manager findface-video-worker-cpu findface-liveness-api
    

Развертывание прикладного модуля ПК FindFace и биометрической базы данных

Для развертывания прикладного модуля ПК FindFace, выполните следующие действия:

  1. Установите компоненты findface-security, findface-security-ui и findface-counter. Добавьте сервис findface-counter в автозагрузку Ubuntu и запустите его.

    sudo apt update
    sudo apt install -y findface-security findface-security-ui findface-counter
    sudo systemctl enable findface-counter && sudo systemctl start findface-counter
    
  2. Перенесите схему базы данных из ПК FindFace в PostgreSQL, создайте группы пользователей с предустановленными правами и первого пользователя с правами администратора (т. н. Супер Администратора).

    Важно

    Супер Администратор не может лишиться прав администратора даже при смене роли.

    sudo findface-security migrate
    sudo findface-security create_groups
    sudo findface-security create_default_user
    
  3. Создайте структуру биометрической базы данных на основе Tarantool.

    sudo findface-security make_tnt_schema | sudo tee /etc/findface-security/tnt_schema.lua
    
  4. Откройте файл конфигурации /etc/tarantool/instances.available/FindFace.lua. Проверьте, содержит ли файл команду dofile, а также определения meta_indexes и meta_scheme, как показано в примере ниже. При необходимости измените файл.

    sudo vi /etc/tarantool/instances.available/FindFace.lua
    
    dofile("/etc/findface-security/tnt_schema.lua")
    -- host:port to bind, HTTP API
    FindFace = require("FindFace")
    FindFace.start("127.0.0.1", 8101, {
        license_ntls_server="127.0.0.1:3133",
        meta_indexes=meta_indexes,
        meta_scheme = meta_scheme
    })
    

    Важно

    IP-адрес и номер порта, указанные в секции shards файла конфигурации /etc/findface-sf-api.ini, должны быть идентичны указанным в секции FindFace.start.

    sudo vi /etc/tarantool/instances.available/FindFace.lua
    
    ...
    
    FindFace.start("127.0.0.1", 8101...)
    
    sudo vi /etc/findface-sf-api.ini
    
    storage-api:
      ...
      shards:
      - master: http://127.0.0.1:8101/v2/
      ...
    
  5. Добавьте сервис findface-tarantool-server в автозагрузку Ubuntu и запустите его.

    sudo systemctl enable tarantool@FindFace.service && sudo systemctl start tarantool@FindFace.service
    
  6. Откройте файл конфигурации /etc/findface-security/config.py. Задайте следующие параметры:

    • SERVICE_EXTERNAL_ADDRESS: IP-адрес или URL ПК FindFace, являющимся приоритетным для Genetec и вебхуков. Если параметр не задан, система использует для работы с данным функционалом EXTERNAL_ADDRESS. Для использования Genetec и вебхуков обязательно укажите по крайней мере один из параметров SERVICE_EXTERNAL_ADDRESS/ EXTERNAL_ADDRESS.

    • EXTERNAL_ADDRESS: (Опционально) IP-адрес или URL, который используется для доступа к веб-интерфейсу ПК FindFace. Если параметр не задан, система автоматически определяет его как внешний IP-адрес. Для доступа в ПК FindFace вы можете использовать оба IP-адреса: как автоопределенный, так и указанный в EXTERNAL_ADDRESS.

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

    • VIDEO_MANAGER_ADDRESS: IP-адрес сервера findface-video-manager.

    • NTLS_HTTP_URL: IP-адрес сервера findface-ntls.

    • ROUTER_URL: IP-адрес сервера findface-security, который будет получать обнаруженные на видео лица от экземпляров findface-video-worker. Адрес указывается внутренний или внешний, в зависимости от сети, в которой findface-video-worker взаимодействует с findface-security. Измените порт по умолчанию с учетом настроек переадресации с HTTP на HTTPS или вообще не указывайте его, оставив только IP-адрес.

    • SF_API_ADDRESS: IP-адрес сервера findface-sf-api.

    • DATABASES (раздел): заполните его следующим образом: 'PORT': 5439, 'USER': 'ntech', 'PASSWORD': ‘<пароль из /etc/pgbouncer/userlist.txt>’ (см. Установка необходимого стороннего ПО).

    Совет

    Если необходимо обеспечить безопасность данных, включите SSL-шифрование.

    Совет

    При необходимости установите ’IGNORE_UNMATCHED’: True, чтобы отключить запись события в базу данных, если обнаруженное лицо отсутствует в списках наблюдения (верификация дала отрицательный результат). Данную настройку рекомендуется использовать при большом количестве посетителей. Пороговая степень схожести при верификации лиц определяется параметром CONFIDENCE_THRESHOLD.

    Совет

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

    Важно

    Если вы включили модели распознавания в файле конфигурации /etc/findface-extraction-api.ini, добавьте строку EVENTS_FEATURES в секцию FFSECURITY, в зависимости от того, какие модели были включены. Данная строка должна быть расположена между строками SF_API_ADDRESS и LIVENESS_THRESHOLD, как показано в примере ниже. Подробнее см. Распознавание атрибутов лица.

    'EVENTS_FEATURES': ['gender', 'age', 'emotions', 'beard', 'glasses', 'medmask'],
    
    sudo vi /etc/findface-security/config.py
    
    # ==============================================================================
    # FindFace Security configuration file
    # ==============================================================================
    #
    # This config file is written in Python's syntax and interpreted at FindFace Security
    # service startup. You have to restart the service in order to apply changes.
    #
    # If you have any questions or suggestions, please contact us at [email protected]
    
    
    # ==============================================================================
    # GENERAL SETTINGS
    # ==============================================================================
    
    # enables additional logs
    DEBUG = False
    
    # media files directory
    MEDIA_ROOT = "/var/lib/findface-security/uploads"
    
    # static files directory
    STATIC_ROOT = "/var/lib/findface-security/static"
    
    # language code
    LANGUAGE_CODE = 'en-us'
    
    # time zone
    TIME_ZONE = 'UTC'
    
    # Database is used by FindFace Security 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',
            'PORT': 5439, 'USER': 'ntech', 'PASSWORD': 'ZnUqeWKMzT6T2Bj2G4gbFn7cxRSMcxS7'
        }
    }
    
    # Signature key for session encryption
    # Use pwgen -sncy 50 1|tr "'" "." to generate your own unique key
    SECRET_KEY = '8b26839acde2633362bdb176e741a650'
    
    # ==============================================================================
    # FINDFACE SECURITY SETTINGS
    # ==============================================================================
    
    # SERVICE_EXTERNAL_ADDRESS is prioritized for FFSecurity webhooks and Genetec plugin.
    # EXTERNAL_ADDRESS is used instead if SERVICE_EXTERNAL_ADDRESS is not provided.
    # You must provide either SERVICE_EXTERNAL_ADDRESS or EXTERNAL_ADDRESS in order
    # to be able to work with FFSecurity webhooks and Genetec plugin.
    SERVICE_EXTERNAL_ADDRESS = 'http://172.20.77.120'
    
    # EXTERNAL_ADDRESS is used to access objects created inside FFSecurity via external links.
    EXTERNAL_ADDRESS = ''
    
    # - Base FFSecurity settings -
    
    # enable permissions system
    ENABLE_ACL = True
    
    FFSECURITY = {
        # findface-video-worker authorization token
        'VIDEO_DETECTOR_TOKEN': '3243a92b03c3411d4faa3cdd72f967b6',
    
        # base face matching confidence threshold
        'CONFIDENCE_THRESHOLD': 0.745,
    
        # episodes specific matching threshold that is used to join faces in an episode
        'EPISODES_THRESHOLD': 0.689,
    
        # minimum face quality sufficient to add it to a dossier
        'MINIMUM_DOSSIER_QUALITY': 0.45,
    
        # do not save unmatched events (GDPR support)
        'IGNORE_UNMATCHED': False,
    
        # blur all unmatched faces on the full frame of the matched event (GDPR support)
        'BLUR_UNMATCHED_FACES': False,
    
        # full frame jpeg quality when `BLUR_UNMATCHED_FACES` is enabled
        'BLURRED_FULLFRAME_JPEG_QUALITY': 85,
    
        # matched events older than EVENTS_MAX_MATCHED_AGE will be automatically
        # deleted (every night at 1:17 am by default)
        'EVENTS_MAX_MATCHED_AGE': 30,
    
        # same as above but for unmatched events
        'EVENTS_MAX_UNMATCHED_AGE': 30,
    
        # same as EVENTS_MAX_MATCHED_AGE but for matched full frame images only (thumbnails won't be deleted)
        'EVENTS_MAX_FULLFRAME_UNMATCHED_AGE': 30,
    
        # same as above but for unmatched full frame images only (thumbnails won't be deleted)
        'EVENTS_MAX_FULLFRAME_MATCHED_AGE': 30,
    
        # same as above but for counter records
        'COUNTER_RECORDS_MAX_AGE': 30,
    
        # same as above but for person events (if no person events left in person, it is deleted too)
        'PERSON_EVENTS_MAX_AGE': 90,
    
        # when closing episode, delete all events except the best episode event
        'EPISODE_KEEP_ONLY_BEST_EVENT': False,
    
        # NTLS licence server url
        'NTLS_HTTP_URL': 'http://127.0.0.1:3185',
    
        # findface-video-worker face posting address,
        # it must be set to either FFSecurity EXTERNAL_ADDRESS (by default)
        # or findface-facerouter url (in some specific cases)
        'ROUTER_URL': 'http://127.0.0.1',
    
        # send serialized dossiers, dossier-lists, camera and camera groups in webhooks
        'VERBOSE_WEBHOOKS': False,
    
        # jpeg quality used when saving thumbnails
        'THUMBNAIL_JPEG_QUALITY': 75,
    
        # FFServer services urls
        'VIDEO_MANAGER_ADDRESS': 'http://127.0.0.1:18810',
        'SF_API_ADDRESS': 'http://127.0.0.1:18411',
        'FFCOUNTER_ADDRESS': 'http://127.0.0.1:18300',
        'LIVENESS_API_ADDRESS': 'http://127.0.0.1:18301',
    
        # upload video archives to this path, it differs from media root and
        # you have to change alias in corresponding nginx location also (/videos/)
        'VIDEO_ARCHIVE_UPLOAD_PATH': '/var/lib/findface-security/uploads/videos/',
    
        # additional events features.
        # make sure that corresponding extractors
        # are licensed and enabled at findface-extraction-api config file.
        # available features are: gender, age, emotions, beard, glasses, medmask.
        'EVENTS_FEATURES': [],
    
        # feature specific confidence thresholds
        'LIVENESS_THRESHOLD': 0.85,
        'EMOTIONS_THRESHOLD': 0.25,
        'BEARD_THRESHOLD': 0.7,
    
        # counters full frame saving options:
        # `always` - save always
        # `detect` - save only if faces or silhouettes have been detected
        # `never` - never save full frames
        'COUNTERS_SAVE_FULLFRAME': 'always',
        'COUNTERS_FULLFRAME_JPEG_QUALITY': 75,
        'COUNTERS_THUMBNAIL_JPEG_QUALITY': 75,
    
        # max camera frames_dropped percent
        'MAX_CAMERA_DROPPED_FRAMES': {'yellow': 0.1, 'red': 0.3},
        # max camera faces_failed percent
        'MAX_CAMERA_FAILED_FACES': {'yellow': 0.1, 'red': 0.3},
    
        # -- Persons configuration --
    
        # rrule (recurrence rule) for scheduling persons clusterization
        # WARNING: all scheduling works with UTC time and NOT aware of any timezone
        'PERSONS_CLUSTERIZATION_SCHEDULE': 'RRULE:FREQ=DAILY;INTERVAL=1;WKST=MO;BYHOUR=0;BYMINUTE=0',
    
        # face to person matching confidence threshold
        'PERSONS_CONFIDENCE_THRESHOLD': 0.745,
    
        # minimum required face quality for person creation
        'PERSON_EVENT_MIN_QUALITY': 0.45,
        # minimum required number events in episode for person creation
        'PERSON_EVENT_MIN_EPISODE_EVENTS': 1,
    
        # maximum concurrent video manager jobs for video archives processing
        'MAX_VIDEO_ARCHIVE_JOBS': 3,
    
        # reports image saving options
        'REPORT_THUMBNAIL_JPEG_QUALITY': 75,
        'REPORT_THUMBNAIL_MAX_HEIGHT': 100,
        'REPORT_FULLFRAME_JPEG_QUALITY': 75,
        'REPORT_FULLFRAME_MAX_HEIGHT': 250,
    
    
        # -- Startup tests --
    
        # required services availability test
        'SERVICES_AVAILABILITY_TEST': True,
    
        # enable saving audit logs to PostgresSQL
        'ENABLE_AUDIT_LOGS': True,
    
        # -- FFSecurity Onvif --
    
        # auth credentials for ffsecurity_onvif
        # ONVIF_CREDENTIALS = [
        #     {
        #         "hostnames": ["192.168.1.64", "2a00:1370:8117:ab87:a614:37ff:fe49:2683"],
        #         "login": "admin",
        #         "password": "admin123"
        #     }
        # ],
        'ONVIF_CREDENTIALS': {},
        # list of all hostnames that will be ignored during Onvif service discovery
        # ONVIF_IGNORE_LIST = ["192.168.1.217"],
        'ONVIF_IGNORE_LIST': [],
    
        # -- Optional parameters --
    
        # Edit CUSTOM_FIELDS->dossier_meta section to customize dossier content.
        # Below is an example for integration FindFace Security with Sigur.
    
        # Edit CUSTOM_FIELDS->dossier_face section to customize dossier face content.
        # Below is an example with every field type possible.
    
        # 'CUSTOM_FIELDS': {
        #     'dossier_meta': {
        #         'items': [
        #             {
        #                 'name': 'personid',
        #                 'default': '',
        #                 'label': 'PersonID',
        #                 'display': ['list', 'form'],
        #                 'description': 'Sigur person ID'
        #             },
        #             {
        #                 'name': 'firstname',
        #                 'default': '',
        #                 'label': 'First Name',
        #                 'display': ['list', 'form'],
        #                 'description': 'Sigur first name'
        #             },
        #             {
        #                 'name': 'lastname',
        #                 'default': '',
        #                 'label': 'Last Name',
        #                 'display': ['list', 'form'],
        #                 'description': 'Sigur last name'
        #             },
        #             {
        #                 'name': 'version',
        #                 'default': '',
        #                 'label': 'Version',
        #                 'display': ['list', 'form'],
        #                 'description': 'Sigur photo version'
        #             }
        #         ],
        #         'filters': [
        #             {
        #                 'name': 'personid',
        #                 'label': 'Sigur person ID filter',
        #                 'field': 'personid'
        #             }
        #         ]
        #     },
        #     'dossier_face': {
        #         'items': [
        #             {
        #                 "field_name": "tag_name_1",
        #                 "type": "string",
        #                 "default": "change_me"
        #             },
        #             {
        #                 "field_name": "tag_name_2",
        #                 "type": "uint",
        #                 "default": 123
        #             },
        #             {
        #                 "field_name": "tag_name_3",
        #                 "type": "bool",
        #                 "default": True
        #             },
        #         ]
        #     }
        # },
    
        # maximum event age in seconds than could be added to an episode.
        # 'EPISODE_SEARCH_INTERVAL': 60,
        # If none of these events matched, new episode is created.
    
        # maximum episode duration (episode is closed after)
        # 'EPISODE_MAX_DURATION': 300,
    
        # if no new event added to an episode during this timeout, episode will be closed.
        # 'EPISODE_EVENT_TIMEOUT': 30,
    
        # maximum created thumbnail width
        # 'THUMBNAIL_MAX_WIDTH': 320,
    
        # url of the backend which is used for social network search.
        # contact support for additional information.
        # 'SOCIAL_BACKEND': None,
    
        # additional social backend headers.
        # 'SOCIAL_HEADERS': {},
    
        # unacknowledged events notification interval
        # 'UNACKNOWLEDGED_NOTIFY_INTERVAL': 1,
    
        # set to True to run all media requests (photos, attachments) through the
        # django application for acl checks.
        # enabling this setting slightly increases security but
        # has severe negative effects on performance.
        # you will also have to mark /uploads/ location as 'internal' in nginx config
        #
        # 'OVERPROTECT_MEDIA': False,
    }
    
    # - FindFace Security authorization configuration dictionary -
    
    FFSECURITY_AUTH_CONFIG = {
        # available options: face, password, face_and_password, face_or_password
        'AUTH_TYPE': 'face_or_password',
        'FACE_AUTH_CONFIDENCE': 0.745,
        # 180 days by default
        'MAXIMUM_SESSION_LENGTH': 15552000,
        # session renew works only with face or face_or_password authorization type
        'NEED_SESSION_RENEW': False,
        'RENEW_SESSION_INTERVAL': 0,
        'MAXIMUM_RENEW_ATTEMPTS': 2,
    }
    
    # - FindFace Security user interface configuration dictionary -
    
    FFSECURITY_UI_CONFIG = {
        "event": {
            "features": {
                "f_gender_class": ["male", "female"],
                "age": {
                    "f_age_gte": "",
                    "f_age_lte": ""
                },
                "f_emotions_class": ["angry", "disgust", "fear", "happy", "sad", "surprise", "neutral"],
                "f_glasses_class": ["none", "eye", "sun"],
                "f_beard_class": ["none", "beard"],
                "f_liveness_class": ["real", "fake"],
                "f_medmask_class": ["none", "incorrect", "correct"],
            }
        },
    
        # Adjustable confidence threshold presets for face matching.
        # Please consult with our support before changing.
        "confidence_display": [
            {"confidence": 0.00, "color": "#000000", "label": {"ru": "Очень низкий", "en": "Very Low"}},
            {"confidence": 0.65, "color": "#FF0300", "label": {"ru": "Низкий", "en": "Low"}},
            {"confidence": 0.70, "color": "#FFB700", "label": {"ru": "Пониженный", "en": "Slightly Low"}},
            {"confidence": 0.72, "color": "#B8FA00", "label": {"ru": "Нормальный", "en": "Moderate"}},
            {"confidence": 0.75, "color": "#7EFF2B", "label": {"ru": "Повышенный", "en": "Slightly High"}},
            {"confidence": 0.80, "color": "#4DFF60", "label": {"ru": "Высокий", "en": "High"}},
            {"confidence": 0.85, "color": "#1DFF96", "label": {"ru": "Очень высокий", "en": "Very High"}},
        ]
    }
    
    # -- ASGI-server configuration --
    # consult support before changing these settings.
    
    # per worker thread pool size.
    ASGI_THREADS = 32
    
    UVICORN_SETTINGS = {
        # worker processes count, 'auto' sets it to logical cpu count
        'workers': 'auto',
        'host': 'localhost',
        'port': 8002,
        # websocket worker processes count,
        # 'auto' sets it to logical cpu count, but not more than 8.
        'ws-workers': 'auto',
        'ws-host': 'localhost',
        'ws-port': 8003,
    }
    
    # disable unused services to increase
    # overall system performance in some cases.
    SERVICES = {
        "ffsecurity": {
            "episodes": True,
            "webhooks": True,
            # use queue manager to prevent drops of video archive events
            "video_archive_events_manager": True,
            "persons": False,
        }
    }
    
    # -- Other settings --
    
    # The number of threads in the night clusterization.
    # Not recommended values are greater than the number of cores in the processor.
    # Consult with support before changing this value.
    NUMPY_OMP_NUM_THREADS = 'auto'
    
    
    # ==============================================================================
    # FINDFACE SECURITY PLUGINS
    # ==============================================================================
    # Uncomment lines below to enable plugins. Please consult documentation for
    # a plugin specific settings.
    
    # =============== Axxon ================
    # INSTALLED_APPS.append('ffsecurity_axxon')
    
    # AXXON = [
    #     {
    #         'name': 'server_name',
    #         'api': 'http://example.com/',
    #         'rtsp': 'rtsp://example.com:554/',
    #         'user': 'user',
    #         'password': 'password',
    #     }
    # ]
    
    # FFSECURITY_UI_CONFIG['dossier'] = {
    #    'video': True,
    # }
    
    
    # =============== Genetec ================
    # INSTALLED_APPS.append('ffsecurity_genetec')
    
    
    # ================ Sova ==================
    # INSTALLED_APPS.append('ffsecurity_sova')
    
    
    # ================ Sigur =================
    # keep in mind, that SIGUR plugin also uses CUSTOM_FIELDS and THUMBNAIL_MAX_WIDTH settings
    # INSTALLED_APPS.append('ffsecurity_sigur')
    # SIGUR = {
    #     'LOGIN': 'admin',
    #     'PASSWORD': 'admin',
    #     'MF_SELECTOR': 'biggest',  # what to do with several faces in sigur person photo; allowed ['biggest', 'reject']
    #     'ONLY_RT_EVENTS': True,  # only events with bs_type == realtime,
    #     'EVENT_DELAY': 0.004 # minimum time between two events of same person in seconds. If interval between two events with same person is less, than this value, second event will be dropped
    # }
    
    
    # ======= CryptoPRO authentication =======
    # INSTALLED_APPS.append('ffsecurity_cproauth')
    # REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'] = [
    #     'ffsecurity.auth.TokenAuthentication',
    #     'ffsecurity_cproauth.auth.CryptoProOrTokenAuthentication'
    # ]
    
    
    # ========== DossierLists sync ===========
    # INSTALLED_APPS.append('ffsecurity_sync')
    
    # token must be identical on master and slave
    # use pwgen -s 64 1
    # SYNC_TOKEN = 'change_me'
    # rrule that defines sync schedule
    # SYNC_SCHEDULE = 'RRULE:FREQ=DAILY;WKST=MO;BYHOUR=4;BYMINUTE=0'
    # if True synchronization will occur on FindFace Security startup and restart
    # SYNC_AT_STARTUP = False
    # if True synchronization will occur immediately after creating synchronization for dossier list
    # SYNC_AT_CREATION = False
    
    
    # ============== Puppeteer ===============
    # INSTALLED_APPS.append('ffsecurity_puppeteer')
    
    # PUPPETEER_CONFIG = {
    #     'UNSAVED_RESULTS_DELETION_TIMEOUT': 3600,        # maximum lifetime of search results not saved involuntarily
    #     'REMOTE_MONITORING_SYNC_INTERVAL': 600,          # monitoring data synchronization interval, seconds
    #     'ENABLE_DAILY_SEARCH': True,                     # daily search activation (default False)
    #     'DAILY_SEARCH_PUSH_HOUR': 2,                     # daily search dossiers synchronization hour
    #     'DAILY_SEARCH_PULL_HOUR': 6,                     # hour in which results of daily search will be obtained
    #     'puppets': [
    #         {
    #             'id': 'first_puppet',                    # puppet ID
    #             'url': 'http://1.1.1.1:8010/',           # puppet URL
    #             'token': 'first_puppet_token',           # use pwgen -s 64 1 (should match the token in puppet)
    #             'facen_model': 'jackfruit_480'           # face model in puppet
    #         },
    #         {
    #             'id': 'second_puppet',
    #             'url': 'http://1.1.1.1:8010/',
    #             'token': 'second_puppet_token',
    #
    #              # if remote installation has a different face model than the one used in FFSecurity -
    #              # you need to specify its name and ExtractionAPI URL where the corresponding face model is specified
    #             'facen_model': 'grapefruit_480',
    #             'extractor': 'http://127.0.0.1:18667',
    #         },
    #     ]
    # }
    #
    # ================= Vns ==================
    # A plugin for using FindFace Security as a puppeteer server
    # INSTALLED_APPS.append('ffsecurity_vns')
    
    # VNS_CONFIG = {
    #     'USERS': {
    #         'user1': 'token1',
    #         'user2': 'token2'
    #     },
    #     'MONITORING_THRESHOLD': 0.75,
    #     'DAILY': {
    #         'ENABLED': False,
    #         'THRESHOLD': 0.75,
    #         'START_TIME': "00:00:00"
    #     }
    # }
    
  7. Используя приведенную ниже команду, сгенерируйте ключ подписи для шифрования сессии (используется в Django) и задайте его в параметре SECRET_KEY.

    pwgen -sncy 50 1|tr "'" "."
    
  8. Запустите сервисы.

    sudo systemctl enable findface-security
    sudo systemctl start findface-security
    
  9. Отключите сервер nginx, активный по умолчанию, и добавьте сервер findface-security в список включенных серверов. Перезапустите nginx.

    sudo rm /etc/nginx/sites-enabled/default
    
    sudo ln -s /etc/nginx/sites-available/ffsecurity-nginx.conf /etc/nginx/sites-enabled/
    
    sudo nginx -s reload
    

Важно

Для того чтобы сохранить совместимость ПК FindFace со средой установки, настоятельно рекомендуется отключить автоматическое обновление Ubuntu. В этом случае вы сможете обновлять ОС вручную, контролируя процесс обновления отдельных пакетов.

Для отключения автоматического обновления Ubuntu выполните следующие команды:

sudo apt-get remove unattended-upgrades
sudo systemctl stop apt-daily.timer
sudo systemctl disable apt-daily.timer
sudo systemctl disable apt-daily.service
sudo systemctl daemon-reload