From 4f369658d9e24356a6bd5f5203b4232aae132fce Mon Sep 17 00:00:00 2001 From: wangchunlin Date: Wed, 8 Mar 2023 20:19:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E4=BA=86=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=A3=80=E6=B5=8B=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=AA=97=E5=8F=A3=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- learn/Darknet2Pytorch2Onnx | 2 +- learn/templates/home.html | 135 +++++++++++++++++++++++++-------- learn/views.py | 148 ++++++++++++++----------------------- learn/yolov5 | 2 +- 4 files changed, 163 insertions(+), 124 deletions(-) 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