Обновление до FindFace Multi 2.1.3
Совет
Если вы используете наш продукт FindFace Security, развернутый в Ubuntu 18.04, сначала обновите его до FindFace Multi 1.2, а затем обновите до FindFace Multi 2.1.3.
Если вы используете FindFace Multi 2.1 или FindFace Multi 2.1.0.1, обновите систему до FindFace Multi 2.1.3 с помощью следующей инструкции.
В версиях FindFace Multi 2.1+ не реализована работа плагинов Происшествия и VNS. Для этого есть отдельный продукт - FindFace CIBR. Поэтому включать плагины ffsecurity_incidents
, ffsecurity_vns
и ffsecurity_puppeteer
в файле конфигурации findface-multi-legacy.py
после обновления не нужно.
Интеграция с Axxon Next в версиях FindFace Multi 2.1+ является частью интеграции с внешними VMS и настраивается через плагин интеграции с VMS.
Если в версии FindFace Multi 1.2 вы создавали карточки человека или автомобиля с кастомными метаполями, то, чтобы они продолжали отображаться в интерфейсе FindFace Multi 2.1.3, необходимо в шаге №2 скопировать секцию CUSTOM_FIELDS
из старого конфигурационного файла и в шаге №8 перенести ее в новый конфигурационный файл.
В этой главе:
Обновление FindFace Multi 1.2 до FindFace Multi 2.1.3
Важно
Перед началом обновления отключите все камеры.
Для обновления FindFace Multi 1.2 до версии FindFace Multi 2.1.3 выполните следующие действия:
Создайте резервную копию старой схемы базы данных Tarantool:
sudo cp /etc/findface-security/tnt_schema.lua /etc/findface-security/old_tnt_schema.lua
Начиная с версии 2.0, одним из самых существенных отличий FindFace Multi от предыдущих версий продукта является структура биометрической базы данных Tarantool (так называемая «метасхема»). В новой структуре выделено несколько пространств (spaces), тогда как в прежних версиях было только одно пространство (space) по умолчанию.
Откройте файл конфигурации
/etc/findface-security/config.py
. Сохраните значения параметровEXTERNAL_ADDRESS
,SECRET_KEY
,VIDEO_DETECTOR_TOKEN
,ROUTER_URL
,CUSTOM_FIELDS
для последующего использования.sudo vi /etc/findface-security/config.py EXTERNAL_ADDRESS = "http://172.20.77.58" ... # use pwgen -sncy 50 1|tr "'" "." to generate your own unique key SECRET_KEY = 'c8b533847bbf7142102de1349d33a1f6' FFSECURITY = { 'VIDEO_DETECTOR_TOKEN': '381b0f4a20495227d04185ab02f5085f', ... 'ROUTER_URL': 'http://172.20.77.58', ... # -- Custom model fields -- # Edit CUSTOM_FIELDS -> `human_card` section to customize human card fields. # Edit CUSTOM_FIELDS -> `face_object` section to customize face object fields. # Below is an example with every field type possible. # 'CUSTOM_FIELDS': { # 'human_card': { # 'items': [ # { # 'name': 'personid', # 'default': '', # 'label': 'PersonID', # 'display': ['list', 'form'], # 'description': 'Sigur person ID', # 'editable': False # }, # { # 'name': 'firstname', # 'default': '', # 'label': 'First Name', # 'display': ['list', 'form'], # 'description': 'Sigur first name', # 'editable': False # }, # { # 'name': 'lastname', # 'default': '', # 'label': 'Last Name', # 'display': ['list', 'form'], # 'description': 'Sigur last name', # 'editable': False # }, # { # 'name': 'version', # 'default': '', # 'label': 'Version', # 'display': ['list', 'form'], # 'description': 'Sigur photo version', # 'editable': False # } # ], # 'filters': [ # { # 'name': 'personid', # 'label': 'Sigur person ID filter', # 'field': 'personid' # } # ] # }, # 'face_object': { # '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 # }, # ] # } # }, }
Остановите сервис
findface-security
.sudo systemctl stop findface-security.service
Создайте резервную копию базы данных векторов признаков на основе Tarantool в любой выбранной директории, например,
/etc/findface_dump
.sudo mkdir -p /etc/findface_dump cd /etc/findface_dump sudo findface-storage-api-dump -config /etc/findface-sf-api.ini
Перед установкой новой версии остановите и отключите все сервисы во избежание конфликта портов.
Примечание
В примере ниже восемь шардов. Если количество шардов в вашей системе отличается от количества шардов в примере, измените приведенную ниже команду соответствующим образом. Например, для системы с шестнадцатью шардами замените
tarantool@shard-00{1..8}.service
наtarantool@shard-0{01..16}.service
. Список активных шардов можно посмотреть с помощью командыls /etc/tarantool/instances.enabled/
.Можно остановить и отключить сервисы один за другим:
sudo systemctl stop postgresql.service sudo systemctl stop postgresql@10-main sudo systemctl stop findface-*.service sudo systemctl stop pgbouncer.service sudo systemctl stop tarantool@shard-00{1..8}.service sudo systemctl stop nats-server.service sudo systemctl stop etcd.service sudo systemctl stop mongod.service sudo systemctl stop mongodb.service sudo systemctl stop memcached.service sudo systemctl stop nginx.service sudo systemctl disable postgresql.service sudo systemctl disable postgresql@10-main sudo systemctl disable pgbouncer.service sudo systemctl disable findface-extraction-api.service sudo systemctl disable findface-security.service sudo systemctl disable findface-security-onvif.service sudo systemctl disable findface-sf-api.service sudo systemctl disable findface-ntls.service sudo systemctl disable findface-video-manager.service sudo systemctl disable findface-video-worker-cpu.service sudo systemctl disable findface-video-worker-gpu.service sudo systemctl disable findface-counter.service sudo systemctl disable findface-liveness-api.service sudo systemctl disable findface-video-streamer-cpu.service sudo systemctl disable findface-video-streamer-gpu.service sudo systemctl disable findface-video-storage.service sudo systemctl disable tarantool@shard-00{1..8}.service sudo systemctl disable nats-server.service sudo systemctl disable etcd.service sudo systemctl disable mongod.service sudo systemctl disable mongodb.service sudo systemctl disable memcached.service sudo systemctl disable nginx.service
Или использовать более компактные команды:
sudo systemctl stop postgresql.service postgresql@10-main findface-*.service pgbouncer.service tarantool@shard-00{1..8}.service nats-server.service etcd.service mongod.service mongodb.service memcached.service nginx.service sudo systemctl disable postgresql.service postgresql@10-main pgbouncer.service findface-extraction-api.service findface-security.service findface-security-onvif.service findface-sf-api.service findface-ntls.service findface-video-manager.service findface-video-worker-cpu.service findface-video-worker-gpu.service findface-counter.service findface-liveness-api.service findface-video-streamer-cpu.service findface-video-streamer-gpu.service findface-video-storage.service tarantool@shard-00{1..8}.service nats-server.service etcd.service mongod.service mongodb.service memcached.service nginx.service
Установите экземпляр FindFace Multi 2.1.3. Не забудьте предварительно подготовить сервер:
См.:
После установки продукта остановите все контейнеры FindFace Multi из директории
/opt/findface-multi/
.cd /opt/findface-multi/ sudo docker-compose stop
Откройте файл конфигурации
/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py
и вставьте сохраненные на шаге №2 значения для параметровEXTERNAL_ADDRESS
,SECRET_KEY
,VIDEO_DETECTOR_TOKEN
,ROUTER_URL
, иCUSTOM_FIELDS
.sudo vi /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py ... # Use pwgen -sncy 50 1|tr "'" "." to generate your own unique key SECRET_KEY = '002231ccb690586f4d33e98322c591bb' ... SERVICE_EXTERNAL_ADDRESS = 'http://172.20.77.58' # EXTERNAL_ADDRESS is used to access objects created inside FFSecurity via external links. EXTERNAL_ADDRESS = 'http://172.20.77.58' ... # findface-video-worker authorization token 'VIDEO_DETECTOR_TOKEN': '8977e1b0067d43f6c908d0bf60363255', ... # 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:80',
Откройте старую версию файла конфигурации
findface-ntls
, доступную по адресу/etc/findface-ntls.cfg
, и сравните ее с новой версией/opt/findface-multi/configs/findface-ntls/findface-ntls.yaml
. Перенесите все пользовательские параметры из старой версии в новую. Сделайте то же самое для других компонентов, например, дляfindface-extract-api
проверьте/etc/findface-extract-api.ini
на соответствие/opt/findface-multi/configs/findface-extraction-api/findface-extraction-api.yaml
, дляfindface-sf-api
проверьте/etc/findface-sf-api.ini
на соответствие/opt/findface-multi/configs/findface-sf-api/findface-sf-api.yaml
и т. д.sudo vi /etc/findface-ntls.cfg sudo vi /opt/findface-multi/configs/findface-ntls/findface-ntls.yaml sudo vi /etc/findface-extraction-api.ini sudo vi /opt/findface-multi/configs/findface-extraction-api/findface-extraction-api.yaml sudo vi /etc/findface-sf-api.ini sudo vi /opt/findface-multi/configs/findface-sf-api/findface-sf-api.yaml
Важно
Правила переноса параметров из старого файла конфигурации в новый:
Если в новом конфигурационном файле на месте старой модели нейронной сети указана новая модель, замените новую модель на ту, которая использовалась ранее (при условии, что предыдущая модель все еще включена в FindFace Multi 2.1.3), а если предыдущая модель отсутствует в FindFace Multi 2.1.3, то ничего не меняйте. В этом случае вам придется выполнить миграцию на другую модель нейронной сети.
Если параметр в старом файле конфигурации имел пустое значение, а в новом файле конфигурации он заполнен – сотрите это значение.
Оставьте как есть параметры, не включенные в старый файл конфигурации, но присутствующие в новом файле конфигурации.
Измените структуру базы данных Tarantool, применив схему
tnt_schema.lua
из версии Findface Multi 2.1.3.sudo docker run --rm --network host --volume '/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro' docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.1.3 make-tnt-schema | sudo tee /etc/findface-security/tnt_schema.lua
Удалите данные из каталогов, соответствующих активным шардам.
sudo rm /opt/ntech/var/lib/tarantool/shard-*/{index,snapshots,xlogs}/*
Скопируйте метасхему пространства (space)
default
из старого файла конфигурацииold_tnt_schema.lua
в новый файлtnt_schema.lua
, чтобы старая метасхема продолжала быть доступной. Это можно сделать следующим простым способом:12.1. В файле
/etc/findface-security/old_tnt_schema.lua
переименуйте следующие поля:meta_scheme --> meta_scheme_default meta_indexes --> meta_indexes_default
12.2. В новом файле конфигурации
/etc/findface-security/tnt_schema.lua
замените строки в начале файла:cfg_spaces = { default = { meta_scheme = { -- internal.normalized_id: { default = '', field_type = 'string', id = 1, name = 'normalized_id', }, -- internal.feat: { default = '', field_type = 'string', id = 2, name = 'feat', }, }, meta_indexes = {} },
на следующие:
dofile("/etc/findface-security/old_tnt_schema.lua") spaces = { default = { meta_scheme=meta_scheme_default, meta_indexes=meta_indexes_default },
Перейдите в директорию с файлами конфигурации Tarantool
/etc/tarantool/instances.available/
. Импортируйте новую метасхемуtnt_schema.lua
в каждый файл конфигурацииshard-00*.lua
, как показано в примере.sudo vi /etc/tarantool/instances.available/shard-00*.lua dofile("/etc/findface-security/tnt_schema.lua") FindFace = require("FindFace") FindFace.start("127.0.0.1", 8104, { license_ntls_server="127.0.0.1:3133", replication = replication_master, spaces = spaces })
Удалите генерируемый пакетом
findface-tarantool-server
дефолтный конфигурационный файлFindFace.lua
(он помешает сделать перезагрузку).sudo rm -rf /etc/tarantool/instances*/FindFace.lua
Перезапустите шарды
findface-tarantool-server
.TNT=$(ls /etc/tarantool/instances.enabled/ | cut -c 7,8,9) for i in $TNT; do sudo systemctl restart tarantool@shard-$i.service ; done
После выполненных операций в шардах по-прежнему останутся старые галереи, созданные в пространстве default
. При этом станут доступны новые пространства (например, ffsec_body_objects_space
, ffsec_face_clusters_space
и т. д.).
Восстановите в базе старые данные из резервной копии. Данные будут восстановлены в том виде, в котором они существовали в предыдущей версии: все галереи останутся в пространстве
default
.sudo systemctl start findface-ntls.service cd /etc/findface_dump for x in *.json; do sudo findface-storage-api-restore -config /etc/findface-sf-api.ini < "$x"; done
Выполните миграцию галерей из пространства
default
на новые пространства:sudo systemctl start findface-sf-api.service sudo systemctl start nginx.service sudo docker run --rm --network host --volume '/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro' docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.1.3 /opt/findface-security/bin/python3 /tigre_prototype/manage.py migrate_tnt_space
Выполните миграции базы данных PostgreSQL для совместимости с FindFace Multi 2.1.3. Сделайте следующее:
18.1. Перейдите в файл конфигурации
/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py
. В секцииDATABASES -> default
временно поменяйте парольPASSWORD
на старый, используемый в конфигурационном файле/etc/findface-security/config.py
.Важно
Обязательно сохраните пароль из файла конфигурации
/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py
. Позже он понадобится.sudo vi /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'DISABLE_SERVER_SIDE_CURSORS': True, 'NAME': 'ffsecurity', 'HOST': '127.0.0.1', 'PORT': 5439, 'USER': 'ntech', 'PASSWORD': 'XXXXXXXXXXXXXXXX' } }
18.2. В файле
/etc/pgbouncer/pgbouncer.ini
добавьте следующую строку в секциюdatabases
:ffsecurity_session = dbname=ffsecurity host=localhost port=5432 user=ntech pool_mode=session pool_size=10
18.3. Выполните миграции базы данных на хосте:
sudo systemctl start postgresql.service sudo systemctl start pgbouncer.service sudo docker run --rm --network host --volume '/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro' docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.1.3 /opt/findface-security/bin/python3 /tigre_prototype/manage.py migrate
18.4. Сделайте резервное копирование существующей базы данных с PostgreSQL, установленной на хост-системе.
cd /opt/findface-multi/ sudo -u postgres pg_dump --verbose --disable-triggers ffsecurity | sudo tee dump_ffsecurity.sql sudo -u postgres pg_dump -t auth_group -t ffsecurity_adgroupguid -t ffsecurity_deviceblacklistrecord -t ffsecurity_ffsecauthsession -t ffsecurity_grouppermission -t ffsecurity_runtimesetting -t ffsecurity_user -t ffsecurity_user_groups -t ffsecurity_user_user_permissions -t ffsecurity_userkeyvalue -t knox_authtoken -t ffsecurity_watchlistpermission -t ffsecurity_cameragrouppermission --data-only --verbose --no-acl --no-owner --disable-triggers ffsecurity | sudo tee dump_identity_provider.sql
18.5. Сделайте резервное копирование прав доступа ролей.
sudo docker run --rm --network host --volume '/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro' docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.1.3 /opt/findface-security/bin/python3 /tigre_prototype/manage.py dump_permissions | sudo tee permissions.csv
18.6. Поменяйте обратно пароль, измененный на шаге №18.1
18.7. Остановите все сервисы.
sudo systemctl stop findface-sf-api.service nginx.service tarantool@shard-00{1..8}.service postgresql.service pgbouncer.service
18.8. Откройте файл
/opt/findface-multi/docker-compose.yaml
и сохраните значениеPOSTGRES_PASSWORD
для использования в последующих командах.18.9. Пересоздайте базу данных
ffsecurity
, чтобы очистить её от дефолтных данных. Вставьте значение{POSTGRES_PASSWORD}
, которое вы ранее скопировали в шаге №18.8, в команду ниже:sudo docker-compose up -d postgresql sudo docker exec -it -u postgres findface-multi-postgresql-1 /bin/bash -c "PGPASSWORD={POSTGRES_PASSWORD} dropdb ffsecurity" sudo docker exec -it -u postgres findface-multi-postgresql-1 /bin/bash -c "PGPASSWORD={POSTGRES_PASSWORD} createdb -O ntech --encoding=UTF-8 --lc-collate=C.UTF-8 --lc-ctype=C.UTF-8 --template=template0 ffsecurity"
18.10. Восстановите данные в только что созданную базу
ffsecurity
. Вставьте значение{POSTGRES_PASSWORD}
, которое вы ранее скопировали в шаге №18.8, в команду ниже:sudo docker exec -i findface-multi-postgresql-1 /bin/bash -c "PGPASSWORD={POSTGRES_PASSWORD} psql --username postgres ffsecurity" < dump_ffsecurity.sql
18.11. Пересоздайте базу данных
ffsecurity_identity_provider
, чтобы очистить её от дефолтных данных. Вставьте значение{POSTGRES_PASSWORD}
, которое вы ранее скопировали в шаге №18.8, в команду ниже:sudo docker exec -it -u postgres findface-multi-postgresql-1 /bin/bash -c "PGPASSWORD={POSTGRES_PASSWORD} dropdb ffsecurity_identity_provider" sudo docker exec -it -u postgres findface-multi-postgresql-1 /bin/bash -c "PGPASSWORD={POSTGRES_PASSWORD} createdb -O ntech --encoding=UTF-8 --lc-collate=C.UTF-8 --lc-ctype=C.UTF-8 --template=template0 ffsecurity_identity_provider"
18.12. Запустите миграции.
sudo docker-compose up -d pgbouncer sudo docker run --rm --network host --volume '/opt/findface-multi/configs/findface-multi-identity-provider/findface-multi-identity-provider.py:/etc/findface-security/config.py:ro' docker.int.ntl/ntech/multi/multi/identity-provider:ffmulti-2.1.3 /opt/findface-security/bin/python3 /tigre_prototype/manage.py migrate
18.13. Восстановите данные в базу
ffsecurity_identity_provider
. Вставьте значение{POSTGRES_PASSWORD}
, которое вы ранее скопировали в шаге №18.8, в команду ниже:sudo docker exec -i findface-multi-postgresql-1 /bin/bash -c "PGPASSWORD={POSTGRES_PASSWORD} psql --username postgres ffsecurity_identity_provider" < dump_identity_provider.sql
18.14. Запустите все сервисы.
sudo docker-compose up -d
18.15. Запустите команду создания записей в таблице outbox для списков наблюдения и групп камер. Вставьте значение
{POSTGRES_PASSWORD}
, которое вы ранее скопировали в шаге №18.8, в команду ниже:sudo docker exec -i findface-multi-postgresql-1 /bin/bash -c "PGPASSWORD={POSTGRES_PASSWORD} pg_dump --username postgres -f cg_wl_permissions.sql -t ffsecurity_cameragrouppermission -t ffsecurity_watchlistpermission --data-only ffsecurity_identity_provider" sudo docker run --rm --network host --volume '/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro' docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.1.3 /opt/findface-security/bin/python3 /tigre_prototype/manage.py create_outbox sudo docker exec -i findface-multi-postgresql-1 /bin/bash -c "PGPASSWORD={POSTGRES_PASSWORD} psql --username postgres -c 'TRUNCATE ffsecurity_cameragrouppermission, ffsecurity_watchlistpermission RESTART IDENTITY;' ffsecurity_identity_provider" sudo docker exec -i findface-multi-postgresql-1 /bin/bash -c "PGPASSWORD={POSTGRES_PASSWORD} psql --username postgres ffsecurity_identity_provider < cg_wl_permissions.sql"
18.16. Прежде чем восстановить права доступа ролей в сервис
identity_provider
, проверьте файл/opt/findface-multi/permissions.csv
. Обязательно замените*_ffsecauthtoken
на*_authtoken
, если таковой имеется. Чаще всего это применимо к тем случаям, когда установка FindFace Multi 1.2 представляла собой обновление с более ранних версий продукта.После этого восстановите права доступа ролей в сервис
identity_provider
.sudo docker run --rm --network host -v /opt/findface-multi/configs/findface-multi-identity-provider/findface-multi-identity-provider.py:/etc/findface-security/config.py:ro -v $(pwd)/permissions.csv:/var/permissions.csv:ro docker.int.ntl/ntech/multi/multi/identity-provider:ffmulti-2.1.3 /opt/findface-security/bin/python3 /tigre_prototype/manage.py load_permissions /var/permissions.csv
18.17. Скопируйте полные кадры, нормализованные изображения и лицензионный файл. Скопируйте файлы из папки
/opt/ntech/license/
в папку/opt/findface-multi/data/findface-ntls/
, из/var/lib/findface-security/uploads/
в/opt/findface-multi/data/findface-multi-legacy/uploads/
, из/var/lib/ffupload/uploads/
в/opt/findface-multi/data/findface-upload/uploads/
.sudo cp -r /opt/ntech/license/* /opt/findface-multi/data/findface-ntls/ sudo cp -r /var/lib/findface-security/uploads/* /opt/findface-multi/data/findface-multi-legacy/uploads/ sudo cp -r /var/lib/ffupload/uploads/* /opt/findface-multi/data/findface-upload/uploads/ sudo chmod 777 -R /opt/findface-multi/data/findface-upload/uploads/ sudo chown www-data:www-data -R /opt/findface-multi/data/findface-upload/uploads/*
Также можно напрямую смонтировать указанные выше папки в соответствующие контейнеры через файл
docker-compose.yaml
, как показано в примере ниже:sudo vi /opt/findface-multi/docker-compose.yaml ... findface-upload: image: docker.int.ntl/ntech/universe/upload:ffserver-9.230407.1 logging: {driver: journald} network_mode: service:pause restart: always volumes: ['./configs/findface-upload/40-ffupload.sh:/docker-entrypoint.d/40-ffupload.sh:ro', '/var/lib/ffupload:/var/lib/ffupload'] ... findface-multi-identity-provider: depends_on: findface-multi-identity-provider-migrate: {condition: service_completed_successfully} healthcheck: {interval: 5s, retries: 3, start_period: 60s, test: 'curl -f http://localhost:8022/healthcheck || exit 1', timeout: 3s} image: docker.int.ntl/ntech/multi/multi/identity-provider:ffmulti-2.1.3 logging: {driver: journald} network_mode: service:pause restart: always volumes: ['./configs/findface-multi-identity-provider/findface-multi-identity-provider.py:/etc/findface-security/config.py:ro', '/var/lib/findface-security/uploads:/var/lib/findface-security/uploads'] ... findface-multi-identity-provider-migrate: command: [migrate] depends_on: [pgbouncer, nats, nats-jetstream, findface-sf-api, findface-liveness-api, etcd] environment: {ADMIN_PASSWORD: admin} image: docker.int.ntl/ntech/multi/multi/identity-provider:ffmulti-2.1.3 logging: {driver: journald} network_mode: service:pause restart: on-failure volumes: ['./configs/findface-multi-identity-provider/findface-multi-identity-provider.py:/etc/findface-security/config.py:ro', '/var/lib/findface-security/uploads:/var/lib/findface-security/uploads'] ... findface-multi-legacy: depends_on: findface-multi-identity-provider: {condition: service_started} findface-multi-legacy-migrate: {condition: service_completed_successfully} healthcheck: {interval: 5s, retries: 3, start_period: 60s, test: 'curl -f http://localhost:8002/healthcheck || exit 1', timeout: 3s} image: docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.1.3 logging: {driver: journald} network_mode: service:pause restart: always volumes: ['./configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro', '/var/lib/findface-security/uploads:/var/lib/findface-security/uploads'] ... findface-multi-legacy-migrate: command: [migrate] depends_on: [pgbouncer, nats, findface-sf-api, findface-counter, nats-jetstream] image: docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.1.3 logging: {driver: journald} network_mode: service:pause restart: on-failure volumes: ['./configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro', '/var/lib/findface-security/uploads:/var/lib/findface-security/uploads'] ... findface-multi-legacy-singleton-services: command: [run-single-instance-services] depends_on: findface-multi-identity-provider: {condition: service_healthy} findface-multi-legacy-migrate: {condition: service_completed_successfully} healthcheck: {interval: 5s, retries: 3, start_period: 60s, test: 'curl -f http://localhost:9901/healthcheck || exit 1', timeout: 3s} image: docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.1.3 logging: {driver: journald} network_mode: service:pause restart: always volumes: ['./configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro', '/var/lib/findface-security/uploads:/var/lib/findface-security/uploads'] ... cleaner: command: [run-cleaner-service] depends_on: [pgbouncer, findface-sf-api, findface-multi-legacy] image: docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.1.3 logging: {driver: journald} network_mode: service:pause restart: always volumes: ['./configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro', '/var/lib/findface-security/uploads:/var/lib/findface-security/uploads'] ... findface-multi-ui: depends_on: [findface-multi-legacy] image: docker.int.ntl/ntech/multi/multi/ui:ffmulti-2.1.3 logging: {driver: journald} network_mode: service:pause restart: always volumes: ['./configs/findface-multi-ui/nginx-site.conf:/etc/nginx/conf.d/default.conf:ro', '/var/lib/findface-security/uploads:/var/lib/findface-security/uploads'] ... findface-multi-file-mover: command: [python3, /app/service.py, --config=/etc/config.yml] depends_on: [findface-multi-legacy, nats-jetstream] image: docker.int.ntl/ntech/multi/multi/file-mover:ffmulti-2.1.3 logging: {driver: journald} network_mode: service:pause restart: always volumes: ['./configs/findface-multi-file-mover/findface-multi-file-mover.yaml:/etc/config.yml:ro', '/var/lib/findface-security/uploads:/mnt/slow_storage/uploads'] ...
18.18. Чтобы перенести данные Tarantool, выполните следующие действия:
Остановите все контейнеры FindFace Multi:
sudo docker-compose down
Запустите снова старые шарды и сервис
findface-sf-api
:sudo systemctl start tarantool@shard-00{1..8}.service findface-sf-api.service
Создайте новую резервную копию базы данных векторов признаков:
sudo mkdir -p /etc/findface_dump_final sudo findface-storage-api-dump -output-dir=/etc/findface_dump_final -config /etc/findface-sf-api.ini
Остановите остальные сервисы, очистите директорию
instances.enabled
, снова запустите контейнеры и выполнитеstorage-api-restore
:sudo systemctl stop tarantool@shard-00{1..8}.service findface-sf-api.service findface-ntls.service sudo rm /etc/tarantool/instances.enabled/* sudo docker-compose up -d sudo findface-storage-api-restore -config /opt/findface-multi/configs/findface-sf-api/findface-sf-api.yaml /etc/findface_dump_final/*.json
Обновление завершено, но в новой версии присутствуют новые модели нейронных сетей, поэтому необходимо также сделать миграцию векторов признаков на другую модель нейронной сети, либо можно использовать старые нейронные сети, перенеся их из директории /usr/share/findface-data/models/
в директорию /opt/findface-multi/models/
, указав их в файле /opt/findface-multi/configs/findface-extraction-api/findface-extraction-api.yaml
.
Обратите внимание, что модели обнаружения объектов в FindFace Multi 1.2 хранятся в отдельных директориях, то есть модели обнаружения лиц хранятся в директории /usr/share/findface-data/models/facedet/
, модели обнаружения автомобилей и силуэтов хранятся в директориях /usr/share/findface-data/models/cadet/
и /usr/share/findface-data/models/pedet/
соответственно. В то время как в FindFace Multi 2.1.3 все модели обнаружения объектов можно найти в одной директории /opt/findface-multi/models/detector/
. При переносе старых моделей нейронных сетей из директории /usr/share/findface-data/models/
в директорию /opt/findface-multi/models/
поместите все модели обнаружения объектов (facedet
, cadet
, pedet
) в директорию /opt/findface-multi/models/detector/
.
См. для справки:
$ ls -lash /usr/share/findface-data/models
total 52K
4.0K drwxr-xr-x 13 root root 4.0K Jul 15 14:48 .
4.0K drwxr-xr-x 3 root root 4.0K Jul 15 14:48 ..
4.0K drwxr-xr-x 2 root root 4.0K Jul 15 14:48 cadet
4.0K drwxr-xr-x 2 root root 4.0K Jul 15 14:48 carattr
4.0K drwxr-xr-x 2 root root 4.0K Jul 15 14:48 carnorm
4.0K drwxr-xr-x 2 root root 4.0K Jul 15 14:48 carrec
4.0K drwxr-xr-x 2 root root 4.0K Jul 15 14:48 face
4.0K drwxr-xr-x 2 root root 4.0K Jul 15 14:48 faceattr
4.0K drwxr-xr-x 2 root root 4.0K Jul 15 14:48 facedet
4.0K drwxr-xr-x 2 root root 4.0K Jul 15 14:48 facenorm
4.0K drwxr-xr-x 2 root root 4.0K Jul 15 14:48 pedattr
4.0K drwxr-xr-x 2 root root 4.0K Jul 15 14:48 pedet
4.0K drwxr-xr-x 2 root root 4.0K Jul 15 14:48 pedrec
$ ls -lash /opt/findface-multi/models/
total 44K
4.0K drwxr-xr-x 11 root root 4.0K Jul 17 13:37 .
4.0K drwxr-xr-x 6 root root 4.0K Jul 19 15:31 ..
4.0K drwxr-xr-x 2 root root 4.0K Jul 17 13:37 carattr
4.0K drwxr-xr-x 2 root root 4.0K Jul 17 13:37 carnorm
4.0K drwxr-xr-x 2 root root 4.0K Jul 17 13:36 carrec
4.0K drwxr-xr-x 2 root root 4.0K Jul 17 16:20 detector
4.0K drwxr-xr-x 2 root root 4.0K Jul 17 16:24 face
4.0K drwxr-xr-x 2 root root 4.0K Jul 17 16:24 faceattr
4.0K drwxr-xr-x 2 root root 4.0K Jul 17 13:37 facenorm
4.0K drwxr-xr-x 2 root root 4.0K Jul 17 13:37 pedattr
4.0K drwxr-xr-x 2 root root 4.0K Jul 17 13:37 pedrec
Важно
Настоятельно рекомендуется отключить автоматическое обновление Ubuntu, чтобы сохранить совместимость FindFace Multi со средой установки. В этом случае вы сможете обновлять ОС вручную, контролируя процесс обновления отдельных пакетов.
Для отключения автоматического обновления 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
Обновление FindFace Multi 2.1 / 2.1.0.1 до FindFace Multi 2.1.3
Независимо от того, какую версию FindFace Multi: 2.1 или 2.1.0.1 вы обновляете до FindFace Multi 2.1.3, процесс обновления будет одинаковым. Выполните следующие действия:
В домашней директории пользователя создайте папку для резервного копирования данных FindFace Multi 2.1.
mkdir ~/backup_data/
Создайте резервную копию конфигурационных файлов FindFace Multi и файла
docker-compose.yaml
, а затем перейдите в директорию/opt/findface-multi/
.sudo tar -cvzf ~/backup_data/configs.tar.gz -C /opt/findface-multi/ configs sudo cp /opt/findface-multi/docker-compose.yaml ~/backup_data/ cd /opt/findface-multi/
Сделайте резервное копирование данных PostgreSQL.
sudo docker-compose cp postgresql:/bitnami/postgresql ~/backup_data/pg_bkp
Сделайте резервное копирование данных Tarantool.
sudo docker exec -it findface-multi-findface-sf-api-1 bash -c "mkdir ffmulti_dump; cd ffmulti_dump && /storage-api-dump -config /etc/findface-sf-api.ini" sudo docker cp findface-multi-findface-sf-api-1:/ffmulti_dump ~/backup_data/
Для папки
backup_data/
, расположенной в домашней директории пользователя, выполните командуls
, чтобы просмотреть содержимое папки. Оно должно быть таким.ls ~/backup_data/ configs.tar.gz docker-compose.yaml ffmulti_dump pg_bkp
Остановите все контейнеры FindFace Multi.
sudo docker-compose down
Удалите папки
/opt/findface-multi/data/findface-tarantool-server/
и/opt/findface-multi/data/postgresql/
.sudo rm -r /opt/findface-multi/data/findface-tarantool-server/ sudo rm -r /opt/findface-multi/data/postgresql/
Установите экземпляр FindFace Multi 2.1.3 в директорию
/opt/findface-multi
.Восстановите данные Tarantool из резервной копии.
Скопируйте папку
~/backup_data/ffmulti_dump/
в контейнерfindface-multi-findface-sf-api-1
.sudo docker cp ~/backup_data/ffmulti_dump/ findface-multi-findface-sf-api-1:/
Восстановите данные Tarantool.
sudo docker exec -it findface-multi-findface-sf-api-1 bash -c 'cd ffmulti_dump && for x in *.json; do /storage-api-restore -config /etc/findface-sf-api.ini < "$x"; done;'
В новых конфигурационных файлах замените пароль для
NTECH USER
на тот, который использовался в FindFace Multi 2.1. Старый пароль можно получить из файлаconfigs/postgresql/40-init.sql
, находящегося в архиве резервной копииconfigs.tar.gz
. ПарольNTECH USER
должен быть заменен в следующих конфигурационных файлах:findface-multi-legacy.py
findface-multi-line-crossing-analytics.yaml
findface-multi-identity-provider.py
findface-multi-audit.py
pgbouncer -> userlist.txt
postgresql -> 40-init.sql
findface-counter.yaml
В новом конфигурационном файле
/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py
замените значенияSECRET_KEY
в секцииGENERAL SETTINGS
и'VIDEO_DETECTOR_TOKEN'
в секцииFINDFACE SECURITY SETTINGS
на те, которые использовались в FindFace Multi 2.1. Старые значения можно получить из файлаconfigs/findface-multi-legacy/findface-multi-legacy.py
, находящегося в архиве резервной копииconfigs.tar.gz
.Сравните конфигурационные файлы версии 2.1 с файлами версии 2.1.3 для сервисов
findface-ntls
,findface-extract-api
,findface-sf-api
и т.д. Перенесите все пользовательские параметры из старой версии в новую. Возможно, потребуется внести изменения в файлdocker-compose.yaml
, если ранее вы добавляли или удаляли сервисы или вносили какие-либо другие изменения.Важно
Правила переноса параметров из старого файла конфигурации в новый:
Если в новом конфигурационном файле на месте старой модели нейронной сети указана новая модель, замените новую модель на ту, которая использовалась ранее (при условии, что предыдущая модель все еще включена в FindFace Multi 2.1.3), а если предыдущая модель отсутствует в FindFace Multi 2.1.3, то ничего не меняйте. В этом случае вам придется выполнить миграцию на другую модель нейронной сети.
Если параметр в старом файле конфигурации имел пустое значение, а в новом файле конфигурации он заполнен – сотрите это значение.
Оставьте как есть параметры, не включенные в старый файл конфигурации, но присутствующие в новом файле конфигурации.
Остановите все контейнеры FindFace Multi из директории
/opt/findface-multi
.cd /opt/findface-multi sudo docker-compose down
Скопируйте данные из директории
~/backup_data/pg_bkp/data/
в директорию/opt/findface-multi/data/postgresql
.sudo cp -r ~/backup_data/pg_bkp/data/ /opt/findface-multi/data/postgresql
Запустите все контейнеры FindFace Multi.
sudo docker-compose up -d
Примечание
Вы можете дополнительно развернуть Видеомагнитофон. См. Пошаговое развертывание Видеомагнитофона.