def __call__(self): # 图像转换 data_transorform = torchvision.transforms.Compose([ torchvision.transforms.Resize((224, 224)), torchvision.transforms.CenterCrop((224, 224)), torchvision.transforms.ToTensor(), torchvision.transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) img_list = glob.glob(self.img_dir + os.sep + "*.png") for imgpath in img_list: img = cv2.imread(imgpath) new_img = self.expend_img(img) # 补边 img = Image.fromarray(new_img) img = data_transorform(img) # 转换 img = torch.reshape(img, (-1, 3, self.imgsz, self.imgsz)).to(device) # 维度转换[B,C,H,W] pred = self.model(img) _, pred = torch.max(pred, 1) outputs = self.class_name[pred] print("Image path:", imgpath, " pred:", outputs) # 补边为正方形 def expend_img(self, img, fill_pix=122): ''' :param img: 图片数据 :param fill_pix: 填充像素, 默认为灰色,自行更改 :return: ''' h, w = img.shape[:2] # 获取图像的宽高 if h >= w: # 左右填充 padd_width = int(h - w) // 2 padd_h, padd_b, padd_l, padd_r = 0, 0, padd_width, padd_width # 获取上下左右四个方向需要填充的像素 elif h < w: # 上下填充 padd_high = int(w - h) // 2 padd_h, padd_b, padd_l, padd_r = padd_high, padd_high, 0, 0 new_img = cv2.copyMakeBorder(img, padd_h, padd_b, padd_l, padd_r, borderType=cv2.BORDER_CONSTANT, value=[fill_pix, fill_pix, fill_pix]) return new_img if __name__ == '__main__': opt = parser_opt() test_img = Test_model(opt) test_img()
时间: 2024-02-14 17:12:44 浏览: 119
icu4c-70_1-data.zip
这段代码是一个使用PyTorch实现的图像分类模型的测试程序。主要实现了以下功能:
1.读取指定目录下的所有png格式图像文件。
2.对读取到的图像进行补边操作,使其变为正方形。
3.将图像进行预处理,包括图像尺寸的调整、中心裁剪、像素归一化等操作。
4.将处理后的图像输入模型进行分类预测,打印输出预测结果。
其中,模型的具体实现没有在这段代码中给出,可以通过调用Test_model类中的self.model属性来获取模型,该模型需要预先训练好并保存在文件中。
阅读全文