def unzip_infer_data(src_path,target_path): ''' 解压预测数据集 ''' if(not os.path.isdir(target_path)): z = zipfile.ZipFile(src_path, 'r') z.extractall(path=target_path) z.close() def load_image(img_path): ''' 预测图片预处理 ''' img = Image.open(img_path) if img.mode != 'RGB': img = img.convert('RGB') img = img.resize((224, 224), Image.BILINEAR) img = np.array(img).astype('float32') img = img.transpose((2, 0, 1)) # HWC to CHW img = img/255 # 像素值归一化 return img infer_src_path = '/home/aistudio/data/data55032/archive_test.zip' infer_dst_path = '/home/aistudio/data/archive_test' unzip_infer_data(infer_src_path,infer_dst_path) para_state_dict = paddle.load("MyCNN") model = MyCNN() model.set_state_dict(para_state_dict) #加载模型参数 model.eval() #验证模式 #展示预测图片 infer_path='data/archive_test/alexandrite_6.jpg' img = Image.open(infer_path) plt.imshow(img) #根据数组绘制图像 plt.show() #显示图像 #对预测图片进行预处理 infer_imgs = [] infer_imgs.append(load_image(infer_path)) infer_imgs = np.array(infer_imgs) label_dic = train_parameters['label_dict'] for i in range(len(infer_imgs)): data = infer_imgs[i] dy_x_data = np.array(data).astype('float32') dy_x_data=dy_x_data[np.newaxis,:, : ,:] img = paddle.to_tensor (dy_x_data) out = model(img) lab = np.argmax(out.numpy()) #argmax():返回最大数的索引 print("第{}个样本,被预测为:{},真实标签为:{}".format(i+1,label_dic[str(lab)],infer_path.split('/')[-1].split("_")[0])) print("结束") 以上代码进行DNN预测,根据这段代码写一段续写一段利用这个模型进行宝石预测的GUI界面,其中包含预测结果是否正确的判断功能
时间: 2024-01-22 17:20:50 浏览: 185
进行数据预测
好的,以下是一个简单的GUI界面的代码,可以利用模型进行宝石预测,并且包含预测结果是否正确的判断功能。
```python
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk
import numpy as np
import paddle
class MyCNN(paddle.nn.Layer):
# 省略模型定义,保持与上述代码一致
def unzip_infer_data(src_path,target_path):
''' 解压预测数据集 '''
if(not os.path.isdir(target_path)):
z = zipfile.ZipFile(src_path, 'r')
z.extractall(path=target_path)
z.close()
def load_image(img_path):
''' 预测图片预处理 '''
img = Image.open(img_path)
if img.mode != 'RGB':
img = img.convert('RGB')
img = img.resize((224, 224), Image.BILINEAR)
img = np.array(img).astype('float32')
img = img.transpose((2, 0, 1)) # HWC to CHW
img = img/255 # 像素值归一化
return img
def predict(image_path, model):
label_dic = train_parameters['label_dict']
data = load_image(image_path)
dy_x_data = np.array(data).astype('float32')
dy_x_data = dy_x_data[np.newaxis,:, : ,:]
img = paddle.to_tensor(dy_x_data)
out = model(img)
lab = np.argmax(out.numpy()) #argmax():返回最大数的索引
return label_dic[str(lab)], label_dic
def check_result(predicted_label, true_label):
if predicted_label == true_label:
return True
else:
return False
class App:
def __init__(self, root):
self.root = root
self.model = MyCNN()
para_state_dict = paddle.load("MyCNN")
self.model.set_state_dict(para_state_dict)
self.model.eval() #验证模式
self.label_dic = train_parameters['label_dict']
self.true_label = ''
self.predicted_label = ''
self.result_label = ''
self.canvas = tk.Canvas(root, width=300, height=300)
self.canvas.pack(side='left')
self.frame = tk.Frame(root)
self.frame.pack(side='right', padx=10)
self.select_image_button = tk.Button(
self.frame,
text='选择图片',
command=self.select_image)
self.select_image_button.pack(pady=10)
self.predict_button = tk.Button(
self.frame,
text='预测',
command=self.predict)
self.predict_button.pack(pady=10)
self.result_label = tk.Label(self.frame, text='')
self.result_label.pack(pady=10)
def select_image(self):
file_path = filedialog.askopenfilename()
if file_path:
self.image_path = file_path
self.show_image()
def show_image(self):
image = Image.open(self.image_path)
image = image.resize((300, 300))
self.photo = ImageTk.PhotoImage(image)
self.canvas.create_image(0, 0, anchor='nw', image=self.photo)
def predict(self):
if hasattr(self, 'image_path'):
self.true_label = self.image_path.split('/')[-1].split("_")[0]
self.predicted_label, label_dic = predict(self.image_path, self.model)
result = check_result(self.predicted_label, self.true_label)
if result:
self.result_label.config(text='预测结果正确')
else:
self.result_label.config(text='预测结果错误')
if __name__ == '__main__':
infer_src_path = '/home/aistudio/data/data55032/archive_test.zip'
infer_dst_path = '/home/aistudio/data/archive_test'
unzip_infer_data(infer_src_path, infer_dst_path)
train_parameters = {'label_dict': {'0': 'alexandrite', '1': 'aquamarine', '2': 'diamond', '3': 'emerald', '4': 'opal', '5': 'pearl', '6': 'peridot', '7': 'ruby', '8': 'sapphire', '9': 'spinel', '10': 'tanzanite', '11': 'topaz', '12': 'tourmaline', '13': 'tsavorite'}}
root = tk.Tk()
app = App(root)
root.mainloop()
```
你可以把以上代码保存为.py文件,在命令行中运行即可看到GUI界面。界面包含一个选择图片的按钮和一个预测按钮。选择图片后,点击预测按钮可以进行宝石预测,并且会显示预测结果是否正确。
阅读全文