🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1988閲覧

predict.pyファイルで画像を推定させるところでエラーが出てしまいます。

iphone

総合スコア9

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/02/07 14:23

編集2021/02/09 03:31

イメージ説明!

どうしてもわかりません。
ご教授願いします。

イメージ説明

##models.py

from django.db import models import numpy as np import tensorflow as tf from tensorflow import keras from tensorflow.keras.models import load_model from PIL import Image import io, base64 graph = tf.get_default_graph() class Photo(models.Model): image = models.ImageField(upload_to='Photos') IMAGE_SIZE = 224 # 画像サイズ MODEL_FILE_PATH = './carbike/ml.models/vgg16_transfer.h5' # モデルファイル classes = ["car", "motorbike"] num_classes = len(classes) # 引数から画像ファイルを参照して読み込む def predict(self): model = None global graph with graph.as_default(): model = load_model(self.MODEL_FILE_PATH) img_data = self.image.read() img_bin = io.BytesIO(img_data) image = Image.open(img_bin) image = image.convert("RGB") image = image.resize((self.IMAGE_SIZE, self.IMAGE_SIZE)) data = np.asarray(image) / 255.0 X = [] X.append(data) X = np.array(X) def image_src(self): with self.image.open() as img: base64_img = base64.b64decode(img.read()).decoad() return 'data' + img.file.content_type + ';base64,' + base64_img # Create your mod

##views.py

from django.shortcuts import render, redirect from django.http import HttpResponse from django.template import loader from .forms import PhotoForm from .models import Photo def index(request): template = loader.get_template('carbike/index.html') context = {'form': PhotoForm()} return HttpResponse(template.render(context, request)) def predict(request): if not request.method == 'POST': return redirect('carbike:index') form = PhotoForm(request.POST, request.FILES) if not form.is_valid(): raise ValueError('Formが不正です') photo = Photo(image=form.cleaned_data['image']) predicted, percentage = photo.predict() template = loader.get_template('carbike/result.html') context = { 'photo_name': photo.image.name, 'photo_data': photo.image_src(), 'predicted': predicted, 'percentage': percentage, } return HttpResponse(template.render(context, request))

##predict.py

import numpy as np from tensorflow import keras from tensorflow.keras import Sequential, Model, load_model from PIL import Image import sys # パラメーターの初期化 classes = ["car", "motorbike"] num_classes = len(classes) image_size = 224 # 引数から画像ファイルを参照して読み込む image = Image.open(sys.argv[1]) image = image.convert("RGB") image = image.resize((image_size, image_size)) data = np.asarray(image) / 255.0 X = [] X.append(data) X = np.array(X) # モデルのロード model = load_model('./vgg16_transfer.h5') result = model.predict([X])[0] predicted = result.argmax() percentage = int(result[predicted] * 100) print(self.classes[predicted], percentage)

イメージ説明

イメージ説明

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/02/07 14:32

テキストで提示しましょう
iphone

2021/02/07 14:45

申し訳ありません。 コードを追加しました。 ご教授お願いします。
errormaker74

2021/02/07 15:33

エラー画面の情報は読んでいますか? `./carbike/ml_models/vgg16_transfer.h5`というファイルがないと書かれています。 ファイルが配置できているか確認するか、 もしくは`models.py`の ``` MODEL_FILE_PATH = './carbike/ml_models/vgg16_transfer.h5' ``` あたりの指定方法を見直す・デバッグすると何かわかるかもしれません。
iphone

2021/02/07 16:10

昨日に引き続き返信ありがとうございます。 エラー文はしっかり目を通しています。 エラー検索、ファイル確認しましたが、どうにもいかなかったのでこちらで質問させていただきました。
quickquip

2021/02/07 23:38 編集

質問にファイル配置を書くか、それがわかるスクリーンショットを載せるかしましょう。(それを載せなかったら"何も調べてないのでは?"と思われてもしかたないでしょう) 一応、どう実行しているかも書いていいと思います。十中八九 python manage.py runserver だと思いますが。
jbpb0

2021/02/08 02:23 編集

models.pyの MODEL_FILE_PATH =... の下に import os print(os.path.abspath(MODEL_FILE_PATH)) を追加したら、pythonが読もうとしてるファイルパス(ファイル名を含む)が表示されるので、それがファイルが本当に置いてあるパスやファイル名と合ってるか、確認してみてください 【追記】 追加する行のインデントは、MODEL_FILE_PATH =... の行に合わせてください
jbpb0

2021/02/08 02:29

質問してるエラーとは関係無いかもしれませんが、コードのあちこちに model = laoad_model('./vgg16_transfer.h5') と書いてありますけど、「vgg16_transfer.h5」が本当に置いてある場所は、どこなんでしょうね './carbike/ml_models/vgg16_transfer.h5' か? './vgg16_transfer.h5' か? どちらでもないのか? あと、「laoad_model」は「load_model」に直してくださいね ただし、その行が本当に必要なら、ですが
iphone

2021/02/08 11:47

quickquipさん ご指摘ありがとうございます。詳しく説明するべきでした。以後気をつけます。 ターミナルにて、python manage.py runserver で実行です。
iphone

