首页 > 解决方案 > 错误无法以只读模式创建组

问题描述

我们正在创建一系列应用程序,这些应用程序使用通过对面部图像进行机器学习创建的学习模型来确定上传面部图像时用户的样子。

错误无法在只读模式下创建组。你认为我们如何解决这个问题这是我的代码:

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.

标签: pythonflaskkeras

解决方案


首先定义您的模型,并使用load_weights()而不是使用load_model.

这是一个问题链接:https ://github.com/keras-team/keras/issues/6937


推荐阅读