· 4 years ago · Jun 21, 2021, 07:54 PM
1print("Hello world")
2from flask import Flask
3app = Flask(__name__)
4#декоратор для вывода страницы по умолчанию
5@app.route("/")
6def hello():
7 return " <html><head></head> <body> Hello World! </body></html>"
8
9from flask import render_template
10#наша новая функция сайта
11
12# модули работы с формами и полями в формах
13from flask_wtf import FlaskForm,RecaptchaField
14from wtforms import StringField, SubmitField, TextAreaField
15# модули валидации полей формы
16from wtforms.validators import DataRequired
17from flask_wtf.file import FileField, FileAllowed, FileRequired
18# используем csrf токен, можете генерировать его сами
19SECRET_KEY = 'secret'
20app.config['SECRET_KEY'] = SECRET_KEY
21# используем капчу и полученные секретные ключи с сайта google
22app.config['RECAPTCHA_USE_SSL'] = False
23app.config['RECAPTCHA_PUBLIC_KEY'] = '6LfYYBYbAAAAADJHJ8wKO4fzgq7uks6wuNL-sSnK'
24app.config['RECAPTCHA_PRIVATE_KEY'] = '6LfYYBYbAAAAALpp5LL3quMnXKXHAo2KdfQAm8-V'
25app.config['RECAPTCHA_OPTIONS'] = {'theme': 'white'}
26# обязательно добавить для работы со стандартными шаблонами
27from flask_bootstrap import Bootstrap
28bootstrap = Bootstrap(app)
29# создаем форму для загрузки файла
30class NetForm(FlaskForm):
31 # поле для введения строки, валидируется наличием данных
32 # валидатор проверяет введение данных после нажатия кнопки submit
33 # и указывает пользователю ввести данные если они не введены
34 # или неверны
35 size_1 = StringField('size1', validators = [DataRequired()])
36 size_2 = StringField('size2', validators = [DataRequired()])
37 size_3 = StringField('size3', validators = [DataRequired()])
38 # поле загрузки файла
39 # здесь валидатор укажет ввести правильные файлы
40 upload = FileField('Load image', validators=[
41 FileRequired(),
42 FileAllowed(['jpg', 'png', 'jpeg'], 'Images only!')])
43 # поле формы с capture
44 recaptcha = RecaptchaField()
45 #кнопка submit, для пользователя отображена как send
46 submit = SubmitField('send')
47# функция обработки запросов на адрес 127.0.0.1:5000/net
48# модуль проверки и преобразование имени файла
49# для устранения в имени символов типа / и т.д.
50from werkzeug.utils import secure_filename
51import os
52
53import numpy as np
54from PIL import Image
55import matplotlib.pyplot as plt
56import seaborn as sns
57
58## функция для оброботки изображения
59def draw(filename,size_1,size_2,size_3):
60 ##открываем изображение
61 print(filename)
62 img= Image.open(filename)
63
64##делаем график
65 fig = plt.figure(figsize=(6, 4))
66 ax = fig.add_subplot()
67 data = np.random.randint(0, 255, (100, 100))
68 ax.imshow(img, cmap='plasma')
69 b = ax.pcolormesh(data, edgecolors='black', cmap='plasma')
70 fig.colorbar(b, ax=ax)
71 gr_path = "./static/newgr.png"
72 sns.displot(data)
73 #plt.show()
74 plt.savefig(gr_path)
75 plt.close()
76
77
78##рисуем рамки
79 size_1=int(size_1)
80 size_2=int(size_2)
81 size_3=int(size_3)
82 height = 224
83 width = 224
84 img= np.array(img.resize((height,width)))/255.0
85 print(size_1)
86 print(size_2)
87 print(size_3)
88
89 size_2=size_1+size_2
90 size_3=size_1+size_2+size_3
91 print(img)
92 img[:size_3,:] = (0,0,1)
93 img[:,0:size_3] = (0,0,1)
94 img[:,224-size_3:] = (0,0,1)
95 img[224-size_3:,:] = (0,0,1)
96
97 img[:size_2,:] = (0,1,0)
98 img[:,0:size_2] = (0,1,0)
99 img[:,224-size_2:] = (0,1,0)
100 img[224-size_2:,:] = (0,1,0)
101
102
103 img[:size_1,:] = (0,0,1)
104 img[:,0:size_1] = (0,0,1)
105 img[:,224-size_1:] = (0,0,1)
106 img[224-size_1:,:] = (0,0,1)
107
108##сохраняем новое изображение
109 img = Image.fromarray((img * 255).astype(np.uint8))
110 print(img)
111 #img = Image.fromarray(img)
112 new_path = "./static/new.png"
113 print(img)
114 img.save(new_path)
115 return new_path, gr_path
116
117
118# метод обработки запроса GET и POST от клиента
119@app.route("/net",methods=['GET', 'POST'])
120def net():
121 # создаем объект формы
122 form = NetForm()
123 # обнуляем переменные передаваемые в форму
124 filename=None
125 newfilename=None
126 grname=None
127 # проверяем нажатие сабмит и валидацию введенных данных
128 if form.validate_on_submit():
129 # файлы с изображениями читаются из каталога static
130 filename = os.path.join('./static', secure_filename(form.upload.data.filename))
131
132 sz1=form.size_1.data
133 sz2=form.size_2.data
134 sz3=form.size_3.data
135
136 form.upload.data.save(filename)
137 newfilename, grname = draw(filename,sz1,sz2,sz3)
138 # передаем форму в шаблон, так же передаем имя файла и результат работы нейронной
139 # сети если был нажат сабмит, либо передадим falsy значения
140
141 return render_template('net.html',form=form,image_name=newfilename,gr_name=grname,filename=filename)
142
143
144if __name__ == "__main__":
145 app.run(host='127.0.0.1',port=5000,debug=True)