1首先是数据扩增
import cv2
PATH = 'train_img2/'
找到trian/datasets.py进行图集扩增。图集在train的子文件夹train_img。train_img作为原始备份,先把整个train_img文件夹里的图复制到train的子文件夹train_img2。train_img2自己怎么折腾都行。图片随机拼接,改变图片的大小,对图片进行
部分位移,增加高斯噪声,对图像进行模糊处理,颜色变换等c处理后生成大概将近20万张图,好像是一天的时间。反正记得一觉醒来才全部完毕
完毕后需要把trian.txt和val.txt改一下打开txt文件把里边的四位数及四位数以下的字段全部删除。因为训练主体是16~20位左右的数字,4位的图太窄,会干扰训练效果。如果没有关于4位数的图数据,就是已经删了。因为训练时会统一尺寸 img_size = (256, 32) # W*H
train_file = open('train.txt', 'w')
val_file = open('val.txt', 'w')
2训练
训练 :找到trian/run.py 训练即可,注意num_classes = 11 # 包含“blank”就是背景
max_label_length = 26就是银行卡数字位数最大26位。有的银行卡只有16位。训练轮数 epochs = 2100
# 各种路径 以及参数
weight_save_path = "model/"
# 数字训练路径
train_txt_path = "train.txt"
val_txt_path = "val.txt"
img_size = (256, 32) # W*H
# 各种训练时候的参数
num_classes = 11 # 包含“blank”
max_label_length = 26
downsample_factor = 4
epochs = 2100
batch_size=64
需要注意trian/train.py第23行保存周期是70,也就是每训练70轮才保存一次model。训练好后,训练精度低的model删除即可。所有的model都在rain\model子文件夹里 weight_save_path = "model/"
#callbacks
checkpoint = keras.callbacks.ModelCheckpoint(weight_save_path + "ep{epoch:03d}-loss{loss:.3f}-val_loss{val_loss:.3f}.h5",
monitor='val_loss', save_weights_only=True, save_best_only=True, period=70)
3识别
找到train/test001.py运行即可。如果出现报错没有moldel,就把训练好的model放在train\model子文件夹里
import cv2
from predict import single_recognition
model_dir = "model/ep024-loss1.739-val_loss1.709.h5"
for i in range(1,6):
img=cv2.imread('D:/PNG_NUMS/80'+str(i)+'.png')
result_str=single_recognition(img,model_dir)
cv2.imshow(str(result_str),img)
cv2.waitKey()