diff --git a/learn/Darknet2Pytorch2Onnx b/learn/Darknet2Pytorch2Onnx
index 1d4cf92..549f9a6 160000
--- a/learn/Darknet2Pytorch2Onnx
+++ b/learn/Darknet2Pytorch2Onnx
@@ -1 +1 @@
-Subproject commit 1d4cf9249f723166ceaea3573becbba4a7726916
+Subproject commit 549f9a60c2e04771fd45ed8420e012cad28a4094
diff --git a/learn/templates/home.html b/learn/templates/home.html
index 4f2bffb..3aa7918 100644
--- a/learn/templates/home.html
+++ b/learn/templates/home.html
@@ -40,7 +40,7 @@
$("#class").change(function () {
$("#model").empty();//清空回调列表;
var val = this.value;
- console.log("选择的检测类别:", val);
+ console.log("选择的检测类别:", Object.keys(dic_class)[val-1]);
$.each(dic_class, function (i, n) { //each()方法为每个匹配元素规定要运行的函数;
if (Object.keys(dic_class)[val-1] == i) {
$.each(dic_class[i], function (j,m) {
@@ -58,10 +58,10 @@
@@ -108,28 +135,40 @@ layui.use('upload', function(){
'csrfmiddlewaretoken':function(){
return $(':input:first').val()
}
- , 'model':function(){
- var model = $('#model option:selected').val();
- return model;
- }
- , 'class':function(){
- var model_class = $('#class option:selected').val();
- return model_class;
- }
- , 'model_name':function(){
- var model_class = $('#class option:selected').val();
- var model = $('#model option:selected').val();
- var model_name=dic_class[Object.keys(dic_class)[model_class-1]][model-1];
- return model_name;
- }
- , 'class_name':function(){
- var model_class = $('#class option:selected').val();
- var class_name=Object.keys(dic_class)[model_class-1];
- return class_name;
- }
}
,done: function(res){
- ShowResult(res);
+ // 字典 dict
+ var model = $('#model option:selected').val();
+ var model_class = $('#class option:selected').val();
+ if(model==1) {
+ console.log("检测类别所有模型:",Object.keys(dic_class)[model_class-1])
+ var date = new Date(); //时间对象
+ var str = date.getTime(); //转换成时间戳
+ var num = dic_class[Object.keys(dic_class)[model_class-1]].length-1
+ var table = $("
").prependTo($("#img"))
+ console.log("检测总数:", num)
+ for(var i=0; i").appendTo(table)
+ var last_num
+
+ if((num-i*3)>2){last_num=3}else{last_num=num-i*3}
+
+ for(var j=0;j").appendTo(tr)
+ }
+ }
+ $.each(dic_class[Object.keys(dic_class)[model_class-1]], function (j,m) {
+ var model_num_count = j+1;
+ if(model_num_count==1) {
+ return true;
+ }
+ $.getJSON('/dlurl/', {'url':res.upload_img_path, 'filename':res.source_image_name,'model':model_num_count, 'class':model_class,'model_name':dic_class[Object.keys(dic_class)[model_class-1]][model_num_count-1],'class_name':Object.keys(dic_class)[model_class-1]},function(res){ShowResult(res, num, j-1, table);});
+ })
+ }
+ else {
+ console.log("检测类别与使用模型:", Object.keys(dic_class)[model_class-1], ',',dic_class[Object.keys(dic_class)[model_class-1]][model-1])
+ $.getJSON('/dlurl/', {'url':res.upload_img_path, 'filename':res.source_image_name,'model':model, 'class':model_class,'model_name':dic_class[Object.keys(dic_class)[model_class-1]][model-1],'class_name':Object.keys(dic_class)[model_class-1]},function(res){ShowResult(res, 1);});
+ }
}
,error: function(){
}
@@ -144,7 +183,7 @@ layui.use('upload', function(){
}
diff --git a/learn/views.py b/learn/views.py
index 0f514a4..11b176e 100644
--- a/learn/views.py
+++ b/learn/views.py
@@ -10,6 +10,7 @@ from pathlib import PosixPath
import requests, os, json
import cv2
import numpy as np
+from shutil import copyfile
def adb_shell(cmd):
result = subprocess.getstatusoutput(cmd)
@@ -44,24 +45,15 @@ def detect_brightness():
def upload(request):
if request.method == 'POST':
file = request.FILES.get('file') #获取前端上传的文件
- m_model=request.POST.get('model')
- m_class=request.POST.get('class')
- model_name = request.POST.get("model_name")
- class_name = request.POST.get("class_name")
- print(request.POST["model_name"])
- print(request.POST["class_name"])
- 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
+ img_path = os.path.abspath(curPath+'/static/upload/'+file.name)
print(img_path)
f = open(img_path,'wb')
for i in file.chunks():
f.write(i)
f.close()
- return inference(m_class, m_model, curPath, img_path_res, img_path, model_name, class_name)
+ return JsonResponse({'upload_img_path':img_path, 'source_image_name':file.name})
def dlurl(request):
@@ -75,67 +67,31 @@ def dlurl(request):
print(request.GET["class_name"])
print("m_model:",m_model)
print("url:",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})
+ if(("filename") in request.GET):
+ print("上传图片模式")
+ fix = datetime.now().strftime('%Y%m%d%H%M%S%f')+'1' #给文件加前缀防止文件名重复
+ source_img_path=request.GET["url"]
+ img_path = os.path.join(os.path.dirname(source_img_path),fix+request.GET["filename"])
+ copyfile(source_img_path,img_path)
+ img_path_res = '/static/detected/'+fix+request.GET["filename"]
+ curPath = os.path.abspath( os.path.dirname( __file__ ) )
+ else:
+ 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
+ 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
return inference(m_class, m_model, curPath, img_path_res, img_path, model_name, class_name)
- '''
- result = adb_shell("ImageDetect/build/ImageDetect {}".format(img_path))
- if result[0]==0:
- cast = result[1].split("||")[0]
- da = result[1].split("||")[1]
- satu = result[1].split("||")[2]
- CON = result[1].split("||")[3]
- ASM = result[1].split("||")[4]
- ENT = result[1].split("||")[5]
- MEAN = result[1].split("||")[6]
- sb = result[1].split("||")[7]
- lap = result[1].split("||")[8]
- dev = result[1].split("||")[9]
- print(cast, da, satu)
- mesg = "颜色分布(0-1合理):{} 分布方差(负数偏暗):{} 色彩饱和度(零为补光):{}
对比度:{} 角度方向二阶矩:{} 熵:{} 平均值:{} Sobel:{} Lap:{} dev:{}".format(cast, da, satu, CON, ASM, ENT, MEAN,sb,lap,dev)
- 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+'
'+mesg, '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+'
'+mesg, 'flag': True})
- if(int(m_model)==3): #泛模型
- RR = DL.run(weights=(curPath+"/yolov5/best.pt"), source=img_path, project=(curPath+"/static/detected"))
- return JsonResponse({'img_name':img_path_res,'code':"【烟火 泛模型】"+'
'+RR+'
'+mesg, '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+'
'+mesg, 'flag': True})
- if(int(m_class)==3):
- RR = DL.run(weights=(curPath+"/yolov5/fire_smoke_towercrane.pt"), source=img_path, project=(curPath+"/static/detected"))
- return JsonResponse({'img_name':img_path_res,'code':"【烟火+塔吊】"+'
'+RR+'
'+mesg, 'flag': True})
- if(int(m_class)==4):
- RR = DL.run(weights=(curPath+"/yolov5/vehicle_4class_ljp_v3.0.pt"), source=img_path, project=(curPath+"/static/detected"))
- return JsonResponse({'img_name':img_path_res,'code':"【外破四类】"+'
'+RR+'
'+mesg, 'flag': True})
- if(int(m_class)==5):
- RR = DL.run(weights=(curPath+"/yolov5/vehicle_4class_ljp_v7.0.pt"), source=img_path, project=(curPath+"/static/detected"))
- return JsonResponse({'img_name':img_path_res,'code':"【外破四类】"+'
'+RR+'
'+mesg, 'flag': True})
- if(int(m_class)==6):
- RR = DL.run(weights=(curPath+"/yolov5/vehicle_4class_ljp_v7.0m.pt"), source=img_path, project=(curPath+"/static/detected"))
- return JsonResponse({'img_name':img_path_res,'code':"【外破四类】"+'
'+RR+'
'+mesg, 'flag': True})
- if(int(m_class)==7):
- RR = DL.run(weights=(curPath+"/yolov5/birdpecked_unnormal_version1.pt"), source=img_path, project=(curPath+"/static/detected"))
- return JsonResponse({'img_name':img_path_res,'code':"【绝缘子两类】"+'
'+RR+'
'+mesg, 'flag': True})
- '''
-
-
def home(request):
return render(request, 'home.html')
@@ -158,45 +114,53 @@ def inference(m_class, m_model, curPath, img_path_res, img_path, model_name, cla
if(int(m_class)==1): #外破
if(int(m_model)==1):
- RR = DL.run(weights=(curPath+"/yolov5/vehicle_4class_ljp_v3.0.pt"), source=img_path, project=(curPath+"/static/detected"))
- return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"vehicle_4class_ljp_v3.0.pt"+'
'+RR+'
'+mesg, 'flag': True})
+ print("使用所有模型检测")
if(int(m_model)==2):
+ RR = DL.run(weights=(curPath+"/yolov5/vehicle_4class_ljp_v3.0.pt"), source=img_path, project=(curPath+"/static/detected"))
+ return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"vehicle_4class_ljp_v3.0.pt"+'
'+RR+'
',"msg":mesg, 'flag': True})
+ if(int(m_model)==3):
RR = DL.run(weights=(curPath+"/yolov5/vehicle_4class_ljp_v7.0.pt"), source=img_path, project=(curPath+"/static/detected"))
- return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"vehicle_4class_ljp_v7.0.pt"+'
'+RR+'
'+mesg, 'flag': True})
- if(int(m_model)==3):
- RR = DL.run(weights=(curPath+"/yolov5/vehicle_4class_ljp_v7.0m.pt"), source=img_path, project=(curPath+"/static/detected"))
- return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"vehicle_4class_ljp_v7.0m.pt"+'
'+RR+'
'+mesg, 'flag': True})
+ return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"vehicle_4class_ljp_v7.0.pt"+'
'+RR+'
',"msg":mesg, 'flag': True})
if(int(m_model)==4):
- RR = DL.run(weights=(curPath+"/yolov5/fire_smoke_towercrane.pt"), source=img_path, project=(curPath+"/static/detected"))
- return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"fire_smoke_towercrane.pt"+'
'+RR+'
'+mesg, 'flag': True})
+ RR = DL.run(weights=(curPath+"/yolov5/vehicle_4class_ljp_v7.0m.pt"), source=img_path, project=(curPath+"/static/detected"))
+ return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"vehicle_4class_ljp_v7.0m.pt"+'
'+RR+'
',"msg":mesg, 'flag': True})
if(int(m_model)==5):
- RR = DL.run(weights=(curPath+"/yolov5/vehicle_4class_ljp_v7.0m6.pt"), source=img_path, project=(curPath+"/static/detected"),imgsz=(1280,1280))
- return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"vehicle_4class_ljp_v7.0m6.pt"+'
'+RR+'
'+mesg, 'flag': True})
+ RR = DL.run(weights=(curPath+"/yolov5/fire_smoke_towercrane.pt"), source=img_path, project=(curPath+"/static/detected"))
+ return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"fire_smoke_towercrane.pt"+'
'+RR+'
',"msg":mesg, 'flag': True})
if(int(m_model)==6):
- RR=RONNX.main(curPath+"/Darknet2Pytorch2Onnx/hy_vehicle_4class.onnx", curPath+"/Darknet2Pytorch2Onnx/hy_vehicle_4class.names", img_path, (curPath+"/static/detected"))
- return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"hy_vehicle_4class.onnx"+'
'+RR+'
'+mesg, 'flag': True})
+ RR = DL.run(weights=(curPath+"/yolov5/vehicle_4class_ljp_v7.0m6.pt"), source=img_path, project=(curPath+"/static/detected"),imgsz=(1280,1280))
+ return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"vehicle_4class_ljp_v7.0m6.pt"+'
'+RR+'
',"msg":mesg, 'flag': True})
if(int(m_model)==7):
+ RR=RONNX.main(curPath+"/Darknet2Pytorch2Onnx/hy_vehicle_4class.onnx", curPath+"/Darknet2Pytorch2Onnx/hy_vehicle_4class.names", img_path, (curPath+"/static/detected"))
+ return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"hy_vehicle_4class.onnx"+'
'+RR+'
',"msg":mesg, 'flag': True})
+ if(int(m_model)==8):
RR=RONNX.main(curPath+"/Darknet2Pytorch2Onnx/hy_vehicle_2class.onnx", curPath+"/Darknet2Pytorch2Onnx/hy_vehicle_2class.names", img_path, (curPath+"/static/detected"))
- return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"hy_vehicle_2class.onnx"+'
'+RR+'
'+mesg, 'flag': True})
+ return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"hy_vehicle_2class.onnx"+'
'+RR+'
',"msg":mesg, 'flag': True})
if(int(m_class)==2): #山火
- if(int(m_model)==1): # 小
+ if(int(m_model)==1):
+ print("使用所有模型检测")
+ if(int(m_model)==2): # 小
RR = DL.run(weights=(curPath+"/yolov5/v3s.pt"), source=img_path, project=(curPath+"/static/detected"))
- return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"v3s.pt"+'
'+RR+'
'+mesg, 'flag': True})
- if(int(m_model)==2): # 大
+ return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"v3s.pt"+'
'+RR+'
',"msg":mesg, 'flag': True})
+ if(int(m_model)==3): # 大
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':class_name+":"+model_name+",模型: "+"v6m6.pt"+'
'+RR+'
'+mesg, 'flag': True})
- if(int(m_model)==3): # 范模型
+ return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"v6m6.pt"+'
'+RR+'
',"msg":mesg, 'flag': True})
+ if(int(m_model)==4): # 范模型
RR = DL.run(weights=(curPath+"/yolov5/best.pt"), source=img_path, project=(curPath+"/static/detected"))
- return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"best.pt"+'
'+RR+'
'+mesg, 'flag': True})
+ return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"best.pt"+'
'+RR+'
',"msg":mesg, 'flag': True})
if(int(m_class)==3): # 绝缘子
if(int(m_model)==1):
+ print("使用所有模型检测")
+ if(int(m_model)==2):
RR = DL.run(weights=(curPath+"/yolov5/birdpecked_unnormal_version1.pt"), source=img_path, project=(curPath+"/static/detected"))
- return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"birdpecked_unnormal_version1.pt"+'
'+RR+'
'+mesg, 'flag': True})
+ return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"birdpecked_unnormal_version1.pt"+'
'+RR+'
',"msg":mesg, 'flag': True})
if(int(m_class)==4): # 一般物体coco
- if(int(m_model)==1): #yolov5s
+ if(int(m_model)==1):
+ print("使用所有模型检测")
+ if(int(m_model)==2): #yolov5s
RR = DL.run(weights=(curPath+"/yolov5/yolov5s.pt"), source=img_path, project=(curPath+"/static/detected"))
- return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"yolov5s.pt"+'
'+RR+'
'+mesg, 'flag': True})
+ return JsonResponse({'img_name':img_path_res,'code':class_name+":"+model_name+",模型: "+"yolov5s.pt"+'
'+RR+'
',"msg":mesg, 'flag': True})
\ No newline at end of file
diff --git a/learn/yolov5 b/learn/yolov5
index aded494..fc08e6c 160000
--- a/learn/yolov5
+++ b/learn/yolov5
@@ -1 +1 @@
-Subproject commit aded49418b7c23dc1dcf7e62fcdaeef7f3feea5b
+Subproject commit fc08e6c13803803ded26c0e1d2664da396fa115e