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