import re from django.shortcuts import render from django.http import HttpResponse, JsonResponse import os import subprocess from datetime import datetime import learn.yolov5.detect as DL import learn.Darknet2Pytorch2Onnx.hy_runonnx as RONNX 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) return result '''改程序执行慢,且因为C++和python在cv2中处理细节不同,返回值并不相同 def detect_brightness(): img = cv2.imread("/home/wangchunlin/img_brightness/1.jpeg") gray_img= cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) a=0 Ma = 0 hist = np.zeros(256,dtype=int) print(hist.dtype) h, w = gray_img.shape[:2] print(h, w) for i in range(h): for j in range(w): if(float(gray_img[i,j]-128)>128): input(">") a+=float(gray_img[i,j]-128) hist[int(gray_img[i,j])]+=1 da = a /float(h*w) print(da) for i in range(256): Ma+=abs(i-128-da)*hist[i] Ma /= float(h*w) print(Ma) cast=abs(da)/abs(Ma) return cast ''' def upload(request): if request.method == 'POST': file = request.FILES.get('file') #获取前端上传的文件 #以下用绝对路径存储文件,之前我用相对路径一直写不对 curPath = os.path.abspath( os.path.dirname( __file__ ) ) 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 JsonResponse({'upload_img_path':img_path, 'source_image_name':file.name}) def dlurl(request): if request.method == 'GET': url = request.GET["url"] #获取前端上传的文件 m_model=request.GET["model"] m_class=request.GET["class"] model_name = request.GET.get("model_name") class_name = request.GET.get("class_name") print(request.GET["model_name"]) print(request.GET["class_name"]) print("m_model:",m_model) print("url:",url) 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 return inference(m_class, m_model, curPath, img_path_res, img_path, model_name, class_name) def home(request): return render(request, 'home.html') def 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): 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+'
',"msg":mesg, 'flag': True}) if(int(m_model)==4): 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/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 = 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+'
',"msg":mesg, 'flag': True}) if(int(m_class)==2): #山火 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+'
',"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+'
',"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+'
',"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+'
',"msg":mesg, 'flag': True}) if(int(m_class)==4): # 一般物体coco 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+'
',"msg":mesg, 'flag': True})