You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask部署猫鱼分类模型调用/predict接口出现404错误求助

Flask猫鱼分类模型接口404错误排查与修复

问题描述

我编写了一个用于练习Flask部署的猫鱼分类深度学习模型,按步骤启动Flask应用后,在浏览器调用/predict接口时返回「请求的URL未找到」错误,无法正常使用。

相关代码

from io import BytesIO
import requests
import torch
from flask import Flask, jsonify, request
from PIL import Image
from torchvision import transforms
from catfish_model import  catfish_classes, catfish_model

def load_model():
    m = catfish_model
    m.eval()
    return m

load_model()

img_transforms = transforms.Compose([
        transforms.Resize((224, 224)), 
        transforms.ToTensor(),
        transforms.Normalize(mean=[0.485, 0.456, 0.406],
                             std=[0.229, 0.224, 0.225])
    ])

def create_app():
    app = Flask(__name__)

    @app.route("/")
    def status():
        return jsonify({"status": "ok"})


    @app.route("/predict", methods=['GET', 'POST'])
    def predict():
        if request.method == 'POST':
            img_url = request.form.image_url
        else:
            img_url = request.args.get('image_url', '')

        response = requests.get(img_url)
        img = Image.open(BytesIO(response.content))
        img_tensor = img_transforms(img).unsqueeze(0)
        prediction =  model(img_tensor)
        predicted_class = CatfishClasses[torch.argmax(prediction)]
        return jsonify({"image": img_url, "prediction": predicted_class})



    return app

def main():
    app = create_app()
    app.run(debug=True)


if __name__ == "__main__":
    main()

启动命令

set FLASK_APP=catfish_server.py
flask run --port=8080

调用方式(错误示例)

127.0.0.1:8080/predict image_url=https://www.augsburger-allgemeine.de/img/bilder/crop55113376/4006562429-cv16_9-w1880/Bailey-aus-Gundelfingen.jpg

错误信息

请求的URL未找到。如果您手动输入了URL,请检查拼写并重试。

错误原因及修复方案

1. GET请求参数格式错误

当前调用方式不符合HTTP GET请求规范,参数需要以?开头,正确格式应为:

127.0.0.1:8080/predict?image_url=https://www.augsburger-allgemeine.de/img/bilder/crop55113376/4006562429-cv16_9-w1880/Bailey-aus-Gundelfingen.jpg

2. 模型变量未正确赋值

load_model()函数调用后未将返回的模型实例赋值给model变量,导致predict函数中model(img_tensor)会触发未定义错误。修改代码:

# 原代码
load_model()

# 修改为
model = load_model()

3. 类名大小写不匹配

导入的类列表是catfish_classes,但代码中误写为CatfishClasses,会触发NameError。修正为:

predicted_class = catfish_classes[torch.argmax(prediction)]

4. POST参数获取方式存在崩溃风险

request.form.image_url在参数不存在时会抛出KeyError,改用get方法避免崩溃:

if request.method == 'POST':
    img_url = request.form.get('image_url', '')

5. 未捕获图片处理异常

若图片URL无效、无法下载或不是合法图片,代码会直接崩溃,添加异常捕获提升鲁棒性:

try:
    response = requests.get(img_url)
    response.raise_for_status()  # 检查HTTP请求是否成功
    img = Image.open(BytesIO(response.content))
except Exception as e:
    return jsonify({"error": str(e)}), 400

内容的提问来源于stack exchange,提问作者user16617311

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:10:48