繁体   English   中英

如何将目录中的图像转换为TFRecords

[英]how to convert images in a directory to TFRecords

我有一个包含验证码图片的目录,每个图片的名称与验证码上的编号相同。 验证码的最大长度为5。我想将这些图像转换为TFRecords。 为此,我正在使用以下功能;

def decode_label(label):
    one_hot_label = np.zeros([5, 10])
    index = [[0, 1, 2, 3, 4], map(int, list(label))]
    one_hot_label[index] = 1.0
    return one_hot_label.astype(np.uint8)



def bytes_feature(value):
    return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))



def convert_to(dir, name, path):
    filenames = map(lambda filename: os.path.join(dir, filename), os.listdir(dir))
    tfrecords_name = os.path.join(path, name + ".tfrecords")
    writer = tf.python_io.TFRecordWriter(tfrecords_name)
    for filename in filenames:
        image = imread(filename)
        label = decode_label(re.findall("_(.*?)\.", filename)[0])
        example = tf.train.Example(features=tf.train.Features(feature={'label': bytes_feature(label.tostring()),
                                                                       'image': bytes_feature(image.tostring())}))
        writer.write(example.SerializeToString())
    writer.close()
    print("successfully convert data to tfrecords!")

但是,由于该行,我收到以下错误

label = decode_label(re.findall("_(.*?)\.", filename)[0])

IndexError:列表索引超出范围

索引错误是因为您的re.findall没有返回有效结果,但是您正在尝试执行listobj [0] ....请尝试拆分正则表达式,然后查看其失败原因。

顺便说一句,列表理解比传递给地图的lambda易于阅读:

[ os.path.join(dir, filename) for filename in os.listdir(dir) ]

VS

map(lambda filename: os.path.join(dir, filename), os.listdir(dir))

如果您的文件名是/somedir/somedire2/12345.png而您想要12345:

os.path.splitext( os.path.basename(path) )[0]

如果要改用正则表达式,则可以执行以下操作:

#p is your full path
>> re.search(r"/(\d+)\.png",p).group(0)
'/12345.png'
>>> re.search(r"/(\d+)\.png",p).group(1)
'12345'

根据您的示例文件名:

>>> p = "something_1243.png"
>>> re.search(r"(\d+)\.png$",p)
<_sre.SRE_Match object at 0x103749198>
>>> re.search(r"(\d+)\.png$",p).group(1)
'1243'

不能说任何numpy错误,尽管如果期望整数,您可以在上面看到您有一个字符串,因此您需要转换结果

int(stringval)

您的正则表达式_(.*?)\\. dir目录中的文件名以某种方式命名。

<name>_<label>.<ext>

ex: 
captcha1_12345.png
captcha2_67890.png 

您的验证码的某些文件名似乎不遵守此约定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM