import re from django.shortcuts import render from django.http import HttpResponse, JsonResponse import os from datetime import datetime import learn.yolov5.detect as DL from pathlib import PosixPath import requests, os, json def upload(request): if request.method == 'POST': file = request.FILES.get('file') #获取前端上传的文件 m_model=request.POST.get('model') m_class=request.POST.get('class') fix = datetime.now().strftime('%Y%m%d%H%M%S%f')+'1' #给文件加前缀防止文件名重复 #以下用绝对路径存储文件,之前我用相对路径一直写不对 curPath = os.path.abspath( os.path.dirname( __file__ ) ) img_path = os.path.abspath(curPath+'/static/upload/'+fix+file.name) #返回给前端的图片路径用相对路径,前端用绝对路径反而加载不了图片 img_path_res = '/static/detected/'+fix+file.name print(img_path) f = open(img_path,'wb') for i in file.chunks(): f.write(i) f.close() if(int(m_class)==1): if(int(m_model)==1): #小模型 RR = DL.run(weights=(curPath+"/yolov5/v3s.pt"), source=img_path, project=(curPath+"/static/detected")) return JsonResponse({'img_name':img_path_res,'code':"【烟火 小模型】"+RR, 'flag': True}) if(int(m_model)==2): #大模型 RR = DL.run(weights=(curPath+"/yolov5/v6m6.pt"), source=img_path, imgsz=(1280, 1280), project=(curPath+"/static/detected")) return JsonResponse({'img_name':img_path_res,'code':"【烟火 大模型】"+RR, 'flag': True}) if(int(m_class)==2): RR = DL.run(weights=(curPath+"/yolov5/yolov5s.pt"), source=img_path, project=(curPath+"/static/detected")) return JsonResponse({'img_name':img_path_res,'code':"【一般物体检测】"+RR, 'flag': True}) def dlurl(request): if request.method == 'GET': url = request.GET["url"] #获取前端上传的文件 m_model=request.GET["model"] m_class=request.GET["class"] print(m_model) print(url) name = url.split(r'/')[-1] if not (name.endswith(".jpg") or name.endswith(".jpeg") or name.endswith(".png") or name.endswith(".bmp")): return JsonResponse({'flag': False}) fix = datetime.now().strftime('%Y%m%d%H%M%S%f')+'1' #给文件加前缀防止文件名重复 curPath = os.path.abspath( os.path.dirname( __file__ ) ) img_path = os.path.abspath(curPath+'/static/download/'+fix+name) r = requests.get(url) # 保存 with open (img_path, 'wb') as f: f.write(r.content) f.close #返回给前端的图片路径用相对路径,前端用绝对路径反而加载不了图片 img_path_res = '/static/detected/'+fix+name if(int(m_class)==1): if(int(m_model)==1): #小模型 RR = DL.run(weights=(curPath+"/yolov5/v3s.pt"), source=img_path, project=(curPath+"/static/detected")) return JsonResponse({'img_name':img_path_res,'code':"【烟火 小模型】"+RR, 'flag': True}) if(int(m_model)==2): #大模型 RR = DL.run(weights=(curPath+"/yolov5/v6m6.pt"), source=img_path, imgsz=(1280, 1280), project=(curPath+"/static/detected")) return JsonResponse({'img_name':img_path_res,'code':"【烟火 大模型】"+RR, 'flag': True}) if(int(m_class)==2): RR = DL.run(weights=(curPath+"/yolov5/yolov5s.pt"), source=img_path, project=(curPath+"/static/detected")) return JsonResponse({'img_name':img_path_res,'code':"【一般物体检测】"+RR, 'flag': True}) def home(request): return render(request, 'home.html')