为什么烧瓶不返回结果?

时间:2021-03-03 09:00:31

标签: python flask deployment pytorch torchvision

我是深度学习和烧瓶部署的新手,我正在尝试使用烧瓶部署 pytorch 模型(resnet34)。当我尝试上传图像以检查预测时,它没有显示任何预测。它没有在我的代码中显示任何错误。

我上传图片的 HTML 页面。

<form method ='post' enctype=multipart/form-data>
        <input type="file" name="file" >
        <input type="submit" value="upload">

我想查看预测的 html 页面。

<body>
    <h2>Prediction</h2>
    <p>Currency Name: {{ currency }}</p>
</body>

烧瓶的App.py

from flask import Flask, request, render_template, jsonify
from commons import get_tensor
from inference import get_currency_name
app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def hello_world():
    if request.method == 'GET':
        return render_template('index.html', value='hi')
    if request.method == 'POST':
        try:
            file = request.files['file']
            image = file.read()
            print(request.files)
            if 'file' not in request.files:
                print('file not uploaded')
                return
            file = request.files['file']
            image = file.read()
            currency_name = get_currency_name(image_bytes=image)
            category, currency_name = get_currency_name(image_bytes=image)
            get_currency_name(image_bytes=image)
            tensor = get_tensor(image_bytes=image)
            print(get_tensor(image_bytes=image))
            print(currency_name)
            return render_template('result.html', currency=currency_name, category=category)
            #return jsonify({'category': category, 'currency_name': currency_name})
        
        except:
            
            return render_template('result.html')


        

if __name__ == '__main__':
    app.run(debug=True)

commons.py 代码

import io

import torch
import torch.nn as nn
from torchvision import models, transforms
from PIL import Image

def get_model():
    checkpoint_path = 'checkpoint.pth'
    model = models.resnet34(pretrained=True)
    model.classifier = nn.Sequential(nn.Linear(512, 6))
    model.load_state_dict(torch.load(
        checkpoint_path, map_location='cpu'), strict=False)
    model.eval()
    print("model loaded!!")
    return model

def get_tensor(image_bytes):
    my_transforms = transforms.Compose([transforms.Resize(224),
                                        transforms.ToTensor(),
                                        transforms.Normalize(mean=[0.5, 0.5, 0.5], 
                                                                std=[0.5, 0.5, 0.5])
                                        ])
    image = Image.open(io.BytesIO(image_bytes))
    return my_transforms(image).unsqueeze(0)

inference.py 的代码

import torch
from commons import get_model, get_tensor

class_names = ['Rs. 20', 'Rs. 100', 'Rs. 500', 'Rs. 10', 'fake 100', 'Fake 500']
model = get_model()
def get_currency_name(image_bytes):
    tensor = get_tensor(image_bytes)
    outputs = model(tensor)
    _, preds = outputs.max(2)
    category = preds.item()
    currency_name = class_names[category]

    return currency_name

当我选择一张图片并提交时,它不会向 result.html 返回任何结果,也不会显示任何错误。 可能出了什么问题??

0 个答案:

没有答案