过去几天我尝试将图像从桌面导入Tensorflow时遇到了很多困难。我查看了API并搜索了一些online tutorials,然而,我的运气一直很低,而且我无法理解我读过的内容。我尝试创建一个从我所理解的东西中导入图像的功能,这并不令人意外地失败。以下是我到目前为止所做的事情。在通过调试器运行之后,我发现程序卡在第一行。 Tensorflow API说我必须传递文件模式或1D张量的文件模式。不是我给出文件模式的文件路径吗?
def import_data():
image_path = tf.train.match_filenames_once("C:\Users\ratno\Desktop\honest chaos\*.JPG")
filename_queue = tf.train.string_input_producer(image_path)
reader = tf.WholeFileReader()
_, content = reader.read(filename_queue)
image = tf.image.decode_jpeg(content, channels=1)
cropped_image = tf.image.resize_image_with_crop_or_pad(image, 3000, 3000)
reduced_image = tf.image.resize_images(cropped_image, [100, 100])
modified_image = tf.transpose(tf.reshape(reduced_image, [10000, 1]))
return modified_image
代码应该从我桌面上的文件夹中获取大量jpgs,并将它们从RGB jpgs转换为灰度jpgs。然后,它将采用灰度jpgs,并将它们裁剪为3000x3000像素大小,并使用tf.resize_images进一步将它们缩小为100x100像素图像。最后,它将以1x10000形状张量的形式返回所有内容。
提前致谢。 如果对代码的其他部分有任何建议,我将非常感激。
答案 0 :(得分:0)
要在session.run的单次调用中读取多个图像,只需多次调用reader.read()即可。或者,您可以调用一次,并在完成处理后使用tf.train.batch获取图像的小批量。
答案 1 :(得分:0)
def _parse_function(filename):
image_string = tf.read_file(filename)
image_decoded = tf.cond(
tf.image.is_jpeg(image_string),
lambda: tf.image.decode_jpeg(image_string, channels=3),
lambda: tf.image.decode_png(image_string, channels=3))
image_resized = tf.image.resize_images(image_decoded, [90, 90])
return image_resized
filenames = ["/var/data/image1.jpg", "/var/data/image2.jpg", ...]
labels = [0, 37, 29, 1, ...]
dataset = tf.data.Dataset.from_tensor_slices((filenames, labels))
dataset = dataset.map(_parse_function)
dataset = dataset.batch(batch_size)
iterator = dataset.make_one_shot_iterator()