Das in [Python x Flask x Tensorflow.Keras-Webanwendung, die Katzenrassen vorhersagt] erstellte Python-Programm wurde geändert (https://qiita.com/Susasan/items/52d1c838eb34133042a3).
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__)
#Modell-(model.h5)Und eine Liste von Klassen(cat_list)Lesen
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":
#Speichern Sie die hochgeladene Datei einmal
f = request.files["file"]
#filepath = "./static/" + datetime.now().strftime("%Y%m%d%H%M%S") + ".png "
#f.save(filepath)
#Bilddatei laden
#Ändern Sie die Größe der Bilddatei
input_img = load_img(f, target_size=(299, 299))
#Ausführung einer Funktion zur Überprüfung des Katzentyps
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]
#Sichern Sie sich einen Puffer zum Schreiben von Bildern
buf = BytesIO()
#Schreiben Sie Bilddaten in den Puffer
input_img.save(buf,format="png")
#Codieren Sie Binärdaten mit base64
# utf-Bei 8 dekodieren
input_img_b64str = base64.b64encode(buf.getvalue()).decode("utf-8")
#Fügen Sie zufällige Informationen hinzu
input_img_b64data = "data:image/png;base64,{}".format(input_img_b64str)
#An HTML übergeben
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>
Vorhersageergebnis<br>
{{no1_cat}}:{{no1_cat_pred}}<br>
{{no2_cat}}:{{no2_cat_pred}}<br>
{{no3_cat}}:{{no3_cat_pred}}<br>
<hr>
{% endif %}
Bitte wählen Sie eine Datei und senden Sie<br>
<form action = "./" method = "POST"
enctype = "multipart/form-data">
<input type = "file" name = "file" />
<input type = "submit"/>
</form>
</body>
</html>
Das Bild wird mit 299 x 299 angezeigt (die Eingabegröße des Modells bleibt erhalten ...)
Recommended Posts