Я получаю ошибку 404 на фоновом изображении, когда запускаю свой веб-сайт

#python #html #css #flask #http-status-code-404

Вопрос:

Я создал экземпляр сервера flask и загрузил модель машинного обучения, чтобы я мог отправить запрос на публикацию с изображением и получить результат в файле JSON, я протестировал его на веб-сайте, содержащем два маршрута (я создал страницы с использованием HTML), и он работал правильно, я хотел добавить фоновое изображение на веб-сайт, но я получаю ошибку 404 на этом изображении, когда я запускаю файл python в своем CMD.. Любая помощь будет очень признательна.

Это HTML — код для одной из веб-страниц

 <!DOCTYPE html>
<html>
<head>
    <title>prediction</title>
</head>
<style>
    h3 {color:rgb(138, 34, 34); font-size: 25px;}
  </style>
<body style="background-image:url(a.jpg);background-size: 100%; color: white; position: absolute; top: 15%; left: 45%; font-size: 16px; line-height: 1.4;">

    <center>
        <h1>Your prediction is:</h1>

        

        <h3>{{data}}</h3>

    </center>

</body>
</html>
 

И это код для сервера flask

 from flask import Flask, render_template, request, jsonify
import cv2
import numpy as np
import pandas as pd
import tensorflow
from tensorflow import keras
from tensorflow.python.keras import backend as k

app = Flask(__name__)

model = tensorflow.keras.models.load_model('model.h5')


@app.route('/')
def index():
    return render_template("index.html", data="hey")


@app.route("/prediction", methods=["POST"])
def prediction():

    predd="Benign"
    
    img = request.files['img']
    
    img.save("img.jpg")

    image = cv2.imread("img.jpg")

    image = cv2.resize(image, (224,224))

    image = np.reshape(image, (1,224,224,3))

    pred = model.predict(image)

    preddd = pred > 0.5
    pre= pred*100
    s= "%"
    if(preddd):
        predd="Malignant"

    print("prediction is:")
    print(predd)
    print("percentage is:")
    print(str(pre)  s)
    print(" ")

    #return jsonify({"prediction is": predd,})
    return render_template("prediction.html", data=predd)
    


if __name__ == "__main__":
    app.run(debug=False,host='192.168.1.111',port=5000)
 

Вот скриншот из моего CMD

введите описание изображения здесь

Ответ №1:

Убедитесь, что изображение существует в static подкаталоге, поэтому путь:

static/a.jpg

Убедитесь, что это можно загрузить непосредственно по адресу http://192.168.1.111/static/a.jpg

Затем измените CSS для поддержки этого:

 background-image:url("/static/a.jpg")
 

Комментарии:

1. И измените app = Flask(__name__) на app = Flask(__name__, static_folder='./static')

2. @JoshLiu static_folder по умолчанию 'static' имеет значение, поэтому нет смысла изменять это, если вы не хотите называть этот каталог чем-то другим на диске.

Ответ №2:

Другой вариант: добавьте следующий маршрут, и вы готовы идти.

 @app.route("/a.jpg", methods=["GET"])
def image():          
    return send_from_directory('path/to/image', 'a.jpg')
 

или, если имя a.jpg не исправлено, выполните следующие действия:

 @app.route("/<name>", methods=["GET"])
def image(name):          
    return send_from_directory('path/to/image', name)