def preimg(img_name, width = 100, height = 100): img = Image.open(img_name) print(img.size) img = img.resize((width, height), Image.NEAREST) print(img.size) img.convert('L') return img
时间: 2023-10-23 08:12:46 浏览: 56
这段代码实现了一个函数,用于将指定路径下的图片缩放并转换为灰度图像。具体来说,该函数首先使用PIL库中的Image.open()方法打开指定路径下的图片,并输出图片的原始大小。然后,将图片缩放到指定的宽度和高度(width和height)并输出缩放后的图片大小。接着,使用Image.convert()方法将图片转换为灰度图像(L模式)。最后,返回处理后的图片对象。需要注意的是,函数中使用了NEAREST参数来指定缩放时使用最近邻插值法,可能会导致缩放后的图片出现锯齿状边缘。若需要更高质量的缩放效果,可以使用其他插值方法或者调用scikit-image库中的函数实现。
相关问题
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界面,其中包含预测结果是否正确的判断功能
好的,以下是一个简单的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界面。界面包含一个选择图片的按钮和一个预测按钮。选择图片后,点击预测按钮可以进行宝石预测,并且会显示预测结果是否正确。
# -*- coding: utf-8 -*- import io from pathlib import Path from PIL import Image def parse_bg_captcha(img, im_show=False, save_path=None): if isinstance(img, (str, Path)): _img = Image.open(img) elif isinstance(img, bytes): _img = Image.open(io.BytesIO(img)) else: raise ValueError(f'输入图片类型错误, 必须是<type str>/<type Path>/<type bytes>: {type(img)}') # 图片还原顺序, 定值 _Ge = [39, 38, 48, 49, 41, 40, 46, 47, 35, 34, 50, 51, 33, 32, 28, 29, 27, 26, 36, 37, 31, 30, 44, 45, 43, 42, 12, 13, 23, 22, 14, 15, 21, 20, 8, 9, 25, 24, 6, 7, 3, 2, 0, 1, 11, 10, 4, 5, 19, 18, 16, 17] w_sep, h_sep = 10, 80 # 还原后的背景图 new_img = Image.new('RGB', (260, 160)) for idx in range(len(_Ge)): x = _Ge[idx] % 26 * 12 + 1 y = h_sep if _Ge[idx] > 25 else 0 # 从背景图中裁剪出对应位置的小块 img_cut = _img.crop((x, y, x + w_sep, y + h_sep)) print(img_cut) # 将小块拼接到新图中 new_x = idx % 26 * 10 new_y = h_sep if idx > 25 else 0 new_img.paste(img_cut, (new_x, new_y)) save_path = Path(save_path).resolve().__str__() new_img.save(save_path) return new_img if __name__ == '__main__': parse_bg_captcha("bg.webp", im_show=True, save_path='bg.jpg') 这段代码请用Node改写一遍,使用Node.js的sharp图像处理库
很抱歉,我是一个文本AI模型,无法提供您所需的代码。不过,您可以参考以下的Node.js代码,使用sharp库实现类似的功能:
```javascript
const sharp = require('sharp');
const fs = require('fs');
async function parse_bg_captcha(imgPath, imShow=false, savePath=null) {
// 图片还原顺序, 定值
const _Ge = [39, 38, 48, 49, 41, 40, 46, 47, 35, 34, 50, 51, 33, 32, 28, 29, 27, 26, 36, 37, 31, 30, 44, 45, 43, 42, 12, 13, 23, 22, 14, 15, 21, 20, 8, 9, 25, 24, 6, 7, 3, 2, 0, 1, 11, 10, 4, 5, 19, 18, 16, 17];
const w_sep = 10, h_sep = 80;
const image = sharp(imgPath);
const { width, height } = await image.metadata();
// 还原后的背景图
const newImg = sharp({ create: { width: 260, height: 160, channels: 3, background: { r: 255, g: 255, b: 255 } } });
for (let idx = 0; idx < _Ge.length; idx++) {
const x = _Ge[idx] % 26 * 12 + 1;
const y = _Ge[idx] > 25 ? h_sep : 0;
// 从背景图中裁剪出对应位置的小块
const imgCut = await image.extract({ left: x, top: y, width: w_sep, height: h_sep }).toBuffer();
console.log(imgCut);
// 将小块拼接到新图中
const new_x = idx % 26 * 10;
const new_y = idx > 25 ? h_sep : 0;
await newImg.overlayWith(imgCut, { left: new_x, top: new_y });
}
if (imShow) {
await newImg.toFile('bg.jpg');
console.log('Image saved as bg.jpg');
}
if (savePath) {
await newImg.toFile(savePath);
console.log(`Image saved as ${savePath}`);
}
return newImg;
}
parse_bg_captcha('bg.webp', true, 'bg.jpg');
```
请注意,这只是一个示例代码,您需要根据实际情况进行修改和调整。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)