You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
3.7 KiB
Python
72 lines
3.7 KiB
Python
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') |