· 4 years ago · Jun 23, 2021, 07:38 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'] = '6LcDoScbAAAAANOWBHNB3QnRTxrJvpOItbhMBKsL'
24app.config['RECAPTCHA_PRIVATE_KEY'] = '6LcDoScbAAAAAB2vlAIbxvkMUqoI90VBDX_Ix7M8'
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 cho = StringField('1-поменять правую и левую часть,2-поменять верхнюю и нижнюю часть', validators = [DataRequired()])
36 rcolor = StringField('choose level of red intensity (0.0 - 1)', validators = [DataRequired()])
37 gcolor = StringField('choose level of green intensity (0.0 - 1)', validators = [DataRequired()])
38 bcolor = StringField('choose level of blue intensity (0.0 - 1)', validators = [DataRequired()])
39 # поле загрузки файла
40 # здесь валидатор укажет ввести правильные файлы
41 upload = FileField('Load image', validators=[
42 FileRequired(),
43 FileAllowed(['jpg', 'png', 'jpeg'], 'Images only!')])
44 # поле формы с capture
45 recaptcha = RecaptchaField()
46 #кнопка submit, для пользователя отображена как send
47 submit = SubmitField('send')
48# функция обработки запросов на адрес 127.0.0.1:5000/net
49# модуль проверки и преобразование имени файла
50# для устранения в имени символов типа / и т.д.
51from werkzeug.utils import secure_filename
52import os
53
54import numpy as np
55from PIL import Image
56import matplotlib.pyplot as plt
57import seaborn as sns
58
59## функция для оброботки изображения
60def draw(filename,cho,rcolor,gcolor,bcolor):
61 ##открываем изображение
62 print(filename)
63 img= Image.open(filename)
64 x, y = img.size
65 rcolor = float(rcolor)
66 gcolor = float(gcolor)
67 bcolor = float(bcolor)
68 cho=int(cho)
69
70##делаем график
71 fig = plt.figure(figsize=(6, 4))
72 ax = fig.add_subplot()
73 data = np.random.randint(0, 255, (100, 100))
74 ax.imshow(img, cmap='plasma')
75 b = ax.pcolormesh(data, edgecolors='black', cmap='plasma')
76 fig.colorbar(b, ax=ax)
77 gr_path = "./static/newgr.png"
78 sns.displot(data)
79 #plt.show()
80 plt.savefig(gr_path)
81 plt.close()
82
83 img= np.array
84 img[x//2,:,0] = rcolor
85 img[x//2:,:,1] = gcolor
86 img[x//2:,:,2] = bcolor
87 img = Image.fromarray((img * 255).astype(np.uint8))
88
89##меняем половинки картинок по выбору
90 if cho==1:
91 a = img.crop((0, 0, int(y * 0.5), x))
92 b = img.crop((int(y * 0.5), 0, x, y))
93 img.paste(b, (0, 0))
94 img.paste(a, (int(x * 0.5), 0))
95
96 output_filename = filename
97 img.save(output_filename)
98 else:
99 img=img.rotate(90)
100 a = img.crop((0, 0, int(y * 0.5), x))
101 b = img.crop((int(y * 0.5), 0, x, y))
102 img.paste(b, (0, 0))
103 img.paste(a, (int(y * 0.5), 0))
104 img=img.rotate(270)
105
106 output_filename = filename
107 img.save(output_filename)
108 return output_filename,gr_path
109
110
111# метод обработки запроса GET и POST от клиента
112@app.route("/net",methods=['GET', 'POST'])
113def net():
114 # создаем объект формы
115 form = NetForm()
116 # обнуляем переменные передаваемые в форму
117 filename=None
118 newfilename=None
119 grname=None
120 # проверяем нажатие сабмит и валидацию введенных данных
121 if form.validate_on_submit():
122 # файлы с изображениями читаются из каталога static
123 filename = os.path.join('./static', secure_filename(form.upload.data.filename))
124 ch=form.cho.data
125 sr=form.rcolor.data
126 sg=form.gcolor.data
127 sb=form.bcolor.data
128
129
130 form.upload.data.save(filename)
131 newfilename,grname = draw(filename,ch,sr,sg,sb)
132 # передаем форму в шаблон, так же передаем имя файла и результат работы нейронной
133 # сети если был нажат сабмит, либо передадим falsy значения
134
135 return render_template('net.html',form=form,image_name=newfilename,gr_name=grname)
136
137
138if __name__ == "__main__":
139 app.run(host='127.0.0.1',port=5000)