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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM