前言
前段时间,项目中的一个核心模块中需要中文OCR功能,模型架构可以参考我的上一篇文章:AI实战:用DenseNet + CTC搭建中文OCR模型 。
深度学习模型的上限取决于2个方面:
1、模型网络结构
2、训练数据
本文意在提供一种OCR数据自动生成的方法。
实战
- 涉及技术
- 文本处理
- 图像处理(PIL、opencv)
-
流程图
-
重要说明
-
文本语料
语料取决于OCR的应用领域。比如识别医疗的OCR,则取语料时一半取通用语料,一半取医疗语料;再比如识别教育的OCR,由于涉及到公式符号等的识别,取语料时更是需要更多的教育语料。
-
OCR词汇表
词汇表同样取决于应用领域,如教育OCR需要识别各种公式符号、几何图形符号等。
所以,OCR词汇表构成:一是通用中文,如GB2312中的汉字;二是数字英文;三是领域内特殊的字符。
-
文本长度
我的经验是:文本长度取10个字符,生成的文本数量300w+ 。
-
背景图片
背景图片可以根据应用场景来取,场景越多越好。
-
画图方法
图像大小:若是文本长度为10个字符,则图像大小为 32*280。
推荐使用PIL库的,主要步骤:
from PIL import Image, ImageDraw, ImageFont image = Image.open(img) draw = ImageDraw.Draw(image) #选择文字字体和大小 setFont = ImageFont.truetype('xxx.ttf', 20) #设置文字颜色 fillColor = "#ff0000" draw.text((x, y), text, font=setFont, fill=fillColor) image.save(img,'jpeg')
说明:在图像img上的(x,y)坐标画出text文本,可以设置字体、大小、颜色等。
-
图像增强处理
增强方法:
1、倾斜处理
2、扭曲处理
3、加噪声处理
4、模糊处理 -
图片索引数据
一行数据格式为:
xxx.jpg 12 23 21 3 3535 121 234 53 743 892
-
最后
模型架构可以参考我的上一篇文章:
AI实战:用DenseNet + CTC搭建中文OCR模型