7. Администрирование
7.1 Включение отправки писем на SMTP-сервер на развернутой OMNI Platform
Остановите развернутую OMNI Platform:
$ ./cli.sh platform uninstall
Внесите изменения в файле ./cfg/platform.secrets.json в
platform-email-secret
.Пересоздайте секреты:
$ ./cli.sh platform install-secrets
Заново разверните OMNI Platform:
$ ./cli.sh platform install
7.2 Загрузка базы лиц
Чтобы загрузить базу изображений лиц, воспользуйтесь скриптом из папки utils/upload_script дистрибутива поставки OMNI Platform. Скрипт принимает файл с путями до изображений и отправляет запросы на создание профилей в OMNI Platform.
Результат работы скрипта - это профили, созданные по изображениям в OMNI Platform, а также список файлов в папке script_files:
result.txt: Файл с числом, показывающим количество изображений, обработанных при прошлом запуске скрипта. В это число также входят изображения, во время обработки которых произошла ошибка. Число обновляется во время работы скрипта.
errors.txt: Файл, в который записываются ошибки во время загрузки изображений в OMNI Platform, в формате:
<путь до изображения>
:<ошибка>
trace_errors.txt: Файл с подробным описанием ошибки, произошедшей при загрузке изображения, в формате:
<путь до изображения>
:<ошибка>
<traceback>
. Можно использовать для самостоятельной отладки или отправки в службу технической поддержки.
Системные требования
- Операционная система: Ubuntu 20.04
- Python: Версия 3.8
- pip: Версия 22.0.4
Все последующие шаги выполняются из папки upload_script.
Подготовка
Вам понадобится файл, в котором прописаны пути до изображений, предназначенных для загрузки в OMNI Platform. Путь до каждого изображения должен начинаться с новой строки без отступов.
Например:
/home/stranger/Downloads/1.jpeg
/home/stranger/Downloads/2.jpeg
/home/stranger/Downloads/3.jpegТакой файл можно создать с помощью команды, которая рекурсивно найдет все файлы формата jpg или jpeg в датасете и выведет абсолютные пути до них в файл:
find <абсолютный путь до датасета с изображениями> -type f -name "*.jpg" -o -name "*.jpeg" > image_paths.txt
-name <регулярное выражение>
задает формат изображений, а точнее условие для поиска.-o
определяет логическое отношение ИЛИ между двумя условиями.
Сгенерируйте виртуальное окружение для запуска скрипта загрузки изображений в OMNI Platform:
python3 -m venv generate_persons_env
Подключитесь к сгенерированному окружению:
source generate_persons_env/bin/activate
Находясь в виртуальном окружении, установите необходимые зависимости:
pip3 install -r requirements.txt
Работа со скриптом
Запуск скрипта
Запустить скрипт можно только из виртуального окружения, созданного на этапе подготовки, через выполнение файла generate_persosn.py.
python generate_persons.py
Запустите генерацию профилей по ранее сгенерированному списку путей до изображений:
python generate_persons.py -p ./image_paths.txt -H <platform url> -t <platform token> -P <profile group id>
Обязательные аргументы:
-p --paths
Путь до файла, содержащего пути до изображений лиц.
-H --host
URL инстанса OMNI Platform, в который нужно загрузить изображения. Убедитесь, что URL прописан без косой черты в конце.
-t --token
Токен доступа/авторизационный ключ пользователя, который предоставляет доступ к загрузке всех изображений. Токен можно получить на главной странице OMNI Platform после авторизации.
Необязательные аргументы:
-T --throughput
Параметр определяет максимальное количество запросов на создание профиля, которое выполняет сервер во время работы скрипта.Рекомендуется не менять этот параметр без предварительных расчётов производительности OMNI Platform на вашей конфигурации серверной машины.
-l --limit <limit>
Параметр ограничивает количество загружаемых изображений, если в датасете их содержится больше чем требуется для загрузки.
-P --profile_group
uuid4 группы профилей, в которую необходимо поместить все создаваемые по изображениям профили. Добавление в группу требуется для настройки оповещений по созданным профилям. uuid4 можно получить в веб-интерфейсе OMNI Platform, нажав на пять цифр в левом верхнем углу карточки списка наблюдения.
-c --clear-prev
Параметр позволяет игнорировать предыдущие результаты запуска скрипта и начинать загрузку заново, очистив файл result.txt. Обратите внимание, что файлы errors.txt и trace_errors.txt также будут очищены. Если требуется сохранить логи, эти файлы необходимо скопировать в другое расположение.
Получить полное описание параметров скрипта:
python3 generate_persons.py -h
Об успешной работе скрипта свидетельствует наличие новых профилей с изображениями из датасета в инстансе OMNI Platform, а также консольные сообщения формата: Handled <количество обработанных изображений> images
Остановка скрипта
Остановить скрипт можно комбинацией клавиш Ctrl+C. Весь прогресс предыдущей обработки сохранится, и при необходимости можно будет возобновить загрузку.
Работа с ошибками загрузки
Сообщение о неудачной загрузке изображения будет выведено в консоль, при этом скрипт продолжит работу. Сообщение об ошибке сохранится в файл errors.txt, а более подробная информация будет записана в файл trace_errors.txt.
- sort: cannot read: ./local_im: No such file or directory
Путь до файла с абсолютными путями до изображений в датасете указан неверно. Проверьте, что файл по переданному пути действительно существует.
- <class 'aiohttp.client_exceptions.ClientResponseError'>|404, message='Not Found', url=URL('http://sadasdasd/api/v2/')
<class 'aiohttp.client_exceptions.ClientConnectorError'>|Cannot connect to host asdasd:80 ssl:default [Name or service not known]
<class 'aiohttp.client_exceptions.InvalidURL'>|http:///asdasd/api/v2/
URL инстанса OMNI Platform указан неверно. Проверьте, что OMNI Platform действительно находится по указанному URL.
- <class 'Exception'>|[{'message': 'User has no access or id is incorrect'}]
Токен авторизации пользователя указан неверно. Проверьте, что вы верно скопировали токен.
- <class 'Exception'>|[{'message': 'One or several profiles_groups does not exist', 'code': '0x573bkd35'}]
<class 'Exception'>|[{'message': '“%(value)s” is not a valid UUID.'}]
Группы профилей по переданному id не существует. Проверьте, что вы верно скопировали id группы профилей.
- <class 'Exception'>|[{'message': 'No faces found', 'code': '0x95bg42fd'}]
<class 'Exception'>|[{'message': 'Low quality photo', 'code': '0x86bd49dh'}]
Лица на изображении отсутствуют, либо загружено изображение недостаточного качества. Профиль по такому изображению не появится в OMNI Platform.
7.3 Резервное копирование и восстановление базы данных
Не поддерживается для внешних баз данных.
Команды выполняются из директории setup.
Создание резервной копии базы данныx
Для создания резервной копии базы данных выполните следующую команду:
$ ./cli.sh platform db-backup - <root_postgres_user> <dump_path>
Имя <root_postgres_user>
можно посмотреть в файле ./cfg/platform.secrets.json в postgres-root-credentials.user
Восстановление данных из резервной копии базы данных
Восстановление данных из резервной копии необходимо выполнять на той же версии платформы, с которой была создана резервная копия.
Остановите image-api:
$ ./cli.sh image-api uninstall
Запросите список сервисов:
$ kubectl get deployment
Остановите все сервисы, кроме platform-postgres-dep:
$ kubectl scale deployment <SERVICE_NAME_1> <SERVICE_NAME_2> --replicas=0
Выполните восстановление данных из резервной копии:
$ ./cli.sh platform db-restore - <dump_path>
Запустите остановленные сервисы
$ kubectl scale deployment <SERVICE_NAME> --replicas <COUNT>
либо заново разверните OMNI Platform
$ ./cli.sh platform install
Запустите image-api:
$ ./cli.sh image-api install
7.4 Регистрация новых пользователей
Регистрация новых пользователей через веб-интерфейс
- Откройте страницу http://$DOMAIN/sign-up и введите адрес электронной почты и пароль нового пользователя.
- Войдите в указанную электронную почту и перейдите по ссылке подтверждения регистрации во входящем письме.
Если SMTP-сервер не настроен, можно подтвердить регистрацию через кабинет администратора.
- Для этого перейдите по ссылке http://$DOMAIN/storage/admin и введите логин и пароль администратора (
PLATFORM_ADMIN_EMAIL
иPLATFORM_ADMIN_PASSWORD
) для входа в систему. - Далее нажмите на вкладку Users, в списке пользователей откройте карточку только что созданного пользователя и проставьте статус Active в разделе Permissions.
- Затем нажмите Save, чтобы сохранить изменения, и перейдите на страницу входа в воркспейс с помощью VIEW SITE в верхней части экрана.
- Регистрация подтверждена! На странице http://$DOMAIN/sign-in введите электронную почту и пароль для входа в воркспейс.
Регистрация новых пользователей с помощью cURL-запросов
- Воспользуйтесь cURL-шаблоном для отправки API запроса на регистрацию нового пользователя:
curl --location 'http://$DOMAIN' --header 'Content-Type: application/json' --data-raw '{"query":"mutation ($userInfo: RegistrationInput!) {registration(userInfo: $userInfo) {ok}}","variables":{"userInfo":{"password":"password","confirmPassword":"password","email":"email@email.com"}}}'
В шаблоне нужно заполнить следующие поля:
- http://$DOMAIN - URL развернутого сервера платформы
- "password":"password" - Ввести пароль
- "confirmPassword":"password" - Подтвердить пароль
- "email":"email@email.com" - Ввести адрес электронной почты
В ответе на запрос должен вернуться статус "ok": true.
- Далее подтвердите регистрацию через адрес электронной почты, или кабинет администратора (если не настроен SMTP-сервер).
- Регистрация подтверждена! На странице http://$DOMAIN/sign-in введите электронную почту и пароль для входа в воркспейс.
Система автоматически создает отдельный воркспейс для каждого нового пользователя. Подключение нескольких пользователей к одному воркспейсу невозможно.
7.5 Обновление лицензии в OMNI Platform
Предусловия
Установлена OMNI Platform c активированной лицензией.
Инструкция по обновлению лицензии
Скопируйте файл лицензии face_sdk.lic в папку setup. Если имя файла отличается, переименуйте его в face_sdk.lic.
Если ключ лицензии обновился (была выдана новая лицензия, а не продлена существующая), обновите ключ лицензии в файлах ./cfg/platform.secrets.json и ./cfg/license-server.settings.cfg.
Перейдите в директорию setup и пересоздайте секреты:
./cli.sh platform install-secrets`
Ожидаемый вывод:
secret "rabbit-secret" deleted
secret/rabbit-secret created
...
secret "face-sdk" deleted
secret/face-sdk created
name, server or password is empty, "docker-regcreds" secret creation skipped
secret "postgres-creds-pack" deleted
secret/postgres-creds-pack createdАктивируйте лицензию:
./cli.sh license-server activate`
Ожидаемый вывод:
[2023-06-20 13:58:49+03:00] INF Activating license key...
[2023-06-20 13:58:50+03:00] INF License activated successfully!Перезапустите сервис:
kubectl delete $(kubectl get pod -o name)
Ожидаемый вывод:
pod "activity-matcher-dep-5ffdb45cbf-kkmd7" deleted
...
pod "securos-integration-service-dep-6669d88d8b-mdwff" deleted
pod "verify-matcher-dep-5695b46bd5-nvlr7" deletedВыполните команду:
watch -n 0.1 kubectl get pod
и дождитесь, пока все поды (pods) не перейдут в статус Running.
Ожидаемый вывод:
NAME READY STATUS RESTARTS AGE
activity-matcher-dep-6fdc8bfbd5-pl8ql 1/1 Running 2 (24h ago) 24h
age-estimator-dep-544cdfd7c-4khhh 1/1 Running 0 24h
...
securos-integration-service-dep-77f98b497d-66q 1/1 Running 0 24h
verify-matcher-dep-85ddfdfd4f-7t7br 1/1 Running 0 24hЗавершите команду комбинацией клавиш Ctrl+C.
Проверьте, что срок лицензии обновился:
sudo /opt/platform_license_server/lexfloatserver --status
В результате должен быть выведен ключ лицензии и количество дней до её истечения. Ожидаемый вывод:
Activation Status: OK
License key: DB7A21-E2CBF2-4ADCBD-DAF789-CD221C-8DAF9C
Days Left To Expiration: 10