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

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

詳細はこちら
Django

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

Python

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

Q&A

1回答

1196閲覧

python,dgango推定結果をwebページに埋め込む! ValueErrorの箇所がわかりません!

iphone

総合スコア9

Django

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

Python

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

0グッド

0クリップ

投稿2021/02/05 12:01

編集2021/02/06 00:46

#car,bikeの判別

ValueErrorが解読できません!!!

ご教授お願いします。

Djangoでwebアプリ化する段階です。

バージョン
python3.7.9
Django3.15

pythonでcar,bikeの判別をしています。

ターミナルで python manage.py runserver と実行後
http://127.0.0.1:8000/と指示されます。

carbike/を選択 
イメージ説明
写真を選択
イメージ説明
写真を選択後エラーが生じます
3枚目のValueErrorが解読できません。
イメージ説明

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))

###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) # モデルのロード #model = laoad_model('./vgg16_transfer.h5') result = model.predict([X])[0] predicted = result.argmax() percentage = int(result[predicted] * 100) #print(self.classes[predicted], percentage) return self.classes[predicted],percentage # Create your models here.

リスト

absl-py 0.11.0 appnope 0.1.2 argon2-cffi 20.1.0 asgiref 3.3.1 astor 0.8.1 astroid 2.4.2 astunparse 1.6.3 async-generator 1.10 attrs 20.3.0 backcall 0.2.0 beautifulsoup4 4.9.3 bleach 3.2.1 cachetools 4.2.0 certifi 2020.12.5 cffi 1.14.4 chardet 4.0.0 decorator 4.4.2 defusedxml 0.6.0 Django 3.1.5 django-bootstrap4 2.3.1 entrypoints 0.3 flatbuffers 1.12 flickrapi 2.4.0 gast 0.3.3 google-auth 1.24.0 google-auth-oauthlib 0.4.2 google-pasta 0.2.0 grpcio 1.32.0 h5py 2.10.0 idna 2.10 importlib-metadata 2.0.0 ipykernel 5.3.4 ipython 7.19.0 ipython-genutils 0.2.0 isort 5.6.4 jedi 0.18.0 Jinja2 2.11.2 joblib 1.0.0 jsonschema 3.2.0 jupyter-client 6.1.7 jupyter-core 4.7.0 jupyterlab-pygments 0.1.2 Keras-Applications 1.0.8 Keras-Preprocessing 1.1.2 lazy-object-proxy 1.4.3 Markdown 3.3.3 MarkupSafe 1.1.1 mccabe 0.6.1 mistune 0.8.4 mkl-fft 1.2.0 mkl-random 1.1.1 mkl-service 2.3.0 mock 4.0.3 nbclient 0.5.1 nbconvert 6.0.7 nbformat 5.0.8 nest-asyncio 1.4.3 notebook 6.1.6 numpy 1.19.2 oauthlib 3.1.0 opt-einsum 3.3.0 packaging 20.8 pandocfilters 1.4.3 parso 0.7.0 pexpect 4.8.0 pickleshare 0.7.5 Pillow 8.1.0 pip 20.3.3 prometheus-client 0.9.0 prompt-toolkit 3.0.8 protobuf 3.13.0 ptyprocess 0.6.0 pyasn1 0.4.8 pyasn1-modules 0.2.8 pycparser 2.20 Pygments 2.7.3 pylint 2.6.0 pyparsing 2.4.7 pyrsistent 0.17.3 python-dateutil 2.8.1 pytz 2020.5 PyYAML 5.3.1 pyzmq 20.0.0 requests 2.25.1 requests-oauthlib 1.3.0 requests-toolbelt 0.9.1 rsa 4.7 scikit-learn 0.24.0 scipy 1.5.2 Send2Trash 1.5.0 setuptools 51.1.2 six 1.15.0 soupsieve 2.1 sqlparse 0.4.1 tensorboard 1.14.0 tensorboard-plugin-wit 1.7.0 tensorflow 1.14.0 tensorflow-estimator 1.14.0 termcolor 1.1.0 terminado 0.9.1 testpath 0.4.4 threadpoolctl 2.1.0 toml 0.10.1 tornado 6.1 traitlets 5.0.5 typed-ast 1.4.1 typing-extensions 3.7.4.3 urllib3 1.26.2 wcwidth 0.2.5 webencodings 0.5.1 Werkzeug 1.0.1 wheel 0.36.2 wrapt 1.12.1 zipp 3.4.0

