質問編集履歴

2

一応動作するコードができました。

2021/01/13 02:45

投稿

keisuu
keisuu

スコア40

test CHANGED
File without changes
test CHANGED
@@ -201,3 +201,139 @@
201
201
  ```
202
202
 
203
203
  と表示されましたが、同様のエラー表示となり、改善できない状態です・・・
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+ 2021/01/13 11:44追記。
214
+
215
+ 一応動作するコードができました。
216
+
217
+ ```python
218
+
219
+ # Google Colabで実行の際に、下記のコードにて、このプログラムをTensorFlow バージョン1系で動作させるためのコマンドです。
220
+
221
+ %tensorflow_version 1.x
222
+
223
+
224
+
225
+ # TensorFlow バージョン2系で実行したい場合は下記のColab(URL)をご確認ください。
226
+
227
+ # https://colab.research.google.com/notebooks/tensorflow_version.ipynb
228
+
229
+
230
+
231
+ # 必要なモジュールをインポート
232
+
233
+ from keras.applications.vgg16 import VGG16, decode_predictions,preprocess_input
234
+
235
+ from keras.preprocessing import image
236
+
237
+ from PIL import Image
238
+
239
+ import numpy as np
240
+
241
+ import urllib.request as urllib
242
+
243
+
244
+
245
+ # 手元の環境で実行させたい場合は下記2つも読み込んでください。
246
+
247
+ # import tensorflow
248
+
249
+ # import keras
250
+
251
+
252
+
253
+
254
+
255
+ """
256
+
257
+ filename: 判定したい画像ファイル
258
+
259
+ size: 予測した結果を何件まで表示させたいか(初期値10件)
260
+
261
+ """
262
+
263
+ def predict(filename, size=5):
264
+
265
+ print(Image.__version__)
266
+
267
+ response = urllib.urlopen(filename) # 入力画像をWebから取得
268
+
269
+ imgPil = Image.open(response)
270
+
271
+ print(imgPil)
272
+
273
+ # img = image.load_img(imgPil, target_size=(224, 224)) # 画像を読み込み
274
+
275
+ x = image.img_to_array(imgPil) # 画像ファイルを数値に変換
276
+
277
+ x = np.expand_dims(x, axis=0) # 次元を増やす
278
+
279
+ pred = model.predict(preprocess_input(x)) # 一律に平均値を引いている処理
280
+
281
+ results = decode_predictions(pred, top=size)[0] # VGG16の1000クラスはdecode_predictions()で文字列に変換
282
+
283
+ return results
284
+
285
+
286
+
287
+ # VGG16を使用
288
+
289
+ model = VGG16(weights="imagenet")
290
+
291
+
292
+
293
+ # 224x224の画像を指定する
294
+
295
+ filename = "https://stat.ameba.jp/user_images/20141121/18/sie36ne/ab/fe/j/t02200220_0224022413135979312.jpg?caw=800"
296
+
297
+
298
+
299
+ results = predict(filename, 10)
300
+
301
+ for result in results:
302
+
303
+ print(result)
304
+
305
+ ```
306
+
307
+
308
+
309
+ 結果
310
+
311
+
312
+
313
+ ```
314
+
315
+ 7.0.0
316
+
317
+ <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=224x224 at 0x7F48BA6DBD30>
318
+
319
+ ('n02099601', 'golden_retriever', 0.9710069)
320
+
321
+ ('n02099712', 'Labrador_retriever', 0.013546035)
322
+
323
+ ('n02100735', 'English_setter', 0.004488475)
324
+
325
+ ('n02101388', 'Brittany_spaniel', 0.0024154324)
326
+
327
+ ('n02102480', 'Sussex_spaniel', 0.0020835618)
328
+
329
+ ('n02102318', 'cocker_spaniel', 0.0014118954)
330
+
331
+ ('n02101556', 'clumber', 0.00097313104)
332
+
333
+ ('n02099267', 'flat-coated_retriever', 0.00060194463)
334
+
335
+ ('n02104029', 'kuvasz', 0.00045913394)
336
+
337
+ ('n02100877', 'Irish_setter', 0.0004434662)
338
+
339
+ ```

1

ご指摘の修正を行ってみました。

2021/01/13 02:45

投稿

keisuu
keisuu

スコア40

test CHANGED
File without changes
test CHANGED
@@ -151,3 +151,53 @@
151
151
  TypeError: expected str, bytes or os.PathLike object, not HTTPResponse
152
152
 
153
153
  ```
154
+
155
+
156
+
157
+
158
+
159
+ ご指摘を受け
160
+
161
+
162
+
163
+ ```python
164
+
165
+ def predict(filename, size=5):
166
+
167
+ print(Image.__version__)
168
+
169
+ response = urllib.urlopen(filename) # 入力画像をWebから取得
170
+
171
+ imgPil = Image.open(response)
172
+
173
+ print(imgPil)
174
+
175
+ img = image.load_img(imgPil, target_size=(224, 224)) # 画像を読み込み
176
+
177
+ x = image.img_to_array(img) # 画像ファイルを数値に変換
178
+
179
+ x = np.expand_dims(x, axis=0) # 次元を増やす
180
+
181
+ pred = model.predict(preprocess_input(x)) # 一律に平均値を引いている処理
182
+
183
+ results = decode_predictions(pred, top=size)[0] # VGG16の1000クラスは
184
+
185
+ decode_predictions()で文字列に変換
186
+
187
+ return results
188
+
189
+ ```
190
+
191
+ と変更すると
192
+
193
+
194
+
195
+ ```
196
+
197
+ 7.0.0
198
+
199
+ <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=275x183 at 0x7FDF9BE6FCC0>
200
+
201
+ ```
202
+
203
+ と表示されましたが、同様のエラー表示となり、改善できない状態です・・・