Modification du programme Python créé dans Application Web Python x Flask x Tensorflow.Keras qui prédit les races de chats.
sever.py
from flask import Flask, render_template, request
from tensorflow.keras.preprocessing.image import load_img
from tensorflow.keras.models import load_model
import numpy as np
from image_process import examine_cat_breeds
from datetime import datetime
import os
import cv2
import pandas as pd
import base64
from io import BytesIO
app = Flask(__name__)
#modèle(model.h5)Et une liste de classes(cat_list)Lis
model = load_model('model.h5')
cat_list = []
with open('cat_list.txt') as f:
cat_list = [s.strip() for s in f.readlines()]
print('= = cat_list = =')
print(cat_list)
@app.route("/", methods=["GET","POST"])
def upload_file():
if request.method == "GET":
return render_template("index.html")
if request.method == "POST":
#Enregistrez le fichier téléchargé une fois
f = request.files["file"]
#filepath = "./static/" + datetime.now().strftime("%Y%m%d%H%M%S") + ".png "
#f.save(filepath)
#Charger le fichier image
#Redimensionner le fichier image
input_img = load_img(f, target_size=(299, 299))
#Exécution d'une fonction pour vérifier le type de chat
result = examine_cat_breeds(input_img, model, cat_list)
print("result")
print(result)
no1_cat = result[0,0]
no2_cat = result[1,0]
no3_cat = result[2,0]
no1_cat_pred = result[0,1]
no2_cat_pred = result[1,1]
no3_cat_pred = result[2,1]
#Sécuriser un tampon pour écrire des images
buf = BytesIO()
#Ecrire les données d'image dans la mémoire tampon
input_img.save(buf,format="png")
#Encoder des données binaires avec base64
# utf-Décoder à 8
input_img_b64str = base64.b64encode(buf.getvalue()).decode("utf-8")
#Ajouter des informations accessoires
input_img_b64data = "data:image/png;base64,{}".format(input_img_b64str)
#Passer au HTML
return render_template("index.html", input_img_b64data=input_img_b64data,
no1_cat=no1_cat, no2_cat=no2_cat, no3_cat=no3_cat,
no1_cat_pred=no1_cat_pred, no2_cat_pred=no2_cat_pred, no3_cat_pred=no3_cat_pred)
if __name__ == '__main__':
app.run(host="0.0.0.0")
index.html
<!DOCTYPE html>
<html>
<body>
{% if no1_cat %}
<img src="{{input_img_b64data}}" border="1" ><br>
Résultat de la prédiction<br>
{{no1_cat}}:{{no1_cat_pred}}<br>
{{no2_cat}}:{{no2_cat_pred}}<br>
{{no3_cat}}:{{no3_cat_pred}}<br>
<hr>
{% endif %}
Veuillez sélectionner un fichier et envoyer<br>
<form action = "./" method = "POST"
enctype = "multipart/form-data">
<input type = "file" name = "file" />
<input type = "submit"/>
</form>
</body>
</html>
L'image est affichée à 299 x 299 (la taille d'entrée du modèle reste ...)
Recommended Posts