· 4 years ago · Jun 13, 2021, 08:50 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 #rcolor = 0
36 size = StringField('size', validators = [DataRequired()])
37 rcolor = StringField('choose frame color', 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):
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 #int rcolor = 1
80 size=int(size)
81 rcolor = int(rcolor)
82 height = 224
83 width = 224
84 img= np.array(img.resize((height,width)))/255.0
85 print(size)
86 print(rcolor)
87 #rcolor = 0
88 img[:size,:,rcolor] = 0
89 img[:,0:size,rcolor] = 0
90 img[:,224-size:,rcolor] = 0
91 img[224-size:,:,rcolor] = 0
92##сохраняем новое изображение
93 img = Image.fromarray((img * 255).astype(np.uint8))
94 print(img)
95 #img = Image.fromarray(img)
96 new_path = "./static/new.png"
97 print(img)
98 img.save(new_path)
99 return new_path, gr_path
100
101
102# метод обработки запроса GET и POST от клиента
103@app.route("/net",methods=['GET', 'POST'])
104def net():
105 # создаем объект формы
106 form = NetForm()
107 # обнуляем переменные передаваемые в форму
108 filename=None
109 newfilename=None
110 grname=None
111 # проверяем нажатие сабмит и валидацию введенных данных
112 if form.validate_on_submit():
113 # файлы с изображениями читаются из каталога static
114 filename = os.path.join('./static', secure_filename(form.upload.data.filename))
115
116 sz=form.size.data
117
118 form.upload.data.save(filename)
119 newfilename, grname = draw(filename,sz)
120 # передаем форму в шаблон, так же передаем имя файла и результат работы нейронной
121 # сети если был нажат сабмит, либо передадим falsy значения
122
123 return render_template('net.html',form=form,image_name=newfilename,gr_name=grname)
124
125
126if __name__ == "__main__":
127 app.run(host='127.0.0.1',port=5000)
128