質問編集履歴

3

消す必要があるため消します

2021/09/11 07:38

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- codeの下で出力されを文字をglobal関数を使い上class内処理した
1
+ 解決したのでまし
test CHANGED
@@ -1,233 +1,3 @@
1
- ## アプリの簡単な仕組み
1
+ # 解決したで消します
2
2
 
3
- - flaskを使っていて, 文字の写真を読み込み(index.html)そのfontを識別して文字を認識しその文字であろうfontの種類を確率で上位5まで当て出力する(result.html)appをつくています.
4
-
5
-
6
-
7
- ## 実現したいこと
8
-
9
- - appを作っている中で判定された文字の種類の中で多いものをランキング形式にしindex.htmlに出力したい.
10
-
11
- - global変数を使いcodeの下で出力されたデータを上で処理しHtmlに出力したい.
12
-
13
-
14
-
15
- ## 該当のcode
16
-
17
- - server.py
18
-
19
- ```python
20
-
21
- from pickle import NONE
22
-
23
- from typing import Any
24
-
25
- from flask import Flask, render_template, request, url_for
26
-
27
- from collections import Counter
28
-
29
- import numpy as np
30
-
31
- import cv2
32
-
33
- import os
34
-
35
- import sys
36
-
37
- import uuid
38
-
39
- import traceback
40
-
41
- import model
42
-
43
-
44
-
45
-
46
-
47
- app = Flask(__name__, static_url_path="/static")
48
-
49
-
50
-
51
-
52
-
53
- class FontsDataResponse:
54
-
55
- def __init__(self, fonts_data: model.FontData, message: str = "") -> None:
56
-
57
- # font_dataが空ならOKではない
58
-
59
- self.ok = fonts_data != None
60
-
61
- self.fonts_data = fonts_data
62
-
63
- self.message = message
64
-
65
-
66
-
67
- # Me
68
-
69
- global fonts_data_top
70
-
71
- class FontCountResponce:#格納されたフォントを順位付けしてhtmlに返す
72
-
73
- aaa = NONE
74
-
75
- bbb = NONE
76
-
77
- ccc = NONE #インデントの定義
78
-
79
- def fonts_counter_responce(self, fonts_data_top):
80
-
81
- fonts_counter = Counter(fonts_data_top) #フォントを数える.
82
-
83
-
84
-
85
- return render_template('index.html', aaa, bbb, ccc)
86
-
87
-
88
-
89
- aaa = fonts_counter()[0][0]
90
-
91
- bbb = fonts_counter()[0][1]
92
-
93
- ccc = fonts_counter()[0][2]
94
-
95
-
96
-
97
- # MeEnd
98
-
99
-
100
-
101
- SAVE_DIR = "./static/images"
102
-
103
-
104
-
105
-
106
-
107
- @app.route('/')
108
-
109
- def index():
110
-
111
- return render_template('index.html', images=os.listdir(SAVE_DIR)[::-1])
112
-
113
-
114
-
115
- # 参考: https://qiita.com/yuuuu3/items/6e4206fdc8c83747544b
116
-
117
-
118
-
119
-
120
-
121
- @app.route('/upload', methods=['POST'])
122
-
123
- def upload():
124
-
125
- try:
126
-
127
- if request.files == None:
128
-
129
- return render_template('result.html', font_data_response=FontsDataResponse(None, "ファイルがアップロードされていません"))
130
-
131
- if request.files['image']:
132
-
133
- # 画像として読み込み
134
-
135
- stream = request.files['image'].stream
136
-
137
- img_array = np.asarray(bytearray(stream.read()), dtype=np.uint8)
138
-
139
- img = cv2.imdecode(img_array, 1)
140
-
141
-
142
-
143
- display_num = 5
144
-
145
- display_num_str = request.form["display_num"]
146
-
147
- if len(display_num_str) > 0 and int(display_num_str) > 0:
148
-
149
- display_num = int(display_num_str)
150
-
151
-
152
-
153
- fonts_data = model.predict_font(img, display_num)
154
-
155
-
156
-
157
- if fonts_data == None:
158
-
159
- return render_template('result.html', fonts_data_response=FontsDataResponse(None, 'エラーが起きてしまって、フォントを特定できませんでした、、申し訳ない。'))
160
-
161
-
162
-
163
- #Me
164
-
165
- if fonts_data:#フォントを格納する処理
166
-
167
- fonts_data[0].name=+1 #出力結果の中で一番高い確率を選択
168
-
169
- fonts_data_top = fonts_data[0].name #グローバル変数に格納
170
-
171
- # MeEnd
172
-
173
-
174
-
175
- cv2.imwrite(os.path.join(
176
-
177
- SAVE_DIR, fonts_data[0].name + '_' + str(uuid.uuid4()) + '.png'), img)
178
-
179
- return render_template('result.html', fonts_data_response=FontsDataResponse(fonts_data))
180
-
181
- except Exception as e:
182
-
183
- print(e, file=sys.stderr)
184
-
185
- print(traceback.format_exc())
186
-
187
- return render_template('result.html', fonts_data_response=FontsDataResponse(None, '内部的なエラーが発生しました'))
188
-
189
-
190
-
191
- @app.context_processor
192
-
193
- def override_url_for():
194
-
195
- return dict(url_for=dated_url_for)
196
-
197
-
198
-
199
-
200
-
201
- def dated_url_for(endpoint, **values):
202
-
203
- if endpoint == 'static':
204
-
205
- filename = values.get('filename', None)
206
-
207
- if filename:
208
-
209
- file_path = os.path.join(app.root_path,
3
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
210
-
211
- endpoint, filename)
212
-
213
- values['q'] = int(os.stat(file_path).st_mtime)
214
-
215
- return url_for(endpoint, **values)
216
-
217
-
218
-
219
- if __name__ == '__main__':
220
-
221
- app.debug = True
222
-
223
- app.run(host='0.0.0.0', port=os.environ.get("PORT", 8888))
224
-
225
- ```
226
-
227
- # Error
228
-
229
- - NameError: name 'fonts_counter' is not defined
230
-
231
- - 学生の初心者でわからなことが多く細かいところまで説明していただければ助かります.
232
-
233
- - 自分の描いているコードは`#Me`から`#MeEnd`でその他は問題なく動作するのでその区間での説明であるとありがたいです.

2

見出しを見やすくした

2021/09/11 07:38

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- codeの下の方で出力されたをdataをglobal関数を使い上のclassで処理したい
1
+ codeの下で出力されたを文字をglobal関数を使い上のclassで処理したい
test CHANGED
File without changes

1

titleをわかりやすくしました

2021/09/11 05:59

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- codeの下の方で出力されたdataを上ので処理したい
1
+ codeの下の方で出力されたdataをglobal関数を使い上のclassで処理したい
test CHANGED
File without changes