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 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') #获取前端上传的文件 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 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) 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) 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) ''' 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') 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): 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}) if(int(m_model)==2): 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}) 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}) 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}) 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}) if(int(m_model)==7): 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}) if(int(m_class)==2): #山火 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':class_name+":"+model_name+",模型: "+"v3s.pt"+'
'+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':class_name+":"+model_name+",模型: "+"v6m6.pt"+'
'+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':class_name+":"+model_name+",模型: "+"best.pt"+'
'+RR+'
'+mesg, 'flag': True}) if(int(m_class)==3): # 绝缘子 if(int(m_model)==1): 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}) if(int(m_class)==4): # 一般物体coco if(int(m_model)==1): #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})