在Flask中使用用户上传的图像

我建立了一个可以摄取图像的模型,可以读取像素级别的图像,然后确定图像中包含猫还是狗。出于教育目的,我现在尝试将其放入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,我知道那是在不正确的位置,但是我不确定如何动态地获取想要的图像。

额外的问题:是否可能永远不保存图像,而只是将其不断保存在Flask中的内存中?理想情况下,我永远不会保存图像,只使用它,然后在做出预测后将其扔掉。

回答:

图片应保存在/ static文件夹中,因此只需将保存路径更改为static / images

sfname = 'static/images/'+str(secure_filename(f.filename))

这样HTML模板就可以准备好了

<img src="/static/images/your_image_here.jpg">

以上是 在Flask中使用用户上传的图像 的全部内容, 来源链接: utcz.com/qa/423185.html

回到顶部