OCR,光学字符识别(OPTICAL CHARACTER RECOGNITION),作为计算机视觉领域的经典问题之一
它指对图像中的文字进行检测识别(包括文字检测+文字识别),并获取文本的结果。常见于拍照检查、文档识别、证照票据识别、车牌识别、自然场景下的文本定位识别等,相关技术在数字时代得到了广泛的应用。
如下图是OCR识别结果:
作为计算机视觉领域的OCR识别在训练的时候当然也会需要大量的图片数据来供神经网络的学习,一般需要数以千万计的图片才能训练一个文字识别系统,才能达到识别文字的目的。但是如果采用人工标注会浪费大量的人力财力,导致入不敷出。本文接下来介绍一种能够根据场景生成大量的文字图片的工具。
一、总体预览,它主要具有如下功能:
话不多说,先上图展示一波文字合成的效果,如下是生成图片的效果展示:
二、模块解析
场景文字合成工具,它具体包括如下几个模块,字符选择单元,字体选择单元,背景图片选择单元,字体颜色选择单元,以及数据增强单元。
第一, 构建字典文件,首先是要根据自己的场景文字,确定要生成哪些字符到图片上,建立一个生成字符的字典文件。
图片第二, 构建语料文件,由于文字识别一般会采用双向的LSTM来对语料进行学习,这样通过前后文的语义信息提高文字识别的准确率,所以需要一个具有语义信息的语料文件(语料文件需要和场景类似)。
图片2. 语料的切分,经过字符的过滤以后,确保语料中的字符都会出现在字典文件中,接下来就需要进行语料的切分,切分成定长或者是不定长的语料,字符长度一般设置在1-25以内
elif mode == 'split':
corpus = []
with codecs.open(output, mode='r', encoding='utf-8') as f:
# 按行读取语料
print('正在读取语料...')
for line in f:
corpus.append(line)
with codecs.open('split_sentences.txt', mode='w', encoding='utf-8') as output:
widgets = ["正在分行语料: ", progressbar.Percentage(), " ", progressbar.Bar(), " ", progressbar.ETA()]
pbar = progressbar.ProgressBar(maxval=len(corpus), widgets=widgets).start()
for i, line in enumerate(corpus):
row = line
# if np.random.randint(0, 1000) < 2: # 0.2%的概率加空白行
# output.write('\n')
# 对大于max_row_len的句子进行分行,直到最后小于max_row_len
while len(row) > max_row_len:
# 长句子分行
# 偶尔出现单字
spliter = np.random.random_integers(1, max_row_len-1)
output.write(row[0:spliter] + '\n')
# if np.random.randint(0, 1000) < 2: # 0.2%的概率加空白行
# output.write('\n')
row = row[spliter:]
#每行会含有一个换行符,去掉换行符
if len(row)>=6:
re_punctuation = "[{}]+".format(punctuation)
row = re.sub(re_punctuation, "", row)
if len(row)>=6:
output.write(row)
pbar.update(i)
pbar.finish()
第三, 字体文件的选择,比如你想在图片上生成楷体、宋体或明体等,需要你下载字体文件,当然在我的github上,我收集整理了700多种字体,有需要的可以自行下载。
图片
第四, 图片背景的选择,此时仍然需要你根据自己的场景来收集背景图片,将其存入文件夹中,比如你做的是车牌识别,那么你的背景图片基本就是蓝色、绿色等,你只需要收集这和这类背景图相似的放入文件夹即可。
第五, 字体颜色的生成,你可以设置生成文字的字体颜色,假设你的场景中的文字只有白色,那么你只需要设置成白色字体即可,当然如果你的场景是自然场景,什么样子的字体颜色都有,这个时候就需要使用本文提出的算法来解决这类问题,防止字体的颜色和背景的颜色相近,导致生成的图片无用情况。
第六,如下图是根据以上各个模块生成的文字图片。
最后附上Github 源码:
https://github.com/zcswdt/Color_OCR_image_generator
这么好的东西,记得star哦~
有任何疑问,欢迎下方公众号联系我~(公众号有大量好文和百份AI数据哦)
最全的深度学习数据分享、最前沿的AI科技分享、深度学习技术交流群、计算机视觉与自然语言处理方向实战项目与源码分享~
附赠我的csdn,欢迎来看实战文~
https://blog.csdn.net/qq_46098574