質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Google Cloud Storage

Google Cloud Storageは、グーグル社が提供しているクラウドベースのデベロッパー・企業向けストレージサービス。可用性に優れ、APIで操作可能なため、データのアーカイブ保存やアプリケーションのコンテンツ提供など様々な用途に活用できます。

Google App Engine

Google App Engineは、Googleの管理するデータセンター上でウェブアプリケーションの開発が可能なクラウドコンピュータ技術です。Java、Python、Go用にSDKが用意されています。

Python

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

Q&A

0回答

1150閲覧

GAE上で画像をHDF5ファイルを用いて判別し、分類結果をGCSに保存する方法

legend_hero

総合スコア3

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Google Cloud Storage

Google Cloud Storageは、グーグル社が提供しているクラウドベースのデベロッパー・企業向けストレージサービス。可用性に優れ、APIで操作可能なため、データのアーカイブ保存やアプリケーションのコンテンツ提供など様々な用途に活用できます。

Google App Engine

Google App Engineは、Googleの管理するデータセンター上でウェブアプリケーションの開発が可能なクラウドコンピュータ技術です。Java、Python、Go用にSDKが用意されています。

Python

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

0グッド

0クリップ

投稿2022/01/03 16:34

編集2022/01/04 04:23

前提・実現したいこと

Python初学者です。
GAEで作成したWebページで画像を複数枚送り、送られた画像をblobで一時保存してからGCSのバケットに保存しているのですが、HDF5ファイルを用いて判別し、目当ての画像だけ別のファイルに保存するプログラムを追加したいのですがGCP、Pythonを学び始めのため勝手が分かっておらずどのようなコードでうまくいくのか調べてもわからず、意見や参考になるものなどをご教授いただきたいです。

使用したいコード(main.py)は以下のものです。
file_url = blob.public_url
の下からHDF5ファイルを用いた判別を行っており、判別結果から目当ての画像だけ別のGCSバケットファイルに保存するプログラムを追加したいです。

main

1import os, sys 2from flask import Flask, flash, request, redirect, url_for, render_template, send_from_directory 3from werkzeug.utils import secure_filename 4import tensorflow as tf 5from keras.models import load_model 6import numpy as np 7from PIL import Image 8from PIL import ImageFile 9from google.cloud import storage 10import io 11import requests 12 13app = Flask(__name__) 14ImageFile.LOAD_TRUNCATED_IMAGES = True 15 16GCS_BUCKET = '777' 17GCS_BUCKETSUB = 'refile' 18MODEL_NAME = 'obama_smalling_201908.h5' 19 20MODEL_DOWNLOAD_FOLDER = '/tmp' 21UPLOAD_FOLDER = './uploads' 22ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg', 'gif']) 23 24model_path = os.path.join(MODEL_DOWNLOAD_FOLDER, MODEL_NAME) 25storage_client = storage.Client() 26bucket = storage_client.get_bucket(GCS_BUCKET) 27blob = bucket.get_blob(MODEL_NAME) 28blob.download_to_filename(model_path) 29model = load_model(model_path) 30 31graph = tf.get_default_graph() 32 33app = Flask(__name__) 34app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER 35 36def is_allowed_file(filename): 37 return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS 38 39@app.route('/') 40def index(): 41 return redirect(url_for('predict')) 42 43@app.route('/predict', methods=['GET', 'POST']) 44def predict(): 45 if request.method == 'POST': 46 if 'file' not in request.files: 47 flash('No file.') 48 return redirect(url_for('predict')) 49 file = request.files.get('file') 50 if file.filename == '': 51 flash('No file.') 52 return redirect(url_for('predict')) 53 if file and is_allowed_file(file.filename): 54 upload_files = request.files.getlist('file') 55 for file in upload_files: 56 gcs = storage.Client() # 57 bucket = gcs.get_bucket(GCS_BUCKET) 58 blob = bucket.blob(file.filename) 59 blob.upload_from_string( 60 file.read(), 61 content_type=file.content_type 62 ) 63 64 65 file_url = blob.public_url 66 67 img = Image.open(io.BytesIO(requests.get(file_url).content)).convert('RGB') 68 img = img.resize((150, 150)) 69 70 x = np.array(img, dtype=np.float32) 71 x = x / 255. 72 x = x.reshape((1,) + x.shape) 73 74 global graph 75 with graph.as_default(): 76 pred = model.predict(x, batch_size=1, verbose=0) 77 score = pred[0][0] 78 if(score >= 0.5): 79 person = 'Smalling' 80 gcs = storage.Client() 81 bucket = gcs.get_bucket(GCS_refile) 82 blob = bucket.blob(file.filename) 83 blob.upload_from_string( 84 file.read(), 85 content_type=file.content_type 86 ) 87 else: 88 person = 'Obama' 89 score = 1 - score 90 91 resultmsg = '[{}] {:.4%} Sure.'.format(person, score) 92 93 return render_template('result.html', resultmsg=resultmsg, filepath=file_url) 94 return render_template('predict.html') 95 96@app.route('/uploads/<filename>') 97def uploaded_file(filename): 98 return send_from_directory(app.config['UPLOAD_FOLDER'], filename) 99 100if __name__ == '__main__': 101 app.run()

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/01/04 03:10 編集

日本語がよくわかりませんでしたので、質問の文章をいくらかの文章に分割して単語を少し挿げ替えました。 詳細はQ.2の後を参照ください。 Q.1 質問についてはこういうことであってますか? Q.2 このコードで「何にどう困っているか」は明確ですか?その答えを本文に加えてください。 ■今できていること ・ GAE(Google App Engine)上に、画像を受け取ると送られた画像をblob検出で一時保存するアプリを作った ・ blob検出した後の画像データはGCS(Google Cloud Storage)のバケットに保存している ■やりたいこと ・ ここに、「HDF5ファイル(深層学習のネットワークの定義ファイル)を用いて判別し、目当ての画像だけ別のファイルに保存するプログラムを追加したい」 ■やったこと kerasのload_modelを使いモデルをロードして、predictで認識させるところまでは組み込んだ。 ■補足 GCP、Pythonを学び始めのため勝手が分かっておらずどのようなコードでうまくいくのか調べてもわからず、意見や参考になるものなどをご教授いただきたいです。
legend_hero

2022/01/04 04:26

ありがとうございます! fourteenlengthさんがまとめてくださった通りでございます!! 本文に知りたい内容を追記しました!
退会済みユーザー

退会済みユーザー

2022/01/04 21:15 編集

GCSは使ったことがないのでlegend_heroさんの方がピンとくると思いますが、リファレンスの以下のリンクが参考になると思います。ちゃんと動かして確認していませんが、predにはカテゴリを示すintegerと確率を示すfloatが格納されるはずですので、それらが想定通りであれば、imgを以下の処理に従って保存、という流れでできるはずです。 やったことがないことで、保証がないのでコメント欄に回答します。 もしうまくいったら、自己解決として解決した方法を解答欄に記載ください。 https://cloud.google.com/appengine/docs/standard/python/googlecloudstorageclient/read-write-to-cloud-storage
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問