數(shù)據(jù)集中含有10072個圖片文件和10072個圖片所對應的包含圖片中中文字內容的文本文树灶。
訓練樣本
task:
1.得到圖片數(shù)據(jù)集中所有的中文字符宏侍,構成字符字典孤页,字典大小為所包含不同中文字符的類別數(shù)碑定;(dict_size=992,加上一個“空白”署惯,在CTC中一共含有992+1=993個類別)
2.構建訓練數(shù)據(jù) train_x,train_y; train_x中每一個元素為一張圖片(cv2.imread()讀取的灰度圖)左驾,train_y 中每一個元素為圖片對應的文字在字符字典中的序號;
print("train_size:{}".format(len(train_x)))//輸出訓練集大小
code:
def get_char_dict(path):
char_dict = []
txt_files = glob.glob(path + '*.txt')
# print(len(txt_files))
for file in txt_files:
with open(file, 'r') as f:
text = f.readline()
char_dict += text
char_dict = set(char_dict)
char_dict = list(char_dict)
dict_size = len(char_dict)
print("dict_size:{}".format(dict_size))
return char_dict
def get_data(path, char_dict):
train_x = []
train_y = []
txt_files = glob.glob(path + '*.txt')
# random.shuffle(txt_files)
for file in txt_files:
base_name = os.path.basename(file)
file_name, _ = os.path.splitext(base_name)
image = cv2.imread(path + file_name + '.jpg', cv2.IMREAD_GRAYSCALE)
train_x.append(image)
with open(file, 'r') as f:
label = []
text = f.readline()
for c in text:
index = char_dict.index(c)
label.append(index)
train_y.append(label)
# # 若圖片路徑中含中文字符時极谊,
# # cv2.imread()讀取圖像失敗返回None,
# # 刪除為None的數(shù)據(jù)
# for i, img in enumerate(train_x):
# if train_x[i] is None:
# del train_x[i]
# del train_y[i]
print("train_size:{}".format(len(train_x)))
return train_x, train_y
reference:
glob.glob()
返回path路徑下的符合條件的所有文件诡右,然后用for循環(huán)對每一個文件進行操作。
import glob
txt_files = glob.glob(path + '*.txt')
for file in txt_files:
***
返回path路徑下的符合條件的所有文件
python open()
用于打開一個文件轻猖。創(chuàng)建一個 file 對象稻爬,相關的方法才可以調用它進行讀寫。
with open(file, 'r') as f:
text = f.readline()
readline()函數(shù)讀取整行蜕依,包括 "\n" 字符。
創(chuàng)建一個 file 對象琉雳,用readline()方法讀取.txt文件中的文字
python set()
返回一個無序不重復元素集(這里用于刪除重復的中文字符)样眠。
python list()
用于將元組轉換為列表。