问题描述
我想在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 函数。
步骤:
- 开始一个新的 Django 项目。
- 启动一个新的 Django 应用。
- 转储此应用中的 yolov5 存储库,并像往常一样将应用添加到 settings.py 中。 * 我不得不将 Django-app 的 'models.py' 重命名为 'model.py'。由于与 yolov5 模型模块的命名冲突。
- 在 apps/view.py 中导入detect.py
- 编写 any(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")
另外,我现在想不出任何其他方式。但是这个调整对我有用。