Реализовать бекенд сервис, выполняющий роль обертки над существующей нейросетью (НС). В качестве примера НС можно использовать данную или любую иную НС (обучать собственную НС не нужно).
Необходимо реализовать 2 метода API:
- Загрузка изображения в body запроса и получение в формате JSON ответа с координатами bounding box распознанного объекта(ов) на входном изображении.
- Загрузка изображения в body запроса и получение в ответе картинки, на которой размечен(ы) bounding box. Формата разметки (цвета, заполнение) предоставляемого самой НС достаточно.
Пример разметки:
Оптимизировать прогрузку по потреблению памяти и по времени. Стоит учесть обработку ошибок, валидацию входных данных и иные ситуации. Например, сервер не должен лечь, если загрузили pdf, а не картинку.
- Язык реализации
python3.7+
- Использование FastAPI. (Django крайне не желателен для решения данной задачи)
- Иной стек технологий и библиотек произвольный
- Использование классов, ООП
- Решение оформить как проект на любом git-сервисе
- Описать в
README.md
установку, запуск, python и другие зависимости для запуска
- Наличие документации на Swagger (или хотя бы Postman)
- Использование асинхронности
- Оптимизация полученного решения по скорости/памяти
- Docker multistage build
- Написать тесты при помощи
pytest
/unittest
и любой другой на ваш выбор
Добавить использование SQL базы данных (например, PostgreSQL) для сохранения результатов обнаружения bounding box на изображении. Если пользователь загружает изображение, которое когда-то уже обрабатывалось, то сервер возвращает данные из БД. Хранить изображения в самой БД не нужно, достаточно работы с файлами и папками.
Приоритет факторов при оценивании решения:
- Оптимальность, надежность и отказоустройчивость
- Архитектура полученного решения
- Скорость решения поставленной задачи (сколько часов, дней, недель понадобилось для разработчику)
- Качество и чистота предоставляемого кода на
python
- Количество решенных доп. задачи (из раздела с плюсом и усложнений)
Для выполнения задания лучше всего использовать данный репозиторий как шаблон, для чего просто перейдите по этой ссылке.
Данный репозиторий уже содержит Dockerfile
, docker-compose.yml
и Makefile
для быстрого запуска приложения силами docker
(нет необходимости устанавливать python и пр. локально). Всё, что необходимо - это установленные локально docker
и docker-compose
. После клонирования репозитория просто выполните docker-compose up -d
и/или натравите PyCharm на docker-compose
- и можно приступать к написанию полезного кода.
-
Ссылку на репозиторий с вашей реализацией необходимо отправить нашему HR или TeamLead, от которого вы получили ссылку на данный репозиторий.
-
Приложение должно успешно запускаться после выполнения:
$ git clone ...
$ make build
$ docker-compose up -d
$ docker-compose run --rm app ./app
- Проходить все тесты (при их наличии).
Если для запуска приожения потребуется другой набор команд - обязательно отразите это в файле
README.md
вашего репозитория.
Если в процессе выполнения у вас возникнут какие-либо неразрешимые вопросы - создайте [соответствующий issue][link_create_issue] в данном репозитории. На вопросы касательно деталей реализации ("А лучше так и так?") - вероятнее всего вы получите ответ "Как вы посчитаете правильнее".