· 4 years ago · Jun 23, 2021, 08:42 AM
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
88##меняем половинки картинок по выбору
89 if cho==1:
90 a = img.crop((0, 0, int(y * 0.5), x))
91 b = img.crop((int(y * 0.5), 0, x, y))
92 img.paste(b, (0, 0))
93 img.paste(a, (int(x * 0.5), 0))
94
95 output_filename = filename
96 img.save(output_filename)
97 else:
98 img=img.rotate(90)
99 a = img.crop((0, 0, int(y * 0.5), x))
100 b = img.crop((int(y * 0.5), 0, x, y))
101 img.paste(b, (0, 0))
102 img.paste(a, (int(y * 0.5), 0))
103 img=img.rotate(270)
104
105 output_filename = filename
106 img.save(output_filename)
107 return output_filename,gr_path
108
109
110# метод обработки запроса GET и POST от клиента
111@app.route("/net",methods=['GET', 'POST'])
112def net():
113 # создаем объект формы
114 form = NetForm()
115 # обнуляем переменные передаваемые в форму
116 filename=None
117 newfilename=None
118 grname=None
119 # проверяем нажатие сабмит и валидацию введенных данных
120 if form.validate_on_submit():
121 # файлы с изображениями читаются из каталога static
122 filename = os.path.join('./static', secure_filename(form.upload.data.filename))
123 ch=form.cho.data
124 sr=form.rcolor.data
125 sg=form.gcolor.data
126 sb=form.bcolor.data
127
128
129 form.upload.data.save(filename)
130 newfilename,grname = draw(filename,ch,sr,sg,sb)
131 # передаем форму в шаблон, так же передаем имя файла и результат работы нейронной
132 # сети если был нажат сабмит, либо передадим falsy значения
133
134 return render_template('net.html',form=form,image_name=newfilename,gr_name=grname)
135
136
137if __name__ == "__main__":
138 app.run(host='127.0.0.1',port=5000)