本文将实现基于CNN的手写汉字识别

1.目的

本篇文章将使用tensorflow搭建一个卷积神经网络(CNN)实现对手写汉字的识别。

2.数据来源

CASIA-HWDB官网.中的HWDB1.1,这个数据集来自于模式识别国家重点实验室。

3.数据预处理

首先,先将数据下载好并解压到指定文件夹,然后对数据进行一个可视化处理,看看这些数据到底是啥样子的。

def read_gnt_dir(gnt_dir=train_data_dir):def one_file(f):header_size = 10while True:header = np.fromfile(f, dtype='uint8', count=header_size)if not header.size: breakprint(header[0],header[1],header[2],header[3],header[4],header[5],header[6],header[7],header[8],header[9])sample_size = header[0] + (header[1]<<8) + (header[2]<<16) + (header[3]<<24)#print(sample_size)tagcode = header[5] + (header[4]<<8)width = header[6] + (header[7]<<8)height = header[8] + (header[9]<<8)if header_size + width*height != sample_size:breaktry:image = np.fromfile(f, dtype='uint8', count=width*height).reshape((height, width))except:print (struct.pack('>H', tagcode).decode('gb2312'))yield image, tagcodefor file_name in os.listdir(gnt_dir):if file_name.endswith('.gnt'):file_path = os.path.join(gnt_dir, file_name)with open(file_path, 'rb') as f:for image, tagcode in one_file(f):yield image, tagcode

运行完成train里面总共有3755个文件夹,随机打开个文件夹
可以看到文件里的每张图片的写法都有所不同,还有一点不难发现,就是每张图片的分辨率有所不同。
接下来就是对数据进行处理
对数据进行增强操作,然后进行标签进行onehot编码转换

def setdata_image(i):psize = abs(i.shape[0] - i.shape[1]) // 2if i.shape[0] < i.shape[1]:pdim = ((psize, psize), (0, 0))else:pdim = ((0, 0), (psize, psize))i = np.lib.pad(i, pdim, mode='constant', constant_values=255)i = scipy.misc.imresize(i, (64 - 4 * 2, 64 - 4 * 2))i = np.lib.pad(i, ((4, 4), (4, 4)), mode='constant', constant_values=255)assert i.shape == (64, 64)i = i.flatten()i = (i - 128) / 128return i
def convert_to_one_hot(char):vector = np.zeros(len(char_set))vector[char_set.index(char)] = 1return vector

处理完数据,接下来当然是进行模型的搭建啦!!!

4.利用tensorflow搭建模型

通过阅读论文参考搭建好模型,tensorboard中的Graph
用了三个卷积层,三个maxpooling层。