2021/02/08 12:08

jbpb0さん 返信ありがとうございます。 スクショを追加しました。ご覧になっていただけますか? 同じエラーが生じます。 ファイルの問題だと思うのですが原因が解明できません。 import os print(os.path.abspath(MODEL_FILE_PATH)) を追加し、「load_model」に変更しました。 「vgg16_transfer.h5」が置いてある箇所は'./carbike/ml_models/vgg16_transfer.h5'になります。
jbpb0

2021/02/08 12:39

> print(os.path.abspath(MODEL_FILE_PATH)) を追加したらエラーが無くなるわけではありません これを実行したら、 > './carbike/ml_models/vgg16_transfer.h5' から、Pythonがファイルを読もうとしているパス(絶対パス)が表示されます それと、ファイルが本当にある場所が合ってるか、確認してください
jbpb0

2021/02/08 12:47

スクショを追加するなら、下記の二つを追加してください ・「print(os.path.abspath(MODEL_FILE_PATH))」を実行した結果が表示されてるスクショ   Pythonコードではなく、実行結果 ・「vgg16_transfer.h5」が本当に置いてある場所が分かるスクショ   Pythonの開発環境ではなく、OSの機能でファイルが置いてあるフォルダを開いた状態    Windowsならエクスプローラー    Macならファインダー   そのフォルダの絶対パスが表示されるように設定する
iphone

2021/02/08 12:48

返信ありがとうございます。 スクショ通りエラーが生じました。 ファイルが見つからない と指示されます。 Unable to open file (unable to open file: name = './carbike/ml_models/vgg16_transfer.h5', errno = 2, error message = 'No such file or directory', flags = 0, o_flags = 0) ですが、ファイルは /carbike/ml_models/vgg16_transfer.h5 の順番で作りました、、。
iphone

2021/02/08 12:49

承知しました。 スクショします!
iphone

2021/02/08 13:08

print(os.path.abspath(MODEL_FILE_PATH))」を実行した結果が表示されてるスクショ  ↑ 上記のスクショは現在追加している、OSError at /carbike/predict/ のスクショで問題ありませんでしょうか?
jbpb0

2021/02/08 13:17

