AttributeError: объект SpooledTemporaryFile не имеет атрибута resize - PullRequest
1 голос
/ 18 июня 2020

Я пытаюсь развернуть классификатор изображений Keras CNN как приложение flask. когда я пытаюсь загрузить изображение для классификации, появляется следующая ошибка.

Это мой flask сценарий, он считывает изображение из HTTP-запроса и отображает шаблон с результатами классификации:

classifier = load_model('e:/catVSdog_Model.h5')

def predict(iimage, target):
    def predict(iimage, target):
    iimage=iimage.resize(target)
    iimage = img_to_array(iimage)
    iimage = np.expand_dims(iimage, axis = 0)
    prediction = classifier.predict(iimage)

    if prediction[0][0] == 1:
         result = 'dog'
    else:
         result = 'cat'
    return result

@app.route("/", methods=["GET", "POST"])
def upload_image():
    if request.method == "POST":

        if request.files:
            uploaded_image = request.files["image"].read()
            #uploaded_image = Image.open(io.BytesIO(uploaded_image))
            result=predict(uploaded_image, target=(64, 64))

            print(uploaded_image)
            #uploaded_image.save(os.path.join(app.config["IMAGE_UPLOADS"], uploaded_image.filename))

            return render_template('index.html', result = result)
            #return redirect(request.url)
    return render_template("index.html")

if __name__== '__main__':
    app.run()   

Это исключение, которое я получаю при отправке запроса:

Traceback (most recent call last):
  File "C:\Users\Ali\Anaconda3.2020\lib\site-packages\werkzeug\datastructures.py", line 3087, in __getattr__
    return getattr(self.stream, name)
AttributeError: 'SpooledTemporaryFile' object has no attribute 'resize'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Ali\Anaconda3.2020\lib\site-packages\flask\app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\Ali\Anaconda3.2020\lib\site-packages\flask\app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\Ali\Anaconda3.2020\lib\site-packages\flask\app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\Ali\Anaconda3.2020\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Users\Ali\Anaconda3.2020\lib\site-packages\flask\app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\Ali\Anaconda3.2020\lib\site-packages\flask\app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\Ali\Desktop\FlaskCNNProject\untitled2.py", line 63, in upload_image
    result=predict(iimage, target=(64, 64))
  File "C:\Users\Ali\Desktop\FlaskCNNProject\untitled2.py", line 41, in predict
    iimage=iimage.resize(target)
  File "C:\Users\Ali\Anaconda3.2020\lib\site-packages\werkzeug\datastructures.py", line 3093, in __getattr__
    return getattr(self.stream._file, name)
AttributeError: '_io.BytesIO' object has no attribute 'resize'

Как исправить эту ошибку?

1 Ответ

0 голосов
/ 18 июня 2020

Нам нужно создать объект PIL Image для выполнения операций, связанных с изображением, таких как изменение размера и другие. Request.files ['file'] предоставит вам объект Bytes, который не содержит других операций, связанных с изменением размера изображения. Мы можем преобразовать этот объект байтов в изображение, используя приведенный ниже код.

from PIL import Image
uploaded_image = request.files.get["image"]
img = Image.open(uploaded_image)

Теперь просто передайте этот объект img в вашу функцию прогнозирования, и тогда все будет в порядке.

Надеюсь, это поможет !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...