質問編集履歴

10

ml_models を ml.models に変更

2021/02/09 03:31

投稿

iphone
iphone

スコア9

test CHANGED
File without changes
test CHANGED
@@ -48,7 +48,7 @@
48
48
 
49
49
  IMAGE_SIZE = 224 # 画像サイズ
50
50
 
51
- MODEL_FILE_PATH = './carbike/ml_models/vgg16_transfer.h5' # モデルファイル
51
+ MODEL_FILE_PATH = './carbike/ml.models/vgg16_transfer.h5' # モデルファイル
52
52
 
53
53
  classes = ["car", "motorbike"]
54
54
 

9

スペルミスの laoad_model を load_model に変更

2021/02/09 03:31

投稿

iphone
iphone

スコア9

test CHANGED
File without changes
test CHANGED
@@ -244,7 +244,7 @@
244
244
 
245
245
  # モデルのロード
246
246
 
247
- model = laoad_model('./vgg16_transfer.h5')
247
+ model = load_model('./vgg16_transfer.h5')
248
248
 
249
249
  result = model.predict([X])[0]
250
250
 

8

ファインダー、「ml_models」というディレクトリに「vgg16_transfer.h5」というファイルに変更

2021/02/09 03:29

投稿

iphone
iphone

スコア9

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,8 @@
1
- ![イメージ説明](88b93508e965b82aafbc4940cf44b976.png)![イメージ説明](4c2670c41283a1518b608e86e46be554.png)どうしてもわかりません。
1
+ ![イメージ説明](88b93508e965b82aafbc4940cf44b976.png)!
2
+
3
+
4
+
5
+ どうしてもわかりません。
2
6
 
3
7
  ご教授願いします。
4
8
 
@@ -261,3 +265,7 @@
261
265
 
262
266
 
263
267
  ![イメージ説明](1122919d462dd5fcd92ca91816d4bee9.png)
268
+
269
+
270
+
271
+ ![イメージ説明](c47d78e0952cbffff88aebe6ee36aeb7.png)

7

「ml_models」というディレクトリに「vgg16_transfer.h5」というファイル に変更

2021/02/08 15:41

投稿

iphone
iphone

スコア9

test CHANGED
File without changes
test CHANGED
@@ -256,7 +256,7 @@
256
256
 
257
257
  ```
258
258
 
259
- ![イメージ説明](b701e61fdf1d1b9b6aaca2e76b723d21.png)
259
+ ![イメージ説明](a7fac4459fae3ab35e07cf24bb38f513.png)
260
260
 
261
261
 
262
262
 

6

モデルロードの箇所を削除しました

2021/02/08 15:27

投稿

iphone
iphone

スコア9

test CHANGED
File without changes
test CHANGED
@@ -88,23 +88,7 @@
88
88
 
89
89
 
90
90
 
91
- # モデルのロード
91
+
92
-
93
- model = laoad_model('./vgg16_transfer.h5')
94
-
95
-
96
-
97
- result = model.predict([X])[0]
98
-
99
- predicted = result.argmax()
100
-
101
- percentage = int(result[predicted] * 100)
102
-
103
-
104
-
105
- #print(self.classes[predicted], percentage)
106
-
107
- return self.classes[predicted],percentage
108
92
 
109
93
 
110
94
 

5

ターミナルにて、python manage.py runserver の実行結果です。

2021/02/08 14:45

投稿

iphone
iphone

スコア9

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- ![イメージ説明](4c2670c41283a1518b608e86e46be554.png)どうしてもわかりません。
1
+ ![イメージ説明](88b93508e965b82aafbc4940cf44b976.png)![イメージ説明](4c2670c41283a1518b608e86e46be554.png)どうしてもわかりません。
2
2
 
3
3
  ご教授願いします。
4
4
 

4

ファインダーのスクショ追加しました。

2021/02/08 13:26

投稿

iphone
iphone

スコア9

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- どうしてもわかりません。
1
+ ![イメージ説明](4c2670c41283a1518b608e86e46be554.png)どうしてもわかりません。
2
2
 
3
3
  ご教授願いします。
4
4
 

3

スクリーンショット追加しました。

2021/02/08 13:06

投稿

iphone
iphone

スコア9

test CHANGED
File without changes
test CHANGED
@@ -276,4 +276,4 @@
276
276
 
277
277
 
278
278
 
279
- ![イメージ説明](2d74fb03497ee2c7ecdff05b1e7f5370.png)
279
+ ![イメージ説明](1122919d462dd5fcd92ca91816d4bee9.png)

2

スクリーンショット追加しました。ファイルの配置わかりますでしょうか?スクショ内にcarbike ml.models vgg16_transfer.h5 の順番です。

2021/02/08 11:57

投稿

iphone
iphone

スコア9

test CHANGED
File without changes
test CHANGED
@@ -271,3 +271,9 @@
271
271
 
272
272
 
273
273
  ```
274
+
275
+ ![イメージ説明](b701e61fdf1d1b9b6aaca2e76b723d21.png)
276
+
277
+
278
+
279
+ ![イメージ説明](2d74fb03497ee2c7ecdff05b1e7f5370.png)

1

models.py,views.py,predict.pyを追加しました。

2021/02/08 11:56

投稿

iphone
iphone

スコア9

test CHANGED
File without changes
test CHANGED
@@ -7,3 +7,267 @@
7
7
 
8
8
 
9
9
  ![イメージ説明](103c424f29680acff9bc92c19193c9bf.png)
