Как использовать модель yolov5 в django
Я хочу использовать модель yolov5 в django, но у меня возникли проблемы.
Я хочу сделать так, чтобы пользователь загружал изображение на сервер django, обнаруживал объекты с помощью модели yolov5, а затем результат отображался в Интернете. Сам процесс прост.Но я не уверен, как подключить yolov5 api и django.
Как знают те из вас, кто использовал yolo, yolo в основном запускает apis на основе команд.
!python train.py --img 512 --batch 16 --epochs 100 --data ~~ # for training
!python detect.py --weights'/content/yolov5/runs/~~ # for detection
Есть ли способ запустить это в представлении Django?
Я пробовал функции python, такие как execfile() и os.system(), которые выполняют команды в режиме интерпретатора в сценарии Python, но они не работали должным образом. (Я думаю, что пути между Джанго и Йоло были запутаны.)
На самом деле, если возможно, лучше всего загрузить yolo api как модуль, такой как Keras, и запускать его как функцию, а не как метод команды. Но я не могу найти способ использовать yolov5 как модуль или что-то в этом роде.
Как я могу решить эту проблему? Пожалуйста, дайте мне совет.
1 ответ
Если обученная модель yolov5 требуется только для обнаружения объектов на загруженных пользователем изображениях (не для обучения нашей пользовательской модели), то аргументы могут быть переданы в функцию run в detect.py через представления Django.
Шаги:
- Запустите новый проект Django.
- Запустите новое приложение Django.
- Дамп yolov5 репозитория в этом приложении и добавить приложение в settings.py , как обычно. * Мне пришлось переименовать Django-app 'models.py' в 'model.py'. Из-за конфликта имен с модулем yolov5 models.
- В файле apps / view.py import detect.py
- Напишите любой (FBV / CBV) и передайте изображение в функцию запуска detect.py.
- Как обычно, вывод будет сохранен в папке run / detect / exp.
- Визуализируйте изображение из этой папки в любой шаблон Django.
Например:
from . import detect
# rest of the code above
# Below is the post method of a
# ObjectDetectionTemplateView
def post(self, *args, **kwargs):
img_id = kwargs.get("id")
image_qs = ImageFile.objects.get(id=img_id)
detect.run(source=image_qs.image.path,
iou_thres=0.45, line_thickness=1,
project="media/runs/detect")
Кроме того, я пока не мог придумать другого пути. Но этот твик у меня сработал.