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 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') 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() 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] print(cast, da, satu) mesg = "颜色分布(0-1合理):{}   分布方差(负数偏暗):{}   色彩饱和度(零为补光):{}".format(cast, da, satu) 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}) def dlurl(request): if request.method == 'GET': url = request.GET["url"] #获取前端上传的文件 m_model=request.GET["model"] m_class=request.GET["class"] 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 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] print(cast, da, satu) mesg = "颜色分布(0-1合理):{}   分布方差(负数偏暗):{}   色彩饱和度(零为补光):{}".format(cast, da, satu) 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}) def home(request): return render(request, 'home.html')