前提・実現したいこと
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()
あなたの回答
tips
プレビュー