【发布时间】:2017-04-09 16:51:10
【问题描述】:
我已经构建了一个模型,它可以接收图像,在像素级别读取它,然后确定图像中包含猫还是狗。出于教育目的,我现在正尝试将其放入 Flask 应用程序中(以前从未使用过 Flask)。到目前为止我所做的工作:用户上传图像,图像由 Flask 保存到磁盘,图像被处理并发送到模型,模型预测并从模板生成输出页面。现在我想显示用户上传的图像,我遇到了问题。适用的代码在这里:
import flask
from flask import request, render_template
import numpy as np
import pandas as pd
from copy import deepcopy
from werkzeug import secure_filename
from PIL import Image
import catdog
# Initialize the app
app = flask.Flask(__name__)
@app.route("/")
def viz_page():
with open("frontend.html", 'r') as viz_file:
return viz_file.read()
@app.route("/uploader", methods=["GET","POST"])
def get_image():
if request.method == 'POST':
f = request.files['file']
sfname = 'images/'+str(secure_filename(f.filename))
f.save(sfname)
clf = catdog.classifier()
#clf.save_image(f.filename)
return render_template('result.html', pred = clf.predict(sfname), imgpath = sfname)
#--------- RUN WEB APP SERVER ------------#
# Start the app server on port 80
# (The default website port)
app.run(host='0.0.0.0', port=5000, debug=True)
还有模板:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Dog vs Cat</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://d3js.org/d3.v3.min.js"></script>
</head>
<body>
<h3> Prediction: {{ pred }} </h3>
<br><br>
<img src={{imgpath}}>
<script>
</script>
</body>
</html>
我得到的是“预测:yada yada”部分,它运行良好。但是,图像总是返回空白。当我查看它时,它正在查看http://localhost:5000/images/cat.4.jpg,我知道这意味着它没有在正确的位置,但我不确定如何动态获取我想要的图像。我在这里找到了这个指南:How to pass uploaded image to template.html in Flask,我觉得这应该足以帮助我,但我只是没有得到答案试图让我看到的东西。非常感谢您的帮助。
额外问题:是否有可能永远不保存图像而只是不断地将其保存在 Flask 中的内存中?理想情况下,我永远不会保存图像,我只是使用它,然后在做出预测后将其扔掉。
【问题讨论】: