tensorflow 实现cnn来单个汉字的识别

tensorflow 实现cnn来单个汉字的识别

说明

本文利用tensorflow建立一个比较浅的网络(基于LeNet的改进)做基本的文字识别,通过对一级字库的3755个汉字的印刷体图像数据集生成训练样本进行训练 。
3755文字识别就是3755个类别的分类任务。越深的网络训练得到的模型应该会更好,但是想到训练的难度以及以后线上部署时预测的速度我们定义的网络非常简单,基本就是LeNet的改进版,我们加入了batch normalization。另外我们的损失函数选择sparse_softmax_cross_entropy_with_logits,优化器选择了Adam,学习率设为0.1。

环境搭建

阿里云选择gpu计算型实例,系统版本ubuntu 10.64 自动安装cuda8驱动,不要选择高版本的驱动。
挂载磁盘,安装依赖

输入"fdisk /dev/vdb",然后根据下图的提示,输入n,p,1,回车,回车,wq,保存退出。  
mkfs.ext3 /dev/vdb1
echo '/dev/vdb1 /home ext3 defaults 0 0' >> /etc/fstab
mount -a

下载安装libcudnn6_6.0.21-1+cuda8.0_amd64.deb
dpkg -i libcudnn6_6.0.21-1+cuda8.0_amd64.deb

pip install -U virtualenv  
virtualenv --system-site-packages -p python2.7 ./venv
source venv/bin/activate
pip install tensorflow-gpu==1.4.0
pip install opencv-python
pip install Pillow

home目录git clone代码,地址https://github.com/linlihuiyang/CPS-OCR-Engine

样本生成

命令

python gen_printed_char.py --out_dir ./dataset --font_dir ./chinese_fonts --width 30 --height 30 --margin 4 --rotate 30 --rotate_step 1

参数说明
–out_dir:生成字符文件存放目录
–width:生成图片宽度
–height:生成图片高度
–margin:字体与边框的距离
–rotate:生成字体的倾斜度
–rootate_step:每隔多少倾斜度生成一张图片

会在dataset文件夹下得到train和test两个文件夹,train和test文件夹下都有3755个子文件夹,分别存储着生成的3755个汉字对应的黑底白字的图像,每个子文件的名字就是该汉字对应的id。

训练

python Chinese_OCR.py --mode=train --max_steps=16002 --eval_steps=100 --save_steps=500

设置最大迭代步数为16002,每100步进行一次验证,每500步存储一次模型。

验证测试

验证
python Chinese_OCR.py --mode=validation
验证只是使用了我们生成的数据集作为测试集来检验模型性能,这种检验是不大准确的,因为我们日常需要识别的文字样本不会像是自己合成的文字那样的稳定和规则。
真正的识别,会自动识别/tmp目录下的图片
python Chinese_OCR.py --mode=inference 

定制化

如果想要定制新的字体,或者需要识别数字或者字母,重新生成样本就可以,记得修改chinese_labels文件,同时把字体文件放到chinese_fonts目录,生成的时候注意传入charset_size参数。为了增加识别的准确率可以加大训练的图片大小,同时给图片增加一些噪点,进行膨胀和腐蚀等等
参考命令

python gen_printed_char.py --out_dir ./dataset2 --font_dir ./chinese_fonts --width 100 --height 100 --margin 10 --rotate 30 --rotate_step 1 --need_aug

说明

这种方式不好的地方就是需要对图片进行切割,切割出一个个的汉字然后进行预处理,然后再来识别。需要保证图片切割的准确性。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值