10
+
11
+
12
+
13
+ ##models.py
14
+
15
+ ```
16
+
17
+
18
+
19
+ from django.db import models
20
+
21
+ import numpy as np
22
+
23
+ import tensorflow as tf
24
+
25
+ from tensorflow import keras
26
+
27
+ from tensorflow.keras.models import load_model
28
+
29
+ from PIL import Image
30
+
31
+ import io, base64
32
+
33
+
34
+
35
+ graph = tf.get_default_graph()
36
+
37
+
38
+
39
+ class Photo(models.Model):
40
+
41
+ image = models.ImageField(upload_to='Photos')
42
+
43
+
44
+
45
+ IMAGE_SIZE = 224 # 画像サイズ
46
+
47
+ MODEL_FILE_PATH = './carbike/ml_models/vgg16_transfer.h5' # モデルファイル
48
+
49
+ classes = ["car", "motorbike"]
50
+
51
+ num_classes = len(classes)
52
+
53
+
54
+
55
+ # 引数から画像ファイルを参照して読み込む
56
+
57
+ def predict(self):
58
+
59
+ model = None
60
+
61
+ global graph
62
+
63
+ with graph.as_default():
64
+
65
+ model = load_model(self.MODEL_FILE_PATH)
66
+
67
+
68
+
69
+ img_data = self.image.read()
70
+
71
+ img_bin = io.BytesIO(img_data)
72
+
73
+
74
+
75
+ image = Image.open(img_bin)
76
+
77
+ image = image.convert("RGB")
78
+
79
+ image = image.resize((self.IMAGE_SIZE, self.IMAGE_SIZE))
80
+
81
+ data = np.asarray(image) / 255.0
82
+
83
+ X = []
84
+
85
+ X.append(data)
86
+
87
+ X = np.array(X)
88
+
89
+
90
+
91
+ # モデルのロード
92
+
93
+ model = laoad_model('./vgg16_transfer.h5')
94
+
95
+
96
+
97
+ result = model.predict([X])[0]
98
+
99
+ predicted = result.argmax()
100
+
101
+ percentage = int(result[predicted] * 100)
102
+
103
+
104
+
105
+ #print(self.classes[predicted], percentage)
106
+
107
+ return self.classes[predicted],percentage
108
+
109
+
110
+
111
+ def image_src(self):
112
+
113
+ with self.image.open() as img:
114
+
115
+ base64_img = base64.b64decode(img.read()).decoad()
116
+
117
+
118
+
119
+ return 'data' + img.file.content_type + ';base64,' + base64_img
120
+
121
+
122
+
123
+ # Create your mod
124
+
125
+ ```
126
+
127
+
128
+
129
+ ##views.py
130
+
131
+
132
+
133
+ ```
134
+
135
+ from django.shortcuts import render, redirect
136
+
137
+ from django.http import HttpResponse
138
+
139
+ from django.template import loader
140
+
141
+ from .forms import PhotoForm
142
+
143
+ from .models import Photo
144
+
145
+
146
+
147
+ def index(request):
148
+
149
+ template = loader.get_template('carbike/index.html')
150
+
151
+ context = {'form': PhotoForm()}
152
+
153
+ return HttpResponse(template.render(context, request))
154
+
155
+
156
+
157
+ def predict(request):
158
+
159
+ if not request.method == 'POST':
160
+
161
+ return
162
+
163
+ redirect('carbike:index')
164
+
165
+
166
+
167
+
168
+
169
+ form = PhotoForm(request.POST, request.FILES)
170
+
171
+ if not form.is_valid():
172
+
173
+ raise ValueError('Formが不正です')
174
+
175
+
176
+
177
+ photo = Photo(image=form.cleaned_data['image'])
178
+
179
+ predicted, percentage = photo.predict()
180
+
181
+
182
+
183
+
184
+
185
+ template = loader.get_template('carbike/result.html')
186
+
187
+
188
+
189
+
190
+
191
+ context = {
192
+
193
+ 'photo_name': photo.image.name,
194
+
195
+ 'photo_data': photo.image_src(),
196
+
197
+ 'predicted': predicted,
198
+
199
+ 'percentage': percentage,
200
+
201
+ }
202
+
203
+
204
+
205
+ return HttpResponse(template.render(context, request))
206
+
207
+
208
+
209
+ ```
210
+
211
+
212
+
213
+ ##predict.py
214
+
215
+ ```
216
+
217
+ import numpy as np
218
+
219
+ from tensorflow import keras
220
+
221
+ from tensorflow.keras import Sequential, Model, load_model
222
+
223
+ from PIL import Image
224
+
225
+ import sys
226
+
227
+
228
+
229
+ # パラメーターの初期化
230
+
231
+ classes = ["car", "motorbike"]
232
+
233
+ num_classes = len(classes)
234
+
235
+ image_size = 224
236
+
237
+
238
+
239
+ # 引数から画像ファイルを参照して読み込む
240
+
241
+ image = Image.open(sys.argv[1])
242
+
243
+ image = image.convert("RGB")
244
+
245
+ image = image.resize((image_size, image_size))
246
+
247
+ data = np.asarray(image) / 255.0
248
+
249
+ X = []
250
+
251
+ X.append(data)
252
+
253
+ X = np.array(X)
254
+
255
+
256
+
257
+ # モデルのロード
258
+
259
+ model = laoad_model('./vgg16_transfer.h5')
260
+
261
+ result = model.predict([X])[0]
262
+
263
+ predicted = result.argmax()
264
+
265
+ percentage = int(result[predicted] * 100)
266
+
267
+
268
+
269
+ print(self.classes[predicted], percentage)
270
+
271
+
272
+
273
+ ```