どのファイルを共有すればいいのかわかりませんので、

他のファイルを閲覧確認される場合、質問お願いします。

index.htmlコード

index.html

1{% extends 'carbike/base.html' %} 2{% block title %}車・バイク推定アプリメニュー{% endblock %} 3 4{% block content %} 5<div> 6 <h4 class="mt-4 mb-5 border-bottom"車・バイクの推定アプリ> 7 <p>画像ファイルを選択して推定ボタンをクリックしてください。</p> 8 <form action = "{% url 'carbike:predict' %}" method="post" class = "form" enctype = "mutipart/form-data"> 9 {% csrf_token %} 10 <div class="form-group"> 11 <div class= "custom-file"> 12 {{ form.image }} 13 <label class="custom-file-label" for="customFile"> 14 推定したいファイルを選択してください 15 </label> 16 </div> 17 </div> 18 <button type="submit" class="btn btn-primary">推定する!</button> 19 </from> 20</div> 21{% endblock %}``` 22 23

forms.pyコード

python:forms.py

1from django import forms 2 3class PhotoForm(forms.Form): 4 image = forms.ImageField(widget=forms.FileInput(attrs={'class':'custom-file-input'}))

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

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

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

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

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

errormaker74

2021/02/05 13:08

バリデーションがうまくいかなかったときの処理として`raise ValueError('Formが不正です')`が記述されていますが、ここでエラーが起きています。 意図してエラーを起こす処理を書いているなら、問題なくエラーが表示されているように見えます。
iphone

2021/02/05 15:13

解答ありがとうございます。 is_valid(): で有効かどうかの判定。 有効なデータ出なければ、raise ValueError('Formが不正です')でエラーを出すことにしています。 フォームに正しくデータが入っている場合、データを保存するために 写真データのphotoの変数名で宣言して、画像ファイルを扱うためのオブジェクトに格納。 エラーが表示される場合(image=form.cleaned_data['image'] )imgキーを取り出せていないんでしょうか?
errormaker74

2021/02/05 16:11

> エラーが表示される場合(image=form.cleaned_data['image'] )imgキーを取り出せていないんでしょうか? 回答としてはエラーが表示される場合、`photo = Photo(image=form.cleaned_data['image'])`の処理まで進んでいません。 `form.is_valid()`にてformからの入力値の検証(バリデーション)を満たせていません。 質問に記載されている情報だけでは推測が難しいと思います。 もし差し支えなければ'carbike/index.html'の内容や`forms.py`の内容を記載すると回答がつきやすくなるかもしれませんね。 現状、調査すべき点は以下の2点かと思います。 ・index.htmlのformタグでどのようにpostしているか? ・forms.pyにてPhotoFormの項目(フィールド)をどのように定義しているか?
iphone

2021/02/06 01:03

forms.py ,index.html フォルダ追加しました。 お忙しいと思いますが、お返事の程よろしくお願いします。
technocore

2021/02/06 02:00

ソースコードを拝見すると、どこかのe-Learningの教材でしょう。 そこのQAコーナーで相談してください。
iphone

2021/02/06 02:09

返信がこないのでこちらで質問させていただいております。
technocore

2021/02/06 02:15

いつ質問したのですか?
iphone

2021/02/06 02:18

一週間前ぐらいです。
technocore

2021/02/06 02:25

なるほど、これですね。 【画像判定AIアプリ開発・パート2】Django・TensorFlow・転移学習による高精度AI アプリ開発 私も半年ほど前に受講して修了しました。 いろいろ聞いて失礼しました。頑張ってください。
iphone

2021/02/06 02:28

そうです! その講座になります。
guest

回答1

0

index.htmlenctypeの指定が誤っています。

enctype = "mutipart/form-data"

enctype="multipart/form-data"

に修正すればよいかもしれません。

投稿2021/02/06 02:14

errormaker74

総合スコア230

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

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

iphone

2021/02/06 02:30

OSErrorが生じました、、、。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問