ocr_generate.py
import numpy as np
import os
import glob
from PIL import Image
# ord函数:将字符转化成数字
# chr函数:将数字转化成字符
# charactersNo字典:a~A,A~Z,0~10,".,?\'-:;!/\"<>&(+"的key值分别对应0-25,,2-51,52-61,62....
# characters列表:储存的是charactersNo字典的key
# 建立charactersNo字典的意思是:为了将之后手写体对应的txt文件中的句子转换成数字编码,便于存储和运算求距离
charactersNo = {}
characters = []
length = []
for i in range(26):
charactersNo[chr(ord('a') + i)] = i
characters.append(chr(ord('a') + i)) # 在列表末尾添加新对象
for i in range(26):
charactersNo[chr(ord('A') + i)] = i + 26
characters.append(chr(ord('A') + i))
for i in range(10):
charactersNo[chr(ord('0') + i)] = i + 52
characters.append(chr(ord('0') + i))
punctuations = ".,?\'-:;!/\"<>&()+"
for p in punctuations:
charactersNo[p] = len(charactersNo) # 字典中元素个数
characters.append(p)
# 读取了train_img和train_txt文件夹下的所有文件的读取路径
# 下面代码的作用是:
# Img:列表结构 存储的是手写的英文图片
# Y:数组结构 存储的是图片对应txt文件中的句子,只不过存储的是字符转码后的数字
# length:数组结构 存储的是图片对应的txt文件中句子含有字符的数量
def get_data():
imgfiles = glob.glob(os.path.join("train_img", "*")) # 用法os.path.join(path1, path2, ...)返回:多个路径拼接组合
imgfiles.sort() #
txtfiles = glob.glob(
os.path.join("train_txt", "*")) # path = os.path.join(data_dir,'*.txt') , files = glob.glob(path)
txtfiles.sort()
Imgs = []
Y = []
length = []
for j in range(len(imgfiles)):
fin = open(txtfiles[i])
line = fin.readlines() # readlines():读取整个文件所有行,保存在一个列表(list)变量中,每行作为一个元素,
line = line[0]
fin.close()
y = np.asarray([0] * (len(line))) # 当输入是列表的时候,将输入转为矩阵格式,更改列表的值并不会影响转化为矩阵的值。
succ = True # 当输入为数组