Как использовать модель 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.

Шаги:

  1. Запустите новый проект Django.
  2. Запустите новое приложение Django.
  3. Дамп yolov5 репозитория в этом приложении и добавить приложение в settings.py , как обычно. * Мне пришлось переименовать Django-app 'models.py' в 'model.py'. Из-за конфликта имен с модулем yolov5 models.
  4. В файле apps / view.py import detect.py
  5. Напишите любой (FBV / CBV) и передайте изображение в функцию запуска detect.py.
  6. Как обычно, вывод будет сохранен в папке run / detect / exp.
  7. Визуализируйте изображение из этой папки в любой шаблон 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")

Кроме того, я пока не мог придумать другого пути. Но этот твик у меня сработал.

Другие вопросы по тегам