如何在Django中使用yolov5模型

问题描述

我想在Django中使用yolov5模型,但是遇到了麻烦。

我想做的是 如果用户将图像上传到django服务器,则使用yolov5模型进行对象检测,然后将结果显示在Web上。该过程本身很简单。 但是我不确定如何附加yolov5 api和Django。

正如使用过yolo的人所知道的那样,yolo基本上是基于命令运行api的。

!python train.py --img 512 --batch 16 --epochs 100 --data ~~   # for training
!python detect.py --weights'/content/yolov5/runs/~~            # for detection

有什么方法可以在Django视图中运行它吗?

我尝试了诸如execfile()和os.system()之类的python函数,这些函数在Python脚本中以解释器的方式执行命令,但无法正常工作。 (我认为Django和Yolo之间的路径是扭曲的。)

实际上,如果可能的话,最好将yolo api作为Keras之类的模块加载并像函数一样运行而不是command方法。 但是我找不到像模块之类的使用yolov5的方法

如何解决此问题? 请给我一些建议。

解决方法

如果仅需要 yolov5 训练模型对用户上传的图像进行对象检测(不训练我们的自定义模型),则可以通过 Django 视图将参数传递给 detect.py 中的 run 函数。

步骤:

  1. 开始一个新的 Django 项目。
  2. 启动一个新的 Django 应用。
  3. 转储此应用中的 yolov5 存储库,并像往常一样将应用添加到 settings.py 中。 * 我不得不将 Django-app 的 'models.py' 重命名为 'model.py'。由于与 yolov5 模型模块的命名冲突。
  4. 在 apps/view.py 中导入detect.py
  5. 编写 any(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")

另外,我现在想不出任何其他方式。但是这个调整对我有用。