Работа с базами данных
Загрузка базы лиц
Чтобы загрузить базу изображений лиц, воспользуйтесь скриптом из папки 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.
Резервное копирование и восстановление базы данных
Не поддерживается для внешних баз данных.
Команды выполняются из директории 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