> OSError at /carbike/predict/ のスクショで問題ありませんでしょうか? それでは分かりません > ターミナルにて、python manage.py runserver で実行です。 のターミナルに、print(... の結果が表示されてると思うのですが、ありませんか? 「/carbike/ml_models/vgg16_transfer.h5」より左に何か付いてるのが
iphone

2021/02/08 13:25

返信ありがとうございます。 勉強不足で申し訳ございません。 スクショ追加しました。print... はないような気がします、。 一応、それっぽい箇所に赤いペンをつけました。
jbpb0

2021/02/08 13:28

追加してくれたファインダーのスクショ見たら、「ml_models」じゃなくて「ml.models」になってるけど??
jbpb0

2021/02/08 13:33

上の赤ペンは合ってます 下の赤ペンは、それの下です(上の赤ペンと同じことが書いてある) 赤ペンの表示と、ファインダーに表示されてるパスを比べたら、下記以外は合ってるようです > 「ml_models」じゃなくて「ml.models」になってる
iphone

2021/02/08 13:37

大変申し訳ございません。 赤ペンの修正点までありがとうございます! コードが ml_models になっていまして、 ファイルが ml.models になっていました。
iphone

2021/02/08 13:42

この場合コードを ml.models に変更するほうが良いのでしょうか?
jbpb0

2021/02/08 13:47

ファイル名に「.」が複数入ってると、たしかPythonはややこしいことになったような気がするけど、たぶんディレクトリ名に「.」が入るのは大丈夫だったような気がするので、どちらでも大丈夫だと思うけど、あんまり自信ない
jbpb0

2021/02/08 13:54

あと、質問のコードが直ってないので、再度書きます 手元のコードが全部修正済みなら、スルーしてください models.pyのclass Photo()のdef predict()で、モデルを2回読み込んでる model = load_model(self.MODEL_FILE_PATH) model = laoad_model('./vgg16_transfer.h5') 二つ目要る? 二つ目「laoad_」→「load_」 二つ目のパス?? (今直してるパスと違う) predict.py model = laoad_model('./vgg16_transfer.h5') 「laoad_」→「load_」 パス?? (今直してるパスと違う)
iphone

2021/02/08 13:57

とんでもないです! お忙しい中、すぐにご返信していただきまして、ありがとうございます! ml.modelsに変更後、python manage.py runserverを実行しましたが、エラーが生じました。 もし、ご都合がよろしければ、エラー解読に付き合っていただきたいです。
iphone

2021/02/08 14:13

model = None モデルの初期化 global graph モデルを何回も使えるようにglobal graph のグラフと定義しといて、毎回データを投入して推定ができるようにする。 model = load_model(self.MODEL_FILE_PATH)の load_modelを使って 「MODEL_FILE_PATH = './carbike/ml.models/vgg16_transfer.h5' 」 モデルファイルパスで設定したパスからモデルを読み込んでモデルの変数に格納する。 みたいな流れです。
iphone

2021/02/08 14:14

訂正点ありがとうございます! 訂正致しました!
jbpb0

2021/02/08 14:31

> model = load_model(self.MODEL_FILE_PATH)の load_modelを使って 「MODEL_FILE_PATH = './carbike/ml.models/vgg16_transfer.h5' 」 モデルファイルパスで設定したパスからモデルを読み込んでモデルの変数に格納する。 みたいな流れです。 その行の10行くらい下の # モデルのロード model = laoad_model('./vgg16_transfer.h5') で、もう一回load_model()してるのは、なぜでしょうか? せっかくload_model(self.MODEL_FILE_PATH)したのに、それが消えてしまうのではありませんか? 質問のコードを直してないだけで、お手元のコードはそこは既に削除してあるのでしょうか?
jbpb0

2021/02/08 14:39

> 「MODEL_FILE_PATH = './carbike/ml.models/vgg16_transfer.h5' 」 モデルファイルパスで設定したパス load_model()で指定するのは、最後はディレクトリ名じゃなくてファイル名ですから、vgg16_transfer.h5 はファイル名じゃないといけないけど、スクショ見たらディレクトリ名(フォルダ名)になってますね それだと、load_model()で読めません (technocoreさんの回答と同じ内容)
iphone

2021/02/08 14:43

手元のコードは削除済です。ご指摘ありがとうございます!
jbpb0

2021/02/09 02:11

追加のスクショで、「vgg16_transfer.h5」がファイルのはずがディレクトリになってることは直ってます その状態で実行しても、元々のこの質問のエラー `./carbike/ml_models/vgg16_transfer.h5`が無い は、まだ出るのですか?
iphone

2021/02/09 02:17

python manage.py runserver の実行後、エラー内容変わりました。 `./carbike/ml_models/vgg16_transfer.h5`が無い。ではなく、 Unable to open file (file signature not found) とエラーが表示されます。
jbpb0

2021/02/09 03:25

元々のこの質問のエラー `./carbike/ml_models/vgg16_transfer.h5`が無い が解決したのなら、新たなエラーは別の質問にしてください その際は、質問のコードは最新のものを書いてください 手元のコードは修正したのに質問のコードはそのままだと、他人には状況が把握できません あと、predict.pyの laoad_model('./vgg16_transfer.h5') は、そのままでいいのですか? 手元のコードは直してるのなら、新たにする別質問では、そこも直してください
guest

回答1

0

2枚目の図。
vgg16_transfer.h5がフォルダーになってますよ。

投稿2021/02/08 14:23

technocore

総合スコア7337

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

iphone

2021/02/08 14:26

返信ありがとうございます。 この場合、ディレクトリに変更したほうが、正解でしょうか?
jbpb0

2021/02/08 15:13 編集

質問者さんへ コードは、「ml_models」というディレクトリに「vgg16_transfer.h5」というファイルがあることになってる しかしながら実際は、「ml_models」というディレクトリに「vgg16_transfer.h5」というディレクトリがある (私は、ディレクトリとフォルダーを同じ意味で使ってます)
technocore

2021/02/08 15:27

vgg16_transfer.h5 って学習済みのVGG16を転移学習して再構築したHDF5形式のモデルファイルでしょう。 フォルダやディレクトリなわけがないです。 ソースコードを全然理解していないのではないですか?
iphone

2021/02/08 15:32

返信ありがとうございます。 勉強不足で申し訳ございません。 初心者なりに理解しようと勉強している日々でございます。
iphone

2021/02/08 15:44

スクショ追加しました。 >>>「ml_models」というディレクトリに「vgg16_transfer.h5」というファイル 上記の問題はスクショの変更内容で問題ないでしょうか?
technocore

2021/02/08 22:25

>問題ないでしょうか? 問題があるかないかは私には判断できません。 あなたが学習して作ったモデルファイルを指定してください。
jbpb0

2021/02/09 03:20

追加のスクショで、「vgg16_transfer.h5」がファイルのはずがディレクトリになってることは直ってます ただし、スクショのディレクトリ名は「ml.models」ですが、コードは「ml_models」になってるので、それを合わせる必要があります そうすれば、元々のこの質問のエラー `./carbike/ml_models/vgg16_transfer.h5`が無い というエラーは出なくなると思います
iphone

2021/02/09 03:36

返信ありがとうございます。 コードを編集し、 `./carbike/ml_models/vgg16_transfer.h5`が無いというエラーはなくなりました。 しかし、新たなエラーが生じました。 OSError: Unable to open file (file signature not found)
iphone

2021/02/09 03:42

新しい質問ページに再度投稿したほうがよろしいでしょうか?
jbpb0

2021/02/09 03:49 編集

はい この質問のエラーは解決したので、別の質問にしてください ただし、一つ直したら別のエラーが出てくるたびにここで質問してたらきりがないので、まずは自分で調べて、直そうと考えてください そして、どう考えて、どう直そうとして、どううまくいかなかったのか、を質問に書いてください
iphone

2021/02/09 03:54

承知しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問