python - 错误无法以只读模式创建组
问题描述
我们正在创建一系列应用程序,这些应用程序使用通过对面部图像进行机器学习创建的学习模型来确定上传面部图像时用户的样子。
错误无法在只读模式下创建组。你认为我们如何解决这个问题这是我的代码:
import os
from flask import Flask, request, redirect, url_for, render_template, flash
from werkzeug.utils import secure_filename
from keras.models import Sequential, load_model
from keras.preprocessing import image
import tensorflow as tf
import numpy as np
import cv2
from keras.preprocessing.image import load_img, img_to_array
我认为这段代码有问题
#model.save('model.h5', include_optimizer=False)
model = load_model('./model.h5', compile=False)
下面的代码似乎没问题
classes = ["秋元真夏","生田絵梨花","齋藤飛鳥","白石麻衣","堀未央奈",]
num_classes = len(classes)
image_size = 64
UPLOAD_FOLDER = "static"
ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg', 'gif'])
app = Flask(__name__)
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
# 顔を検出して顔部分の画像(64x64)を返す関数
def detect_face(img):
# 画像をグレースケールへ変換
img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
# カスケードファイルのパス
cascade_path = "face.xml"
# カスケード分類器の特徴量取得
cascade = cv2.CascadeClassifier(cascade_path)
# 顔認識
faces=cascade.detectMultiScale(img, scaleFactor=1.1, minNeighbors=1, minSize=(10,10))
# 顔認識出来なかった場合
if len(faces) == 0:
face = faces
# 顔認識出来た場合
else:
# 顔部分画像を取得
for x,y,w,h in faces:
face = img[y:y+h, x:x+w]
# リサイズ
face = cv2.resize(face, (image_size, image_size))
return face
graph = tf.get_default_graph()
@app.route('/', methods=['GET', 'POST'])
def upload_file():
global graph
with graph.as_default():
if request.method == 'POST':
if 'file' not in request.files:
flash('ファイルがありません')
return redirect(request.url)
file = request.files['file']
if file.filename == '':
flash('ファイルがありません')
return redirect(request.url)
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(UPLOAD_FOLDER, filename))
filepath = os.path.join(UPLOAD_FOLDER, filename)
#受け取った画像を読み込み
img = cv2.imread(filepath, 1)
# 顔検出して大きさ64x64
img = detect_face(img)
# 顔認識出来なかった場合
if len(img) == 0:
pred_answer = "顔を検出できませんでした。他の画像を送信してください。"
return render_template("index.html",answer=pred_answer)
# 顔認識出来た場合
else:
# 画像の保存
image_path = UPLOAD_FOLDER + "/face_" + file.filename
cv2.imwrite(image_path, img)
img = image.load_img(filepath, grayscale=True, target_size=(image_size,image_size))
img = image.img_to_array(img)
data = np.array([img])
result = model.predict(data)[0]
print(result)
predicted = result.argmax()
pred_answer = classes[predicted] + "に似ています"
message_comment = "顔を検出出来ていない場合は他の画像を送信して下さい"
return render_template("index.html",answer=pred_answer, img_path=image_path, message=message_comment)
return render_template("index.html",answer="")
if __name__ == "__main__":
app.run()
enter code here
终端的错误代码。
Using TensorFlow backend.
Traceback (most recent call last):
File "/Users/kk/Desktop/sample-app/main.py", line 13, in <module>
model = load_model('./model.h5', compile=False)
File "/Users/kk/.pyenv/versions/3.6.5/lib/python3.6/site-packages/keras/engine/saving.py", line 492, in load_wrapper
return load_function(*args, **kwargs)
File "/Users/kk/.pyenv/versions/3.6.5/lib/python3.6/site-packages/keras/engine/saving.py", line 584, in load_model
model = _deserialize_model(h5dict, custom_objects, compile)
File "/Users/kk/.pyenv/versions/3.6.5/lib/python3.6/site-packages/keras/engine/saving.py", line 270, in _deserialize_model
model_config = h5dict['model_config']
File "/Users/kk/.pyenv/versions/3.6.5/lib/python3.6/site-packages/keras/utils/io_utils.py", line 318, in __getitem__
raise ValueError('Cannot create group in read-only mode.')
ValueError: Cannot create group in read-only mode.
解决方案
首先定义您的模型,并使用load_weights()
而不是使用load_model
.
推荐阅读
- java - 从数组中查找第二高的否,其中数组包含重复值
- angular - Ionic5 App 与 SupaBase 的连接给出“未定义进程”
- plot - Thingsboard:用过去的数据绘制图表
- class - Wagtail Pages 属于哪一类?
- javascript - 如何解决 ReactNative 反应导航中的错误?
- php - 来自sql的textarea中的var?
- algorithm - 如何强制 Gurobi 使用预求解阶段?
- c++ - 如何避免 C 库中的函数名冲突?
- backbone.js - 以入职年份为参数,创建自定义方法获取员工模型的体验
- pine-script - 如何只触发一个条目?