| 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) |
|
|
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|