hello,这次用tkinter写一个预测图片的小程序
首先要调用数据库
import tkinter as tk
from tkinter import filedialog
import tensorflow as tf
from PIL import Image, ImageTk
import numpy as np
然后,我们要调用训练好的模型
# 指定模型文件路径
model_path = 'model/16_model.h5'
# 加载模型
model = tf.keras.models.load_model(model_path)
接下来就是程序的主题了,接下来我就分段讲解代码的含义。
class ImageLoaderApp:
def __init__(self, root):
self.root = root
self.root.title("Image Loader")
self.load_button = tk.Button(root, text="Load Image", command=self.load_image)
self.load_button.pack(pady=10)
self.image_label = tk.Label(root)
self.image_label.pack()
self.title_label = tk.Label(root, text="")
self.title_label.pack()
def load_image(self):
file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.png;*.jpg;*.jpeg")])
if file_path:
self.image = tf.io.read_file(file_path)
self.show_image = Image.open(file_path)
self.preprocess_image_predict()
self.display_image()
def preprocess_image_predict(self):
image = tf.image.decode_image(self.image, channels=3, expand_animations=False)
target_size = (224, 224) # 替换为模型所需的大小
image = tf.image.resize(image, target_size)
image = tf.expand_dims(image, axis=0)
predictions = model.predict(image)
if (np.argmax(predictions) < 10):
self.title = class_names[np.argmax(predictions)]
else:
self.title = "I don't know"
def display_image(self):
img = ImageTk.PhotoImage(self.show_image)
self.image_label.config(image=img)
self.image_label.image = img
title_text = self.title # 你可以替换成你想要的标题
self.title_label.config(text=title_text)
首先是第一段代码,这部分代码是展示应用界面的主体部分,这部分包括应用的标题,按键和其功能,图片展示,图片的标题。
class ImageLoaderApp:
def __init__(self, root):
#设置应用的标题
self.root = root
self.root.title("Image Loader")
#设置应用的按键,命令为读取图片
self.load_button = tk.Button(root, text="Load Image", command=self.load_image)
self.load_button.pack(pady=10)
#设指图片展示
self.image_label = tk.Label(root)
self.image_label.pack()
#设置图片的标题
self.title_label = tk.Label(root, text="")
self.title_label.pack()
接下来的代码是读取图片的代码,分为两个部分,第一部分是读取图片的路径,这个作为展示使用。另一个部分也是读取图片的路径,用来给tensorflow预测。
def load_image(self):
file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.png;*.jpg;*.jpeg")])
if file_path:
#读取图片(展示)
self.image = tf.io.read_file(file_path)
#读取图片(tensorflow)
self.show_image = Image.open(file_path)
self.preprocess_image_predict()
self.display_image()
这个部分的代码是用来预测图片的,这个部分就不详细解释了,是固定的(大概吧)。
def preprocess_image_predict(self):
image = tf.image.decode_image(self.image, channels=3, expand_animations=False)
target_size = (224, 224) # 替换为模型所需的大小
image = tf.image.resize(image, target_size)
image = tf.expand_dims(image, axis=0)
predictions = model.predict(image)
if (np.argmax(predictions) < 10):
self.title = class_names[np.argmax(predictions)]
else:
self.title = "I don't know"
最后是展示图片,包括图片和预测名。
def display_image(self):
img = ImageTk.PhotoImage(self.show_image)
self.image_label.config(image=img)
self.image_label.image = img
title_text = self.title # 你可以替换成你想要的标题
self.title_label.config(text=title_text)
最后的最后,我们只要展示tkinter就可以了
if __name__ == "__main__":
root = tk.Tk()
root.geometry('500x500')
app = ImageLoaderApp(root)
root.mainloop()
让我们看看结果吧
虽然很简陋,但是看结果是成功了,预测结果十分甚至九分的准。