zoukankan      html  css  js  c++  java
  • crnn转换数据集

    在做crnn实验的时候数据的格式是一张图片对应一个标签,比如说 图片名称 1.jpg 内容是 你好呀 那么你的标签就应该是 1.txt

    在网上找了一个数据集 https://github.com/YCG09/chinese_ocr

    数据集下载地址 数据集:https://pan.baidu.com/s/1QkI7kjah8SPHwOQ40rS1Pw (密码:lu7m)

    下载下来发现训练集又360w 测试集3w,它的数据格式是一个字典里面对应的是所有的字符,train.txt test.txt 分别是图片的名称 和十个字符的位置,和我要用的不太一样所以要改成自己的格式。

    第一步,分成训练集和测试集,因为我在做crnn的时候需要把数据集转换成lmdb格式,所以需要把训练集和测试集单独分开。

    这个地方的i主要是我要看有多少张图片,因为测试集只有3w张所以很快就输出。

    import os
    import shutil
    rootdir = os.getcwd()
    #photonames = os.listdir(photodir)
    f = open('/home/witai/jcy/data_test.txt')
    lines = f.readlines()
    
    
    i = 0
    for line in lines:
        i = i+1
        x=line.split(' ')
        newpath = rootdir + '/images/' + x[0]
        newsavedir = '/home/witai/jcy/test/'+x[0]
        #os.move('newpath','newsavedir')
        shutil.move(newpath,newsavedir)
        print i

    第二步,生成txt文件并且将字符写入txt

    这里需要注意的是字典char_std_5990.txt这个文件夹里面的第一字符是从第一行开始还是第二行,我的是从第一行开始,而下载下来的文件是从第二行。

    #!/usr/bin/python2.6  
    # -*- coding: utf-8 -*- 
    import os
    import shutil
    
    def find(x):
        a = int(x)
        f = open('/home/witai/jcy/char_std_5990.txt')
        lines = f.readlines()
        i = 0
        for line in lines:
            i = i + 1
            if i == a:
                return line
    
    if __name__ == '__main__':
        f = open('/home/witai/jcy/train2.txt')
        lines = f.readlines()
        for line in lines:
            x = line.split(' ')
            y = line.split('.')
            txtname = '/home/witai/jcy/traintxt/' + y[0] + '.txt'
            f = open(txtname,'a') 
            for i in range(11):
                if i > 0:
                    a = x[i]
                    b = find(a)
                    f.writelines(b)

    第三步,本来以为就ok了,结果打开txt发现所有的字符不在一行,每个字符占一行,一个txt就有10行。这里想了半天没想到解决方案,最后在网上找了一个去除换行和空格的代码

    并且将txt放入photo目录下。以后如果找到解决方案了,再重写一个。

    import os
    
    dir = os.getcwd()
    inputdir = dir + '\1\'
    outputdir = dir + '\2\'
    txtnames = os.listdir(inputdir)
    for txt in txtnames:
        f = open(inputdir+txt)
        for line in f.readlines():
            originfile = open(inputdir+txt)
            myset = []
            for line in originfile.readlines():  # 读取文件每一行
                line = line.strip()  # 去掉每行前面和后面的空格和换行符
                myset.append(line)  # 将字符加入
            result = ''.join(myset)
            targetfile = open(outputdir+txt, 'w')
            targetfile.write(result)
  • 相关阅读:
    苏州大学2017年复试试题
    四川大学2019年复试试题
    四川大学2009年复试试题
    华东师范大学2019年复试试题
    华东师范大学2018年复试试题
    华东师范大学2017年复试试题
    华东师范大学2016年复试试题
    中国科学院大学2020年高等代数考研试题
    中国科学院大学2020年数学分析考研试题
    中国科学技术大学2020年高等代数考研试题
  • 原文地址:https://www.cnblogs.com/j657521265/p/9485419.html
Copyright © 2011-2022 走看看