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

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

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

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

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

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

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

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

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

    sudo ./<findface-security-and-server-xxx>.run
    

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

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

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

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

      Важно

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

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

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

Для работы FindFace Enterprise Server необходимо стороннее программное обеспечение etcd и memcached. Выполните следующие действия:

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

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

    sudo vi /etc/memcached.conf
    
    -m 512
    -I 16m
    
  3. Добавьте сервисы стороннего ПО в автозагрузку Ubuntu и запустите их:

    sudo systemctl enable etcd.service memcached.service
    sudo systemctl start etcd.service memcached.service
    

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

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

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

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

    sudo apt update
    sudo apt install -y findface-ntls
    sudo systemctl enable findface-ntls.service && sudo systemctl start findface-ntls.service
    

    Важно

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

    Совет

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

  2. Загрузите файл лицензии через веб-интерфейс findface-ntls одним из следующих способов:

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

      Совет

      Впоследствии используйте веб-интерфейс findface-ntls, чтобы посмотреть информацию о лицензиях, обновить или продлить лицензию.

    • Непосредственно положите файл лицензии в предназначенную для этого папку (по умолчанию, /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-extraction-api

Для развертывания компонента findface-extraction-api выполните следующие действия:

Важно

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

  1. Установите findface-extraction-api следующим образом:

    sudo apt install -y findface-extraction-api
    

    Примечание

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

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

    sudo vi /etc/findface-extraction-api.ini
    
  3. Укажите IP-адрес сервера findface-ntls, если findface-ntls установлен на удаленном сервере. See Licensing Principles.

    license_ntls_server: 192.168.113.2:3133
    
  4. При необходимости настройте другие параметры. Например, включите или выключите получение изображений из Интернета.

    fetch:
      enabled: true
      size_limit: 10485760
    
  5. Параметры min_face_size и max_face_size не являются фильтрами, а задают минимальный и максимальный размеры лиц, которые будут гарантированно обнаружены. Подбор данных значений нужно выполнять с осторожностью, поскольку они влияют на производительность.

    nnd:
      min_face_size: 30
      max_face_size: .inf
    
  6. Параметр instances означает количество используемых экземпляров findface-extraction-api. Укажите количество экземпляров из вашей лицензии. Значение по умолчанию (0) означает, что это число равно количеству ядер ЦП.

    Примечание

    Данный параметр существенно влияет на потребление оперативной памяти.

    instances: 2
    
  7. Для оценки качества лица включите quality_estimator. В этом случае findface-extraction-api будет возвращать показатель качества как значение параметра detection_score.

    Совет

    Показатель качества можно анализировать. Прямые изображения лиц анфас считаются наиболее качественными. Для них возвращаются значения вблизи 0, как правило, отрицательные (такие как -0.00067401276, например). Перевернутые лица и лица, повернутые под большими углами, оцениваются отрицательными значениями от -5 и меньше.

    quality_estimator: true
    
  8. В зависимости от нужд вашего бизнеса, вам также может потребоваться включить модели распознавания атрибутов лица, таких как пол, возраст, эмоции, очки и/или борода. Удостоверьтесь, что для каждой модели вы указали правильный тип ускорения CPU или GPU: он должен совпадать с типом ускорения findface-extraction-api. Обратите внимание, что findface-extraction-api на CPU может работать только с CPU-моделями, в то время как findface-extraction-api на GPU поддерживает как GPU-, так и CPU-модели.

    models:
      age: faceattr/age.v1.cpu.fnk
      emotions: faceattr/emotions.v1.cpu.fnk
      face: face/grapefruit_480.cpu.fnk
      gender: faceattr/gender.v2.cpu.fnk
      beard: faceattr/beard.v0.cpu.fnk
      glasses3: faceattr/glasses3.v0.cpu.fnk
    

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

    Атрибут лица Ускорение Параметр в файле конфигурации
    биометрия лица CPU face: face/grapefruit_480.cpu.fnk
    GPU face: face/grapefruit_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

    Совет

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

    models:
      gender: ""
      age: ""
      emotions: ""
    
  9. Добавьте сервис findface-extraction-api в автозагрузку Ubuntu и запустите сервис.

    sudo systemctl enable findface-extraction-api.service && sudo systemctl start findface-extraction-api.service
    

Развертывание findface-tarantool-server

Компонент findface-tarantool-server соединяет базу данных Tarantool и компонент findface-sf-api, передавая результаты поиска от базы данных в findface-sf-api для дальнейшей обработки. Для увеличения скорости поиска на каждом сервере с базой данных Tarantool могут быть созданы многочисленные сегменты (шарды) findface-tarantool-server. Их параллельное функционирование приводит к значительному увеличению производительности. Каждый шард может обрабатывать приблизительно до 10 000 000 лиц. При развертывании системы на одиночном физическом сервере одного шарда, созданного по умолчанию, будет достаточно. При развертывании в кластерной среде количество шардов рассчитывается в зависимости от конфигурации оборудования и размера базы данных (см. подробности ниже).

Для развертывания компонента findface-tarantool-server выполните следующие действия:

  1. Установите findface-tarantool-server

    sudo apt update
    sudo apt install -y findface-tarantool-server
    
  2. Удалите тестовый сервис Tarantool из автозагрузки Ubuntu и остановите его.

    sudo systemctl disable tarantool@example && sudo systemctl stop tarantool@example
    
  3. Откройте файл конфигурации:

    sudo vi /etc/tarantool/instances.enabled/FindFace.lua
    
  4. Отредактируйте максимальное использование оперативной памяти. Значение задается в байтах в зависимости от количества лиц, обрабатываемых шардом, исходя из соотношения примерно 1280 байт на 1 лицо. Например, значение 1.2*1024*1024*1024 соответствует 1 000 000 лиц:

    memtx_memory = 1.2 * 1024 * 1024 * 1024,
    
  5. Укажите IP-адрес сервера findface-ntls, если findface-ntls установлен на удаленном сервере:

    FindFace.start(“127.0.0.1”, 8001, {license_ntls_server=“192.168.113.2:3133”})
    
  6. База данных Tarantool по умолчанию доступна только локально (127.0.0.1). Если необходимо открыть доступ к базе данных Tarantool с удаленного сервера, в разделе FindFace.start укажите IP-адрес определенного сервера, либо измените 127.0.0.1 на 0.0.0.0, чтобы разрешить доступ к базе данных Tarantool со всех IP-адресов.

    Совет

    Для того чтобы настроить доступ только с определенного IP-адреса (192.168.113.10 в примере), настройте следующим образом:

    FindFace.start("192.168.113.10", 8001, {license_ntls_server=“192.168.113.2:3133”})
    

    Для доступа с любого IP-адреса вместо конкретного значения введите 0.0.0.0:

    FindFace.start("0.0.0.0", 8001, {license_ntls_server=“192.168.113.2:3133”})
    
  7. Создайте структуру базы данных для хранения результатов распознавания лиц в параметре meta_scheme. Структура создается в виде набора полей, для каждого из которых указываются следующие параметры:

    • id: id поля;
    • name: название поля, должно совпадать с названием соответствующего параметра лица;
    • field_type: тип данных;
    • default: значение по умолчанию. Если значение по умолчанию больше ‘1e14 – 1’, то его следует записывать в виде строки, т. е. “123123..” вместо 123123...
    box.cfg{
        listen = '127.0.0.1:33001',
    
        vinyl_dir = '/opt/ntech/var/lib/tarantool/name',
        work_dir = '/opt/ntech/var/lib/tarantool/name',
        memtx_dir = '/opt/ntech/var/lib/tarantool/name/snapshots',
        wal_dir = '/opt/ntech/var/lib/tarantool/name/xlogs',
    
        memtx_memory = 16 * 1024 * 1024 * 1024,
    
        checkpoint_interval = 3600*4,
        checkpoint_count = 3,
    
        -- force_recovery = true,
    }
    
    pcall(function() box.schema.user.grant('guest', 'execute,read,write', 'universe') end)
    
    FindFace = require("FindFace")
    FindFace.start(
        "0.0.0.0",
        8001,
        {
            license_ntls_server="127.0.0.1:3133",
            facen_size=480,
            meta_scheme  = {
    
                {
                    id = 1,
                    name = 'm:timestamp',
                    field_type = 'unsigned',
                    default = 0
                },
    
                {
                    id = 2,
                    name = 'feat',
                    field_type = 'string',
                    default = ""
                },
    
                {
                    id = 3,
                    name = 'normalized_id',
                    field_type = 'string',
                    default = ""
                },
    
                {
                    id = 4,
                    name = 'm:camera',
                    field_type = 'string',
                    default = ""
                },
    
                {
                    id = 5,
                    name = 'm:photo',
                    field_type = 'string',
                    default = ""
                },
    
                {
                    id = 6,
                    name = 'm:thumbnail',
                    field_type = 'string',
                    default = ""
                },
    
                {
                    id = 7,
                    name = 'm:score',
                    field_type = 'unsigned',
                    default = "10000000000000000000"
                },
    
                {
                    id = 8,
                    name = 'm:bbox',
                    field_type = 'string',
                    default = ""
                },
    
                {
                    id = 9,
                    name = 'm:labels',
                    field_type = 'set[string]',
                    default = {}
                },
    
                {
                    id = 10,
                    name = 'm:is_friend',
                    field_type = 'unsigned',
                    default = 0
                },
                }
        }
    )
    
  8. (Опционально) При обслуживании одним шардом более 10,000,000 лиц поиск среди них может занимать продолжительное время. Для реализации крупных проектов рекомендуется создание дополнительных шардов findface-tarantool-server. Руководствуйтесь следующими правилами:

    • Один шард может обрабатывать приблизительно 10 000 000 лиц.
    • Количество шардов на одном сервере не должно превышать число каналов памяти процессора, умноженное на 2. Помните об этом при разработке архитектуры системы в кластерной среде.

    Для того чтобы создать дополнительные шарды, создайте аналогичное количество файлов конфигурации на основе файла по умолчанию /etc/tarantool/instances.enabled/FindFace.lua и внесите актуальные значения IP-адресов и портов. Для этого напишите bash-скрипт (shard.sh, например), который автоматически создаст файлы конфигурации для всех шардов на определенном сервере. Используйте приведенный ниже скрипт как основу для своего кода. Примерный скрипт создает 4 шарда, использующие порты findface-tarantool-server 33001..33004 и HTTP 8001..8004.

    #!/bin/sh
    set -e
    
    for I in `seq 1 4`; do
           TNT_PORT=$((33000+$I)) &&
           HTTP_PORT=$((8000+$I)) &&
           sed "
                   s#/opt/ntech/var/lib/tarantool/default#/opt/ntech/var/lib/tarantool/shard_$I#g;
                   s/listen = .*$/listen = '127.0.0.1:$TNT_PORT',/;
                   s/\"127.0.0.1\", 8001,/\"0.0.0.0\", $HTTP_PORT,/;
           " /etc/tarantool/instances.enabled/FindFace.lua > /etc/tarantool/instances.enabled/FindFace_shard_$I.lua;
    
           mkdir -p /opt/ntech/var/lib/tarantool/shard_$I/snapshots
           mkdir -p /opt/ntech/var/lib/tarantool/shard_$I/xlogs
           mkdir -p /opt/ntech/var/lib/tarantool/shard_$I/index
           chown -R tarantool:tarantool /opt/ntech/var/lib/tarantool/shard_$I
           echo "Shard #$I inited"
    done;
    

    Совет

    Загрузите пример скрипта.

    Запустите скрипт из домашней директории.

    sudo sh ~/shard.sh
    

    Проверьте созданные файлы конфигурации.

    ls /etc/tarantool/instances.enabled/
    
    ##example.lua FindFace.lua FindFace_shard_1.lua FindFace_shard_2.lua FindFace_shard_3.lua FindFace_shard_4.lua
    
  9. Добавьте шард findface-tarantool-server в автозагрузку Ubuntu и запустите его.

    sudo systemctl enable tarantool@FindFace.service && sudo systemctl start tarantool@FindFace.service
    

    В случае нескольких шардов вы можете сделать это аналогично примеру запуска 4-х шардов:

    for I in `seq 1 4`; do sudo systemctl enable [email protected]_shard_$I; done;
    for I in `seq 1 4`; do sudo systemctl start [email protected]_shard_$I; done;
    

Развертывание findface-upload

Для хранения всех исходных изображений, которые когда-либо отправлялись в систему для обработки, а также таких артефактов работы ядра FindFace, как миниатюры и нормализованные изображения лиц, разверните сервис findface-upload.

Совет

Пропустите данный шаг, если вы не собираетесь хранить указанные данные. В этом случае на Сервере будут храниться только биометрические образцы в базе данных Tarantool.

Установите findface-upload следующим образом:

sudo apt update
sudo apt install -y findface-upload

По умолчанию исходные изображения, миниатюры и нормализованные изображения лиц хранятся в каталоге /var/lib/ffupload/uploads/.

Развертывание findface-sf-api

Для развертывания компонента findface-sf-api выполните следующие действия:

  1. Установите findface-sf-api следующим образом:

    sudo apt update
    sudo apt install -y findface-sf-api
    
  2. Откройте файл конфигурации /etc/findface-sf-api.ini.

    sudo vi /etc/findface-sf-api.ini
    
  3. Если FindFace Enterprise Server развертывается в кластерной конфигурации, укажите IP-адреса и порты серверов с компонентами findface-extraction-api (параметр extraction-api), findface-tarantool-server (параметр storage-api, в формате http://IP_address:port/v2/), findface-upload (параметр upload_url).

    extraction-api:
      extraction-api: http://10.220.85.120:18666
    storage-api:
     shards:
     - master: http://10.200.85.115:8003/v2/
     - master: http://10.200.85.120:8004/v2/
     - master: http://10.200.85.120:8005/v2/
     - master: http://10.200.85.120:8006/v2/
       slave: ‘’
    upload_url: http://127.0.0.1:3333/uploads/
    
  4. Добавьте сервис findface-sf-api в автозагрузку Ubuntu и запустите сервис.

    sudo systemctl enable findface-sf-api.service && sudo systemctl start findface-sf-api.service
    

Развертывание findface-facerouter

Для развертывания компонента findface-facerouter выполните следующие действия:

  1. Установите findface-facerouter следующим образом:

    sudo apt update
    sudo apt install -y findface-facerouter
    
  2. Откройте файл конфигурации /etc/findface-facerouter.py.

    sudo vi /etc/findface-facerouter.py
    
  3. Если компоненты findface-facerouter и findface-sf-api установлены на разных физических серверах, раскомментируйте параметр sfapi_url и укажите в нем IP-адрес сервера findface-sf-api.

    sfapi_url                      = 'http://localhost:18411'
    
  4. Добавьте сервис findface-facerouter в автозагрузку Ubuntu и запустите сервис.

    sudo systemctl enable findface-facerouter.service && sudo systemctl start findface-facerouter.service
    

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

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

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

  1. Установите findface-video-manager:

    sudo apt install -y findface-video-manager
    
  2. Откройте файл конфигурации /etc/findface-video-manager.conf.

    sudo vi /etc/findface-video-manager.conf
    
  3. В параметре router_url укажите IP-адрес и порт компонента findface-facerouter, на который компонент findface-video_worker будет отправлять обнаруженные лица.

    router_url: http://127.0.0.1:18820/v0/frame
    
  4. В параметре ntls -> url укажите IP-адрес сервера findface-ntls, если findface-ntls установлен на удаленном сервере.

    ntls:
        url: http://127.0.0.1:3185/
    
  5. При необходимости настройте параметры, общие для всех видеопотоков.

    Совет

    Данный шаг может быть пропущен: при создании job-заданий вы сможете отдельно задавать настройки для каждого обрабатываемого видеопотока (см. HTTP API для управления видеодетекцией лиц).

  6. Добавьте сервис findface-video-manager в автозагрузку Ubuntu и запустите сервис.

    sudo systemctl enable findface-video-manager.service && sudo systemctl start findface-video-manager.service
    

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

  1. Установите findface-video-worker:

    sudo apt update
    sudo apt install -y findface-video-worker-cpu
    

    Примечание

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

  2. Откройте файл конфигурации findface-video-worker.

    sudo vi /etc/findface-video-worker-cpu.ini
    sudo vi /etc/findface-video-worker-gpu.ini
    
  3. В параметре ntls-addr укажите IP-адрес сервера findface-ntls, если findface-ntls установлен на удаленном сервере.

    ntls-addr=127.0.0.1:3133
    
  4. В параметре mgr-static укажите IP-адрес сервера с установленным компонентом findface-video-manager, у которого компонент findface-video-worker будет запрашивать настройки и список видеопотоков.

    mgr-static=127.0.0.1:18811
    
  5. В параметре capacity укажите максимальное количество видеопотоков, обрабатываемых компонентом findface-video-worker.

    capacity=10
    
  6. Добавьте сервис findface-video-worker в автозагрузку Ubuntu и запустите сервис.

    sudo systemctl enable findface-video-worker-cpu.service && sudo systemctl start findface-video-worker-cpu.service