Как использовать CNN-код в python внутри веб-сайта?
У меня есть сайт с бэкендом на Python (Django) и JavaScript, размещенный на heroku.
Я хочу использовать внешний код, который работает в Google Colab, этот код использует CNN для классификации изображений. Моя идея заключается в том, что пользователь загружает изображение через веб-сайт, затем код, написанный на python в Google Colab, выполняет классификацию и возвращает результат на веб-сайт.
Кто-нибудь знает, как лучше всего это сделать?
Прежде всего, да, если возможно реализовать то, о чем вы говорите, я бы реализовал следующее:
Используйте celery для реализации асинхронных задач, когда фотография загружается, Django сообщает celery, что он должен выполнить асинхронную задачу (в данном случае использовать CNN) и может оставить статус ожидания для фотографии, а когда задача будет выполнена, он изменит статус и появится опубликованным на платформе.
Я рекомендую использовать для этого асинхронные задачи по следующим причинам:
Использование конволюционной нейронной сети может занять определенное время, давайте вспомним, что по умолчанию максимальное время ответа на HTTP-запрос составляет 30 секунд, и это может оборвать запрос, пользователь увидит это как ошибку, а также может пожаловаться, потому что загрузка фотографии должна ждать некоторое время, и в целях пользователя он будет думать, что сайт работает медленно. Реализация асинхронных задач позволяет, во-первых, в HTTP-запросе указать пользователю, что изображение анализируется, а во-вторых, у вас нет ограничения в 30 секунд на анализ, в случае, если одновременно загружается много изображений, это может привести к падению сервера. Поэтому в celery вы можете даже реализовать очереди для решения этой проблемы (используя redis или rabbitMQ).
Если вы хотите реализовать получение информации о статусе изображения в реальном времени, вы можете добавить использование websocket, где при загрузке изображения в ответ вы получаете URL, который является URL websocket, где вы будете получать информацию об изображении после обработки. Вы можете использовать django-channels для этого