现在很多搞算法的人,跑跑代码,比如训练和测试代码搞得飞溜,但想把算法代码打包成一个软件,比如给它包装一个界面,就不会了,有些人会推荐用qt做界面,但qt的上手难度还是比较高,如果我们只是简单的做一个gui界面,而大费周章去学习qt,感觉就得不偿失,有空的话,多看两篇论文不好吗?
Tkinter(即 tk interface,简称“Tk”)本质上是对Tcl/Tk软件包的Python接口封装,属于Python自带的标准库,安装好Python后可以直接使用Tkinter库而无须另行安装。Tkinter库作为Python GUI开发工具之一,具备GUI库的常用功能,可以说“麻雀虽小,五脏俱全”。当您想要制作一个简单的桌面应用程序或者小工具的界面时,Tkinter库绝对是一个最佳的选择。
下面界面的开发,需要有一点的基础,建议先看看我写的另外一篇文章:基于Tkinter的深度学习图像处理界面开发(一)_tkinter 深度学习-CSDN博客
一. 需求
包装深度学习的界面应该具有以下几个几个基本功能:
1.通过按钮选择图片或者模型
2.显示图片
3.显示运行结果
二.部分代码展示(完整代码看下载链接)
以一个简单的深度学习分类代码作为演示,大家可以基于这个改,该有的功能都有
#!/usr/bin/env python3
import cv2
import numpy as np
from PIL import Image
from model import HappyModel
from tensorflow.keras.utils import img_to_array
import tkinter.messagebox as messagebox
import tkinter as tk
from tkinter import ttk
from PIL import Image, ImageTk
import os
from tkinter.filedialog import askopenfilename, asksaveasfilename
import cv2
import numpy as np
file_path = os.path.dirname(__file__)
WIN_WIDTH = 400
WIN_HEIGHT = 400
model_path = "logs/HappyModel_model_logep042-accuracy0.966-val_accuracy0.999.h5"
IMG_W = 96
IMG_H = 96
model_cnn = HappyModel((IMG_H, IMG_W, 3))
model_cnn.load_weights(model_path)
EMOTIONS = ['Apple_Braeburn', 'Banana', 'Blueberry', 'Cherry', 'Chestnut', 'Cocos', 'Corn', 'Eggplant',
'Fig', 'Ginger_Root', 'Granadilla', 'Lemon', 'Onion_Red', 'Orange', 'Pear']
class Image_sys():
def __init__(self):
self.root = tk.Tk()
self.root.geometry('400x400')
self.root.title('基于神经网络CNN水果分类系统') # 设置窗口标题
self.root.iconbitmap('icon/conan.ico') # 设置窗口图标
self.root.resizable(False, False)
# 创建一个容器,其父容器为self.root
self.frame_scr = ttk.LabelFrame(self.root, text="Scour image:")
# padx pady 该容器外围需要留出的空余空间
self.frame_scr.place(x=80, y=40, width=250, height=250)
self.label_scr_image = None
self.label_des_image = None
self.path = ''
self.root.mainloop()
def open_file(self):
# 打开文件对话框
open_img_path = askopenfilename(initialdir=file_path,
filetypes=[("jpg格式", "jpg"), ("png格式", "png"), ("bmp格式", "bmp")],
parent=self.root,
title='打开自定义图片')
if (open_img_path == ''):
return
else:
if (self.label_des_image != None):
self.label_des_image.pack_forget() # 隐藏控件
self.label_des_image = None
self.path = open_img_path
image = Image.open(self.path)
show_img = image.resize((250, 250))
tk_image = ImageTk.PhotoImage(show_img)
if (self.label_scr_image == None):
self.label_scr_image = tk.Label(self.frame_scr, image=tk_image)
self.label_scr_image.configure(image=tk_image)
self.label_scr_image.pack() # 显示控件
pil_image = image.resize((IMG_W, IMG_H))
# 将 PIL 图像转换为 NumPy 数组
np_array = np.array(pil_image)
# 创建 OpenCV 图像对象
cv_image = cv2.cvtColor(np_array, cv2.COLOR_RGB2BGR)
image_re = cv_image.astype("float") / 255.0
image_re = img_to_array(image_re)
image_re = np.expand_dims(image_re, axis=0)
# 用模型预测各分类的概率
preds = model_cnn.predict(image_re)[0]
# emotion_probability = np.max(preds) # 最大的概率
label = EMOTIONS[preds.argmax()] # 选取最大概率的表情类
self.root.mainloop()
if __name__ == '__main__':
Image_sys()
三. 运行结果显示
整套算法系列:GUI界面开发_AI洲抿嘴的薯片的博客-CSDN博客
项目源码下载地址:关注文末【AI街潜水的八角】,回复【Tkinter界面】即可下载
整套项目源码内容包含
整套界面程序和深度学习推理代码