|
import requests |
|
import random |
|
import re |
|
|
|
from PIL import Image |
|
|
|
|
|
def mostRecentImg(imgs:str): |
|
mostRecent = imgs[0].split('-') |
|
for per in imgs[1:]: |
|
splits = per.split('-') |
|
if splits[0] > mostRecent[0]: |
|
mostRecent = splits |
|
elif splits[1] > mostRecent[1]: |
|
mostRecent = splits |
|
elif splits[2] > mostRecent[2]: |
|
mostRecent = splits |
|
elif splits[3] > mostRecent[3]: |
|
mostRecent = splits |
|
elif splits[4] > mostRecent[4]: |
|
mostRecent = splits |
|
elif splits[5] > mostRecent[5]: |
|
mostRecent = splits |
|
full = '-'.join(mostRecent) |
|
return full |
|
|
|
|
|
def getAddrFromIP(ip:str) -> dict: |
|
url = "https://www.ip138.com/iplookup.asp?ip={}&action=2".format(ip) |
|
headers = { |
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36' |
|
} |
|
|
|
|
|
response = requests.get(url=url, headers=headers) |
|
response.encoding = "gb2312" |
|
|
|
html = response.text |
|
|
|
info = dict() |
|
for match in re.finditer('"(prov|city|ct)":"(.*?)"', html): |
|
divide = match.group().split(":") |
|
info["{}".format(divide[0].strip('"'))] = divide[1].strip('"') |
|
return info |
|
|
|
def RandomEmail(emailType=None, rang=None): |
|
__emailtype = ["@qq.com", "@163.com", "@126.com", "@189.com", "@gmail.com"] |
|
|
|
if emailType == None: |
|
__randomEmail = random.choice(__emailtype) |
|
else: |
|
__randomEmail = emailType |
|
|
|
if rang == None: |
|
__rang = random.randint(6, 10) |
|
else: |
|
__rang = int(rang) |
|
__Number = "0123456789qbcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPWRSTUVWXYZ" |
|
__randomNumber = "".join(random.choice(__Number) for i in range(__rang)) |
|
_email = __randomNumber + __randomEmail |
|
return _email |
|
|
|
|
|
import torch as t |
|
import torchvision as tv |
|
|
|
device = t.device("cpu") |
|
img_size = 256 |
|
normalize = tv.transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) |
|
transform = tv.transforms.Compose( |
|
[tv.transforms.Resize([img_size, img_size]), tv.transforms.CenterCrop([img_size, img_size]), |
|
tv.transforms.ToTensor(), normalize]) |
|
|
|
Apple = ['[Apple_scab]', '[Black_rot]', '[Cedar_apple_rust]', '[healthy]'] |
|
Cherry = ['[Powdery_mildew]', '[healthy]'] |
|
Corn = ['[Cercospora_leaf_spot] [Gray_leaf_spot]', '[Common_rust]', '[Northern_Leaf_Blight]', '[healthy]'] |
|
Grape = ['[Black_rot]', '[Esca_Black_Measles]', '[Leaf_blight]', '[healthy]'] |
|
Peach = ['[Bacterial_spot]', '[healthy]'] |
|
Pepper = ['[Bacterial_spot]', '[healthy]'] |
|
Potato = ['[Early_blight]', '[Late_blight]', '[healthy]'] |
|
Tomato = ['[Target_Spot]', '[YellowLeaf_Curl_Virus]', '[Bacterial_spot]', '[Early_blight]', '[healthy]', '[Late_blight]', '[Leaf_Mold]', '[Septoria_leaf_spot]', '[Spider_mites]'] |
|
classname = ["apple", "cherry", "corn", "grape", "peach", "pepper", "potato", "tomato"] |
|
classes = ['1', '2', '3', '4', '5', '6', '7', '8', '9'] |
|
en2ch = {"Apple [Apple_scab]": "苹果 黑星病", "Apple [Black_rot]": "苹果 黑腐病", "Apple [Cedar_apple_rust]": "苹果 胶锈菌瘿", "Apple [healthy]": "苹果 健康", |
|
|
|
"Cherry [Powdery_mildew]": "樱桃 白粉病", "Cherry [healthy]": "樱桃 健康", |
|
|
|
"Corn [Cercospora_leaf_spot] [Gray_leaf_spot]": "玉米 叶斑病 灰斑病", "Corn [Common_rust]": "玉米 锈病", "Corn [Northern_Leaf_Blight]": "玉米 大斑病", "Corn [healthy]": "玉米 健康", |
|
|
|
"Grape [Black_rot]": "葡萄 黑腐病", "Grape [Esca_Black_Measles]": "葡萄 伊斯卡黑色麻疹", "Grape [Leaf_blight]": "葡萄 叶疫病", "Grape [healthy]": "葡萄 健康", |
|
|
|
"Peach [Bacterial_spot]": "桃子 细菌性斑点病", "Peach [healthy]": "桃子 健康", |
|
|
|
"Pepper [Bacterial_spot]": "胡椒 细菌性斑点病", "Pepper [healthy]": "胡椒 健康", |
|
|
|
"Potato [Early_blight]": "土豆 早疫病", "Potato [healthy]": "土豆 健康", "Potato [Late_blight]": "土豆 晚疫病", |
|
|
|
'Tomato [Target_Spot]': "西红柿 靶斑病", 'Tomato [YellowLeaf_Curl_Virus]': "西红柿 黄化曲叶病毒", |
|
'Tomato [Bacterial_spot]': "西红柿 细菌性斑点病", 'Tomato [Early_blight]': "西红柿 早疫病", |
|
'Tomato [healthy]': "西红柿 健康", 'Tomato [Late_blight]': "西红柿 晚疫病", |
|
'Tomato [Leaf_Mold]': "西红柿 叶霉病", 'Tomato [Septoria_leaf_spot]': "西红柿 针壳孢叶斑病", |
|
'Tomato [Spider_mites]': "西红柿 蜘蛛螨", |
|
|
|
"apple [apple scab]": "苹果 [苹果黑星病]", |
|
"apple [black rot]": "苹果 [黑腐病]", |
|
"apple [cedar apple rust]": "苹果 [雪松苹果锈病]", |
|
"apple [healthy]": "苹果 [健康]", |
|
"blueberry [healthy]": "蓝莓 [健康]", |
|
"cherry [including sour] [powdery mildew]": "樱桃 [含酸][白粉病]", |
|
"cherry [including sour] [healthy]": "樱桃 [包括酸的][健康的]", |
|
"corn [maize cercospora leaf spot] [gray leaf spot]": "玉米 [玉米褐斑病叶斑病][灰斑病]", |
|
"corn [maize common rust]": "玉米 [玉米普通锈病]", |
|
"corn [maize northern leaf blight]": "玉米 [玉米北叶枯病]", |
|
"corn [healthy]": "玉米 [健康]", |
|
"grape [black rot]": "葡萄 [黑腐病]", |
|
"grape [esca black measles]": "葡萄 [埃斯卡黑麻疹]", |
|
"grape [leaf blight] [isariopsis leaf spot]": "葡萄 [叶枯病][狭叶草叶斑病]", |
|
"grape [healthy]": "葡萄 [健康]", |
|
"orange [haunglongbing citrus greening]": "柑桔 [鬼龙槟榔]", |
|
"peach [bacterial spot]": "桃子 [细菌性斑点病]", |
|
"peach [healthy]": "桃子 [健康]", |
|
"bellpepper [bacterial spot]": "灯笼椒 [细菌性斑点病]", |
|
"bellpepper [healthy]": "灯笼椒 [健康]", |
|
"potato [early blight]": "土豆 [早疫病]", |
|
"potato [late blight]": "土豆 [晚疫病]", |
|
"potato [healthy]": "土豆 [健康]", |
|
"raspberry [healthy]": "覆盆子 [健康]", |
|
"soybean [healthy]": "大豆 [健康]", |
|
"squash [powdery mildew]": "南瓜 [白粉病]", |
|
"strawberry [leaf scorch]": "草莓 [叶子枯萎]", |
|
"strawberry [healthy]": "草莓 [健康]", |
|
"tomato [bacterial spot]": "番茄 [细菌性斑点病]", |
|
"tomato [early blight]": "番茄 [早疫病]", |
|
"tomato [late blight]": "番茄 [晚疫病]", |
|
"tomato [leaf mold]": "番茄 [霉菌]", |
|
"tomato [septoria leaf spot]": "番茄 [斑疹叶]", |
|
"tomato [spider mites] [two spotted spider mite]": "番茄 [蜘蛛螨][两斑蜘蛛螨]", |
|
"tomato [target spot]": "番茄 [靶斑病]", |
|
"tomato [yellow leaf curl virus]": "番茄 [黄曲叶病毒]", |
|
"tomato [mosaic virus]": "番茄 [花叶病毒]", |
|
"tomato [healthy]": "番茄 [健康]" |
|
} |
|
|
|
|
|
def infer(model, image_PIL, isShowSoftmax=False): |
|
t.no_grad() |
|
|
|
image_tensor = transform(image_PIL) |
|
|
|
image_tensor.unsqueeze_(0) |
|
|
|
image_tensor = image_tensor.to(device) |
|
out = model(image_tensor) |
|
|
|
_, indices = t.sort(out, descending=True) |
|
|
|
|
|
percentage = t.nn.functional.softmax(out, dim=1)[0] * 100 |
|
|
|
|
|
item = indices[0] |
|
if isShowSoftmax: |
|
for idx in item: |
|
ss = percentage[idx] |
|
value = ss.item() |
|
name = classes[idx] |
|
|
|
|
|
|
|
_, predicted = t.max(out.data, 1) |
|
maxPredicted = classes[predicted.item()] |
|
maxAccuracy = percentage[item[0]].item() |
|
return int(maxPredicted)-1, maxAccuracy |
|
|
|
model_Apple = t.load('static/models/applemodel.pkl', map_location=device) |
|
model_Apple = model_Apple.to(device) |
|
model_Apple.eval() |
|
model_Cherry = t.load('static/models/cherrymodel.pkl', map_location=device) |
|
model_Cherry = model_Cherry.to(device) |
|
model_Cherry.eval() |
|
model_Corn = t.load('static/models/cornmodel.pkl', map_location=device) |
|
model_Corn = model_Corn.to(device) |
|
model_Corn.eval() |
|
model_Grape = t.load('static/models/grapemodel.pkl', map_location=device) |
|
model_Grape = model_Grape.to(device) |
|
model_Grape.eval() |
|
model_Peach = t.load('static/models/peachmodel.pkl', map_location=device) |
|
model_Peach = model_Peach.to(device) |
|
model_Peach.eval() |
|
model_Pepper = t.load('static/models/peppermodel.pkl', map_location=device) |
|
model_Pepper = model_Pepper.to(device) |
|
model_Pepper.eval() |
|
model_Potato = t.load('static/models/potatomodel.pkl', map_location=device) |
|
model_Potato = model_Potato.to(device) |
|
model_Potato.eval() |
|
model_Tomato = t.load('static/models/tomatomodel.pkl', map_location=device) |
|
model_Tomato = model_Tomato.to(device) |
|
model_Tomato.eval() |
|
|
|
|
|
def infer_special(value, image): |
|
print("预测{}".format(value)) |
|
condition, val = infer(eval("model_{}".format(value)), image, True) |
|
condition = eval("{}[condition]".format(value)) |
|
val = str(float(val) / 100)[:9] |
|
ch = en2ch[' '.join([value, condition])] |
|
return {'prediction': {'species': ch.split(' ')[0], 'condition': ' '.join(ch.split(' ')[1:]), 'value': val}, 'conditionen': condition} |
|
|
|
|
|
import datetime |
|
from sqlalchemy import and_, or_ |
|
from flask import render_template |
|
from detectweb.models.predict import Predict |
|
week, month, year, tenyear = 7, 30, 360, 3600 |
|
delta = {"week": 1, "month": 1, "year": 30, "tenyear": 360} |
|
|
|
|
|
def getStatistics(timeline, type_, all_of_same_city, time_now, current_user): |
|
assign_timeline = {"week": -1, "month": -1, "year": -1, "tenyear": -1} |
|
assign_type = {"allkinds": -1, "apple": -1, "cherry": -1, "corn": -1, "grape": -1, |
|
"peach": -1, "pepper": -1, "potato": -1, "tomato": -1} |
|
if timeline not in assign_timeline.keys() or type_ not in assign_type.keys(): |
|
return render_template('404.html') |
|
alltimes = [] |
|
|
|
predicts_certain_time = eval("all_of_same_city.filter(and_((Predict.predict_time >= time_now - datetime.timedelta(days={})), Predict.predict_time <= time_now))".format(timeline)) |
|
if type_ != "allkinds": |
|
predicts_certain_time = eval("predicts_certain_time.filter(or_(Predict.predict_result.like('{}%'), Predict.predict_result.like('{}%')))".format(type_, type_.capitalize())) |
|
|
|
alltimes.append(predicts_certain_time.count()) |
|
last_time = predicts_certain_time |
|
for i in range(eval(timeline)-delta[timeline], 0, -delta[timeline]): |
|
this_time = last_time.filter(and_((Predict.predict_time >= time_now - datetime.timedelta(days=i)), Predict.predict_time <= time_now)) |
|
last_time = this_time |
|
alltimes.append(this_time.count()) |
|
assign_timeline[timeline] = alltimes |
|
assign_type[type_] = 1 |
|
return render_template( |
|
'dashboard.html', |
|
assign_timeline=assign_timeline, |
|
assign_type=assign_type, |
|
timeline=timeline, |
|
type_=type_, |
|
user=current_user) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|