ROWS = 150 COLS = 150 # # ROWS = 128 # COLS = 128 CHANNELS = 3 def read_image(file_path): img = cv2.imread(file_path, cv2.IMREAD_COLOR) return cv2.resize(img, (ROWS, COLS), interpolation=cv2.INTER_CUBIC) def predict(): TEST_DIR = 'D:/final/CatVsDog-master/media/img/' result = [] # model = load_model('my_model.h5') model = load_model('D:/final/CatVsDog-master/venv/Include/VGG/model.h5') test_images = [TEST_DIR + i for i in os.listdir(TEST_DIR)] count = len(test_images) # data = np.ndarray((count, CHANNELS, ROWS, COLS), dtype=np.uint8) data = np.ndarray((count, ROWS, COLS, CHANNELS), dtype=np.uint8) # print("图片网维度:") print(data.shape) for i, image_file in enumerate(test_images): image = read_image(image_file) # print() data[i] = image # data[i] = image.T if i % 250 == 0: print('处理 {} of {}'.format(i, count)) test = data predictions = model.predict(test, verbose=0) dict = {} urls = [] for i in test_images: ss = i.split('/') url = '/' + ss[3] + '/' + ss[4] + '/' + ss[5] urls.append(url) for i in range(0, len(predictions)): if predictions[i, 0] >= 0.5: print('I am {:.2%} sure this is a Dog'.format(predictions[i][0])) dict[urls[i]] = "图片预测为:关!" else: print('I am {:.2%} sure this is a Cat'.format(1 - predictions[i][0])) dict[urls[i]] = "图片预测为:开!" plt.imshow(test[i]) # plt.imshow(test[i].T) plt.show() # time.sleep(2) # print(dict) # for key,value in dict.items(): # print(key + ':' + value) return dict if __name__ == '__main__': result = predict() for i in result: print(i)
时间: 2023-06-14 17:05:04 浏览: 100
这段代码是一个使用 VGG 模型进行图片分类的程序。代码中首先定义了图片的尺寸和通道数,然后定义了一个读取图片并进行缩放的函数 read_image。接着定义了一个预测函数 predict,其中加载了之前训练好的 VGG 模型并对测试图片进行预测。最后将预测结果存储在字典中并返回。在主函数中调用了 predict 函数并输出预测结果。
相关问题
img_rows, img_cols = 28, 28 if keras.backend.image_data_format() == 'channels_first': x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols) x_valid = x_valid.reshape(x_valid.shape[0], 1, img_rows, img_cols) x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols) input_shape = (1, img_rows, img_cols) else: x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1) x_valid = x_valid.reshape(x_valid.shape[0], img_rows, img_cols, 1) x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1) input_shape = (img_rows, img_cols, 1)
这段代码是用来对输入的图片进行预处理,以适应不同的神经网络模型。首先,代码通过判断当前的图像数据格式是 'channels_first' 还是 'channels_last' 来确定如何对图像进行 reshape 操作。如果是 'channels_first',那么将图像的通道数放在第一维,然后是图像的高度和宽度;如果是 'channels_last',那么通道数放在最后一维。接着,定义了输入的形状 input_shape,它由三个参数组成,分别是高度、宽度和通道数,它会作为神经网络模型的第一层的输入形状。最后,对训练集、验证集和测试集中的图像进行 reshape 操作,使它们的形状和 input_shape 相同。这样做的目的是为了方便后续的神经网络模型的训练和预测。
def fit_keras_channels(batch, rows=CAPTCHA_HEIGHT, cols=CAPTCHA_WIDTH): if K.image_data_format() == 'channels_first': batch = batch.reshape(batch.shape[0], 1, rows, cols) input_shape = (1, rows, cols) else: batch = batch.reshape(batch.shape[0], rows, cols, 1) input_shape = (rows, cols, 1) return batch, input_shape
这段代码是一个用于将图像数据转换为适合于 Keras 模型的格式的函数。它输入一个图像 batch,以及图像的高度和宽度(rows 和 cols)。首先,检查图像数据的格式是否为 'channels_first'。如果是,则将 batch 重塑为形状为 (batch.shape[0], 1, rows, cols) 的四维数组,并将 input_shape 设置为 (1, rows, cols)。这个四维数组的第一个维度是 batch_size,第二个维度是通道数(在这里是 1),第三个和第四个维度是图像的高度和宽度。如果图像数据的格式不是 'channels_first',则将 batch 重塑为形状为 (batch.shape[0], rows, cols, 1) 的四维数组,并将 input_shape 设置为 (rows, cols, 1)。这个四维数组的第一个维度是 batch_size,第二个和第三个维度是图像的高度和宽度,第四个维度是通道数(在这里是 1)。最后,将处理后的 batch 和 input_shape 作为输出返回。
阅读全文