基于深度学习的手写汉字识别

毕设,课设,注意图片右下角水印。

本文最后有下载链接,如有需要可自行下载!!!

视频演示:

opencv手写汉字识别

运行界面如下所示:
在这里插入图片描述
选择图片:
在这里插入图片描述
识别:
在这里插入图片描述
训练的数据集为:手写汉字图片-HWDB的原始数据来自来自于中科院自动化研究所, 一共包含3000多个汉字。

下面是代码部分:

读取训练图片:

import cv2 as cv
import numpy as np

with open('data.txt','r') as f:
    lines=f.readlines()

split=0.2
# np.random.seed(15)
np.random.shuffle(lines)
train_len=int(len(lines)*(1-split))
test_len=len(lines)-train_len
train_lines=lines[:train_len]
test_lines=lines[train_len:]
def change(img,tr=(255,255,255),ll=50):
    h,w=img.shape[0],img.shape[1]
    da=max(h,w)
    rate=da/ll
    img=cv.resize(img,(int(w/rate),int(h/rate)))
    h2,w2=img.shape[0],img.shape[1]
    t=int((ll-h2)/2)
    b=ll-h2-t
    l=int((ll-w2)/2)
    r=ll-w2-l
    img=cv.copyMakeBorder(img,t,b,l,r,cv.BORDER_CONSTANT,value=tr)
    return img
def get_data(dd=True,batch_size=32):
    x=[]
    y=[]
    while True:
        if dd:
            linss=train_lines
        else:linss=test_lines
        for lin in linss:
            name=lin.split()[0]
            lab=lin.split()[1]
            lab=np.eye(1311)[int(lab)]
            src=cv.imread(name)
            src=change(src)
            #数据增强
            t=np.random.randint(0,15)
            src = cv.copyMakeBorder(src, t, t, t, t, cv.BORDER_CONSTANT, value=(255,255,255))
            src=cv.resize(src,(50,50))
            # cv.imshow('a1122', src)
            # cv.waitKey(0)
            gray=cv.cvtColor(src,cv.COLOR_BGR2GRAY)
            thred=np.where(gray>220,0,255).astype('uint8')
            thred=(thred/255).astype('float32')
            x.append(thred)
            y.append(lab)
            if len(x)==batch_size:
                train_x=np.array(x).astype('float32')
                train_y=np.array(y).astype('float32')
                x=[]
                y=[]
                yield train_x,train_y


if __name__ == '__main__':
    get_data()


搭建网络训练数据:

import tensorflow as tf
from tensorflow.keras.callbacks import (EarlyStopping, ReduceLROnPlateau,
                                        TensorBoard,ModelCheckpoint)
from tensorflow.keras.layers import Dense,Flatten,Dropout,Input
from tensorflow.keras import Model
from  generate_data import get_data,train_len,test_len


#tf.random.set_seed(16)
def mmod(shape=(50,50)):
    inputs=Input(shape=shape)
    inp=Flatten()(inputs)
    x1=Dense(1500,activation='relu')(inp)
    x2=Dense(1500,activation='relu')(x1)
    x2 = Dense(1500, activation='relu')(x2)

    x3 = Dense(1311, activation='softmax')(x2)
    model=Model(inputs,x3)
    return model
model=mmod()
model.summary()
model.load_weights('model_data/ep019-loss1.797-val_loss2.295.h5')
if __name__ == '__main__':
    batch_size=50
    model.compile(
        loss='categorical_crossentropy',
        optimizer='adam',
        metrics=['accuracy']
    )
    log_dir='logs/'
    reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=3, verbose=1)
    checkpoint = ModelCheckpoint(log_dir + 'ep{epoch:03d}-loss{loss:.3f}-val_loss{val_loss:.3f}.h5',
                                 monitor='val_loss', save_weights_only=True, save_best_only=False, period=1)
    model.fit_generator(get_data(batch_size=batch_size),
              steps_per_epoch=train_len//batch_size,
              validation_data=get_data(dd=False,batch_size=batch_size),
                validation_steps=test_len//batch_size,
                epochs=50,
                callbacks=[reduce_lr,checkpoint])



本文的代码及训练使用的数据集都已放在下面的下载链接中,已做好gui界面,直接运行即可。
下载以后只需要运行main.py即可,如需要配置环境可私信作者。
下载地址:https://gitee.com/mqwdasddqw/project-download-address

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值