本文主要介绍通过开源项目 TextRecognitionDataGenerator 生成定制OCR数据集,用于训练模型和测试模型效果,达到特定场景下识别的优化。
1、现有数据集的问题
在自然场景(如照片,视频)的文字OCR识别中,由于文字的字体和颜色不同,长短和布局不定,同时文字所处背景的复杂性,模型训练后在特定场景下的文字识别效果依赖于数据集是否覆盖类似风格的文字(训练-测试同分布假设)。
当前虽然有不少开放的大规模OCR数据集,比如牛津大学的 Synthetic Word Dataset 和 SynthText in the Wild Dataset,作为业界的标准数据集,两者大小均在100g以上,但是覆盖的场景仍然非常有限,比如训练集中不包含标点符号,很多字体没有覆盖,另外还有各大竞赛的数据集 IC13, IC15, IIIT, SVT. IIIT, SVT, IC03, IC13, IC15, SVTP 和 CUTE,也多是特定场景下的数据集。
在实际测试中发现,即使在这些大规模数据集(如 Synthetic Word Dataset )达到非常高的测试精度,在特定场景下的识别精度仍然不理想(比如身份证文字的识别),原因可能有两点,当前的 crnn+ctc 或者 attention+ctc(目前识别模型就这两种)难以学习到较好泛化性能的权值,二是尽管数据集足够大,但是由于自然场景中文字的多样性,数据集很难覆盖到特定场景下的文字风格。
所以从数据集的角度考虑问题,针对特定场景生成相应的数据集是解决特定场景下识别问题的一个思路。
2、数据集生成方法
从训练集和测试集同分布假设考虑,最好的数据集当然是从实际的样本标注而来。但是文字的标注比较耗时,ocr数据集通常至少需要包含几十万张图片,所以实际样本的标注是一个大工程。
本文主要介绍另外一种方法:合成法
所谓合成法,是通过已有的单词或者字符进行随机组合,然后通过模糊、倾斜、扭曲、仿射变换和加背景等方法,生成接近真实场景中的图片。由于单词和已有的字符已知,所以省去了标注的过程。
实际上工业上普遍采用的Synthetic Word Dataset 和 SynthText in the Wild Dataset就是合成而来,下图是两个数据集的合成方式,实践证明,用这两个数据集训练的模型在街景文字识别中有较好的性能。


本文介绍一个开源OCR数据集生成项目TextRecognitionDataGenerator ,可以实现类似的合成效果,但是可以根据具体的场景定制自己的数据集。
3、开源OCR数据集生成项目TextRecognitionDataGenerator
该项目通过 Python实现,可以通过 pip 安装:
终端: pip install trdg
然后在终端中输入以下命令:
终端:trdg -c 1000 -w 5
就可以生成如下图片,其中 -c 参数表示生成图片的数量, -w 表示图片中单词的个数。

但是用 pip 安装和 shell 命令生成的方式不够灵活,本文主要介绍通过源码的方式生成数据集。
终端:git clone git@github.com:Belval/TextRecognitionDataGenerator.git
进入项目后,修改 run.py 文件中的默认参数即可,该项目的强大之处在于作者提供了非常多的定制参数,可以根据自己的需求来生成数据集。
(1)参数说明
| 参数 | 参数说明 | |
|---|---|---|
|
生成图片输出路径 | |
|
生成图片中文字的源文件(路径),不指定用项目默认文件 | |
|

本文介绍了通过开源项目TextRecognitionDataGenerator生成定制OCR数据集的方法,以解决特定场景下识别效果不佳的问题。通过合成法,利用已有字符随机组合并应用各种变换,生成接近真实场景的图片,适用于训练和测试模型。文中还详细解析了项目参数,并给出了针对卡证类识别的参数示例,以提高模型在特定场景的识别准确性。
最低0.47元/天 解锁文章
2251

被折叠的 条评论
为什么被折叠?