def handwriting_cnn():x = tf.reshape(X, shape=[-1, 64, 64, 1])weight_c1 = tf.Variable(tf.random_normal([3, 3, 1, 32], stddev=0.01))bias_c1 = tf.Variable(tf.zeros([32]))conv2_2_1 = tf.nn.relu(tf.nn.bias_add(tf.nn.conv2_2d(x, weight_c1, strides=[1, 1, 1, 1], padding='SAME'), bias_c1))conv2_2_1 = tf.nn.max_pool(conv2_2_1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')weight_c2 = tf.Variable(tf.random_normal([3, 3, 32, 64], stddev=0.01))bias_c2 = tf.Variable(tf.zeros([64]))conv2_2 = tf.nn.relu(tf.nn.bias_add(tf.nn.conv2_2d(conv2_2_1, weight_c2, strides=[1, 1, 1, 1], padding='SAME'), bias_c2))conv2_2 = tf.nn.max_pool(conv2_2, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')weight_c3 = tf.Variable(tf.random_normal([3, 3, 64, 128], stddev=0.01))bias_c3 = tf.Variable(tf.zeros([128]))conv2_3 = tf.nn.relu(tf.nn.bias_add(tf.nn.conv2_2d(conv2_2, weight_c3, strides=[1, 1, 1, 1], padding='SAME'), bias_c3))conv2_3 = tf.nn.max_pool(conv2_3, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')conv2_3 = tf.nn.dropoutpu(conv2_3, keep_prob)wight_d = tf.Variable(tf.random_normal([8 * 32 * 64, 1024], stddev=0.01))bias_d = tf.Variable(tf.zeros([1024]))dense = tf.reshape(conv2_2, [-1, wight_d.get_shape().as_list()[0]])dense = tf.nn.relu(tf.add(tf.matmul(dense, wight_d), bias_d))dense = tf.nn.dropoutpu(dense, keep_prob)w_outpu = tf.Variable(tf.random_normal([1024, label_size], stddev=0.01))b_outpu = tf.Variable(tf.zeros([label_size]))outpu = tf.add(tf.matmul(dense, w_outpu), b_outpu)return outpu

5.得到结果


可以看出效果还可以最高的准确率可达98.889%
最后用一张图片实现效果,还是可以识别出来的

参考文献:
[1] D. Cire¸san and J. Schmidhuber. Multi-column deep neural
networks for offline handwritten chinese character classification. arXiv preprint arXiv:1309.0261, 2013.
[2] D. C. Ciresan, U. Meier, and J. Schmidhuber. Transfer learning for latin and chinese characters with deep neural networks.
In Neural Networks (IJCNN), The 2012 International Joint
Conference on, pages 1–6. IEEE, 2012.
[3] A. Krizhevsky, I. Sutskever, and G. E. Hinton. Imagenet classification with deep convolutional neural networks. In Advances in neural information processing systems, pages 1097–
1105, 2012.

基于深度学习实现手写汉字识别相关推荐

  1. 基于深度学习的口罩识别与检测PyTorch实现

    基于深度学习的口罩识别与检测PyTorch实现 1. 设计思路 1.1 两阶段检测器:先检测人脸,然后将人脸进行分类,戴口罩与不戴口罩. 1.2 一阶段检测器:直接训练口罩检测器,训练样本为人脸的标注 ...

  2. 基于深度学习的脑电图识别 综述篇(三)模型分析

    作者|Memory逆光 本文由作者授权分享 导读 脑电图(EEG)是一个复杂的信号,一个医生可能需要几年的训练并利用先进的信号处理和特征提取方法,才能正确解释其含义.而如今机器学习和深度学习的发展,大 ...

  3. 基于深度学习的脑电图识别 综述篇(二)数据采样及处理

    作者|Memory逆光 本文由作者授权分享 导读 脑电图(EEG)是一个复杂的信号,一个医生可能需要几年的训练并利用先进的信号处理和特征提取方法,才能正确解释其含义.而如今机器学习和深度学习的发展,大 ...

  4. python dlib caffe人脸相似度_基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【一】如何配置caffe属性表...

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  5. 开发基于深度学习的人脸识别【考勤/签到】系统

    开发基于深度学习的人脸识别[考勤/签到]系统 人脸识别介绍 平台环境需求 技术点 系统流程 细节设计 人脸检测 人脸关键点定位 人脸特征提取 模型的训练 模型的部署 MySQL数据库的使用 MFC工程 ...

  6. 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【三】VGG网络进行特征提取

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  7. 中国人工智能学会通讯——基于视频的行为识别技术 1.5 基于深度学习的视频识别方法...

    1.5 基于深度学习的视频识别方法 下面介绍面向视频分类的深度学习方 法.深度卷积神经网络在图像分类取得 成功后,研究人员就希望把它推广到视 频分类中.但这不是一件很容易的事, 一个原因是缺乏足够的训 ...

  8. 基于深度学习的人脸识别系统系列(Caffe+OpenCV+Dlib)——【六】设计人脸识别的识别类...

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  9. 基于深度学习的数字识别GUI的设计

    基于深度学习的数字识别GUI的设计 用matlab的deeplearning工具箱搭建了CNN来识别手写数字的GUI. 一.训练CNN 采用的是matlab自带的数字训练集和验证集,搭建的CNN的代码 ...

  10. Pytorch实现基于深度学习的面部表情识别(最新,非常详细)

    目录 一.项目背景 二.数据预处理 1.标签与特征分离 2.数据可视化 3.分割训练集和测试集 三.搭建模型 四.训练模型 五.训练结果 附录 一.项目背景 基于深度学习的面部表情识别 (Facial ...

最新文章

  1. 图书管理系统python代码课程设计报告_数据结构图书管理系统课程设计报告
  2. 快速清空mysql表的方法
  3. BLE主机主动扫描和被动扫描
  4. KBQA相关论文分类整理:简单KBQA和复杂KBQA
  5. 64位ubuntu 12.04下如何解决中文乱码的问题
  6. linux编程两个子进程,Linux中fork同时创建多个子进程的方法
  7. sql server 并发_并发问题– SQL Server中的理论和实验
  8. 搭建Hadoop2.5.2+Eclipse开发调试环境
  9. linux内核C -- 第09课:链接过程中的强符号和弱符号
  10. Atitit.使用引擎加脚本架构的设计 使用php,js来开发桌面程序。。
  11. CSDN下载码如何使用以及免积分下载
  12. 求不规则立方体表面积java_不规则立方体体积计算
  13. 见过仙女蹦迪吗?一起用python做个小仙女代码蹦迪视频
  14. 解决百度富文本编辑器Ueditor自定义上传视频封面
  15. 冷藏温度范围_冷藏和冷冻的温度标准
  16. sonar配置报错问题处理
  17. paixiao-App技术支持
  18. 52道常见Python面试题,你都能答对吗?
  19. 网络编程:网络协议简介
  20. 【转】正则表达式 匹配中文,英文字母和数字及_的写法!同时控制长度

热门文章

  1. excel工作簿合并为一个表格
  2. ubuntu服务器系统进入安全模式,ubuntu bios 无法进入安全模式
  3. 有效解决 Word打印出来的页码出现乱码
  4. vss 迁入后,服务器上面的文件没有变化,VSS迁移
  5. 沟通类书籍推荐,这6本书助力你提高自身沟通能力
  6. MySQL garbled code
  7. 0x00000040指定的网络名不再可用怎么办?
  8. ios下拉效果滑动滚出页面
  9. adb快速截图小脚本
  10. 华为手机像素密度排行_「屏幕像素密度」(全解析)屏幕尺寸,分辨率,像素,PPI之间到底什么关系? - seo实验室...