Tengo un sitio web con backend en Python (Django) y JavaScript alojado en heroku. Además, tengo un código en python que clasifica imágenes con EfficientNet, por lo que quiero integrar este código en mi sitio web.
La secuencia lógica de ideas es la siguiente:
El usuario carga una imagen en el sitio;
Esta imagen se clasificará con el código Python;
El algoritmo devolverá una imagen;
La imagen devuelta debe publicarse en el sitio.
¿Alguien sabe cuál sería la mejor manera de hacer esto?
Antes que nada, si, si es posible implementar lo que comentas, implementaría lo siguiente:
Use celery para implementar tareas asíncronas donde cuando se carga la foto, Django le dice a celery que tiene que hacer la tarea asíncrona (en este caso, use CNN) y puede dejar un estado pendiente para la foto y una vez que la tarea se completa, cambia de estado y aparecería publicado en la plataforma.
Recomiendo usar tareas asincrónicas para esto debido a lo siguiente:
El uso de la red neuronal convolucional puede tomar cierto tiempo, recordemos que el tiempo máximo de respuesta predeterminado de una solicitud HTTP es de 30 segundos y podría cortar la solicitud, el usuario lo vería como un error y también puede quejarse porque cargar una foto debe esperar un tiempo y, para fines de los usuarios, pensarían que el sitio es lento. La implementación de tareas asincrónicas permite primero en la solicitud HTTP indicarle al usuario que la imagen está siendo analizada y segundo no tienes un límite de 30 segundos para analizar, en caso de tener muchas subidas de imágenes al mismo tiempo puede fallar. el servidor. Es por eso que con celery incluso puedes implementar colas para resolver esto (Usando redis o rabbitMQ ).
Si desea implementar conocer el estado de la imagen en tiempo real, podría agregar el uso de unwebsocket , donde al cargar la imagen en la respuesta obtiene una URL que es la del websocket donde recibiría información sobre el imagen una vez procesada. Puedes usar django-channels para ello