return jsonify 中的预测结果
return predicted results in jsonify
我是一名学生,目前正在 python(FLASK) 中从事我的图像分类项目。
我已经实现了所有的功能和模型,并且它作为网络应用程序运行良好。现在我想制作一个 api 生成 JSONIFY,这样我也可以轻松地在移动应用程序中使用。
我有下面列出的代码
@app.route('/predict', methods=['GET', 'POST'])
def predict():
if request.method == 'POST':
img = request.files['image']
filename = img.filename
path = os.path.join('static/uploads', filename)
img.save(path)
print(filename)
predictions = pipeline_model(path)
return render_template("predict.html", p="uploads/{}".format(filename), pred=predictions)
return render_template("predict.html", p="images/dog.jpg", pred="")
另一个管道函数是:
def pipeline_model(path):
img = image.load_img(path, target_size=(299, 299))
img = image.img_to_array(img)
img = img / 255.0
img = np.expand_dims(img, axis=0)
pred = model.predict(img)
max_preds = []
pred = pred[0]
for i in range(5):
name = labels[pred.argmax()]
per = round(np.amax(pred) * 100, 2)
max_preds.append([name, per])
ele = pred.argmax()
pred = np.delete(pred, ele)
paths = glob('static/uploads/*')
if len(paths) > 5:
for path in paths[:4]:
os.remove(path)
return max_preds
所以我想将这个“return render_template”函数转换为“return jsonify”的形式,如何实现才能在移动应用中使用还有。
根据用户代理,您可以发送 json 或 HTML(因此应用程序和 HTML 应用程序都可以工作)。根据您的需要,您可以同时保留 returns 或仅使用 json。在这个例子中,我使用了一个简单的字典,如果您需要帮助,请告诉我们。
@app.route("/get_my_prediction",methods=['GET','POST'])
def get_my_predicts():
# print(request.headers) # for debug in case needed
# print(f"request.headers.accept {request.headers.get('Accept')}") # for debug in case needed
data = {"label1": "value 1", "label2": "value2", "label3": 3.6}
data_type, *_ = request.headers.get('Accept').split(",")
if "text/html" in data_type: # this code can be made cleaner based on need
return make_response(str(data),200) # send as html, here you can keep your existing method to render html
else:
return make_response(jsonify(data), 200) # send as a json data
我是一名学生,目前正在 python(FLASK) 中从事我的图像分类项目。 我已经实现了所有的功能和模型,并且它作为网络应用程序运行良好。现在我想制作一个 api 生成 JSONIFY,这样我也可以轻松地在移动应用程序中使用。 我有下面列出的代码
@app.route('/predict', methods=['GET', 'POST'])
def predict():
if request.method == 'POST':
img = request.files['image']
filename = img.filename
path = os.path.join('static/uploads', filename)
img.save(path)
print(filename)
predictions = pipeline_model(path)
return render_template("predict.html", p="uploads/{}".format(filename), pred=predictions)
return render_template("predict.html", p="images/dog.jpg", pred="")
另一个管道函数是:
def pipeline_model(path):
img = image.load_img(path, target_size=(299, 299))
img = image.img_to_array(img)
img = img / 255.0
img = np.expand_dims(img, axis=0)
pred = model.predict(img)
max_preds = []
pred = pred[0]
for i in range(5):
name = labels[pred.argmax()]
per = round(np.amax(pred) * 100, 2)
max_preds.append([name, per])
ele = pred.argmax()
pred = np.delete(pred, ele)
paths = glob('static/uploads/*')
if len(paths) > 5:
for path in paths[:4]:
os.remove(path)
return max_preds
所以我想将这个“return render_template”函数转换为“return jsonify”的形式,如何实现才能在移动应用中使用还有。
根据用户代理,您可以发送 json 或 HTML(因此应用程序和 HTML 应用程序都可以工作)。根据您的需要,您可以同时保留 returns 或仅使用 json。在这个例子中,我使用了一个简单的字典,如果您需要帮助,请告诉我们。
@app.route("/get_my_prediction",methods=['GET','POST'])
def get_my_predicts():
# print(request.headers) # for debug in case needed
# print(f"request.headers.accept {request.headers.get('Accept')}") # for debug in case needed
data = {"label1": "value 1", "label2": "value2", "label3": 3.6}
data_type, *_ = request.headers.get('Accept').split(",")
if "text/html" in data_type: # this code can be made cleaner based on need
return make_response(str(data),200) # send as html, here you can keep your existing method to render html
else:
return make_response(jsonify(data), 200) # send as a json data