Не понимаю, почему я не могу повернуть изображение в колбе и отобразить его, продолжает показывать значок разбитого изображения - PullRequest
1 голос
/ 01 апреля 2019

Я использую Flask, чтобы попытаться обработать обработанное изображение, например, обрезать или преобразовать его пользователю после обработки моей моделью, но всегда получалось коротким, потому что оно либо приводило к некоторой ошибке. Когда я использовал numpy.rot90 (), оно не повернул мое изображение, как планировалось, вместо этого я получил это.

GET/predict/%3CPIL.JpegImagePlugin.JpegImageFile%20image%20mode=RGB%20size=64x64%20at%200xCE11748%3E HTTP/1.1" 500 -

Вот мой код:

@app.route('/predict/<filename>')
def predict(filename):
image_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
img = Image.open(image_path)
image_url = url_for('images', filename=filename)
image_mtx = imread(image_path)
image_mtx = image_mtx / 255.
image_mtx = image_mtx.reshape(-1, 64, 64, 3)
predictions = model.predict(image_mtx)

angles = ['0', '180', '270', '90']
angle = [0, 90, 180, 270]

confidence = str(round(max(predictions[0]), 4))
predictions = angles[np.argmax(predictions)]
print(predictions)

#img = img.rotate(1*int(angle)) #Clockwise (positive), to change to anti-clockwise put -1 
#img = numpy.rot90(img)
if confidence >= '0.8':
    if predictions == '270': angle = 90 
    elif predictions == '180': angle = 180 
    elif predictions == '90': angle = 270
    elif predictions == '0' : angle = 0

numpy.rot90(img)

return render_template(
    'predict.html',
    image_url=image_url,
    img=img,
    predictions=predictions,
    confidence=confidence
)

HTML-файл:

{% extends 'layout.html' %}
{% block body %}
<div class="centered">

<p>Image Given</p>
<img src="{{image_url}}" name="image_url" id="image_url">
<p>Looks like it's {{confidence|safe }}</p>
<p>The picture is rotated at {{ predictions|safe }} degrees</p>
<p>Fixed Image</p>
<img src="{{img}}" name="img" id="img">
</div>
<script src="http://cdn.pydata.org/bokeh/release/bokeh-0.12.10.min.js"> 
</script>
<script src="http://cdn.pydata.org/bokeh/release/bokeh-widgets- 
0.12.10.min.js"></script>
{% endblock %}

1 Ответ

0 голосов
/ 01 апреля 2019

Вам необходимо создать действительный URL для повернутого изображения, которое возвращает файл изображения. Для этого сначала сохраните повернутое изображение. Затем вы можете использовать url_for для создания URL для него, как для исходного изображения.

Ниже приведена рабочая реализация. Я удалил код предсказания для читабельности и чтобы иметь возможность запустить его на моем конце. Вам нужно заменить uploads в os.path.join на app.config['UPLOAD_FOLDER'] в вашем случае.

import os
from flask import Flask, render_template, url_for, send_file
from PIL import Image
app = Flask(__name__)

@app.route('/images/<filename>')
def images(filename):
    image_path = os.path.join('uploads', filename)
    return send_file(image_path)

@app.route('/predict/<filename>')
def predict(filename):
    image_path = os.path.join('uploads', filename)
    img = Image.open(image_path)
    image_url = url_for('images', filename=filename)

    # rotate image 90 degrees and save rotated image
    fixed_img = img.rotate(90)
    fixed_img.save(os.path.join('uploads', 'fixed_' + filename))
    fixed_image_url = url_for('images', filename='fixed_' + filename)

    img.close()

    return render_template(
        'predict.html',
        image_url=image_url,
        img=fixed_image_url
    )

if (__name__ == "__main__"):
    app.run(port = 8000)

Выход:

Code output in browser showing original image and rotated image

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