Traceback (most recent call last):
File "app.py", line 34, in <module>
learn = setup_model_pth(PATH_TO_MODELS_DIR, NAME_OF_FILE, classes)
File "app.py", line 31, in setup_model_pth
learn.load(learner_name_to_load, device=torch.device('cpu'))
File "C:\Users\Caden\anaconda3\envs\tf\lib\site-packages\fastai\basic_train.py", line 269, in load
state = torch.load(source, map_location=device)
File "C:\Users\Caden\anaconda3\envs\tf\lib\site-packages\torch\serialization.py", line 584, in load
with _open_file_like(f, 'rb') as opened_file:
File "C:\Users\Caden\anaconda3\envs\tf\lib\site-packages\torch\serialization.py", line 234, in _open_file_like
return _open_file(name_or_buffer, mode)
File "C:\Users\Caden\anaconda3\envs\tf\lib\site-packages\torch\serialization.py", line 215, in __init__
super(_open_file, self).__init__(open(name, mode))
FileNotFoundError: [Errno 2] No such file or directory: 'models\\model_best.pth'
我克隆了一个github存储库,运行时显示此错误。主要问题是它没有显示这样的文件或目录:'models \ model_best.pth',但是实际上有一个目录models / model_best.pth,所以为什么它像models \ model_best.pth而不是.models / models_bestpth一样出现。
源代码:'''
from __future__ import division, print_function
import sys
import os
import glob
import re
from pathlib import Path
from io import BytesIO
import base64
import requests
# Import fast.ai Library
from fastai import *
from fastai.vision import *
# Flask utils
from flask import Flask, redirect, url_for, render_template, request
from PIL import Image as PILImage
# Define a flask app
app = Flask(__name__)
NAME_OF_FILE = 'model_best' # Name of your exported file
PATH_TO_MODELS_DIR = Path('') # by default just use /models in root dir
classes = ['Actinic keratoses', 'Basal cell carcinoma', 'Benign keratosis',
'Dermatofibroma', 'Melanocytic nevi', 'Melanoma', 'Vascular lesions']
def setup_model_pth(path_to_pth_file, learner_name_to_load, classes):
data = ImageDataBunch.single_from_classes(
path_to_pth_file, classes, ds_tfms=get_transforms(), size=224).normalize(imagenet_stats)
learn = cnn_learner(data, models.densenet169, model_dir='models')
learn.load(learner_name_to_load, device=torch.device('cpu'))
return learn
learn = setup_model_pth(PATH_TO_MODELS_DIR, NAME_OF_FILE, classes)
def encode(img):
img = (image2np(img.data) * 255).astype('uint8')
pil_img = PILImage.fromarray(img)
buff = BytesIO()
pil_img.save(buff, format="JPEG")
return base64.b64encode(buff.getvalue()).decode("utf-8")
def model_predict(img):
img = open_image(BytesIO(img))
pred_class,pred_idx,outputs = learn.predict(img)
formatted_outputs = ["{:.1f}%".format(value) for value in [x * 100 for x in torch.nn.functional.softmax(outputs, dim=0)]]
pred_probs = sorted(
zip(learn.data.classes, map(str, formatted_outputs)),
key=lambda p: p[1],
reverse=True
)
img_data = encode(img)
result = {"class":pred_class, "probs":pred_probs, "image":img_data}
return render_template('result.html', result=result)
@app.route('/', methods=['GET', "POST"])
def index():
# Main page
return render_template('index.html')
@app.route('/upload', methods=["POST", "GET"])
def upload():
if request.method == 'POST':
# Get the file from post request
img = request.files['file'].read()
if img != None:
# Make prediction
preds = model_predict(img)
return preds
return 'OK'
@app.route("/classify-url", methods=["POST", "GET"])
def classify_url():
if request.method == 'POST':
url = request.form["url"]
if url != None:
response = requests.get(url)
preds = model_predict(response.content)
return preds
return 'OK'
if __name__ == '__main__':
port = os.environ.get('PORT', 8008)
if "prepare" not in sys.argv:
app.run(debug=False, host='0.0.0.0', port=port)
'''
您的代码正在计算机的根目录中搜索文件,该目录不在您的文件所在的位置。它在某个文件夹中,这就是为什么找不到文件的原因。
更改路径变量自
PATH_TO_MODELS_DIR = Path('')
to
PATH_TO_MODELS_DIR = Path('.')
它将在当前工作目录中搜索您的文件夹模型和文件model_best.pth。