BeyondYourself / syntext

synthesize the OCR training data

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

项目概述

这个项目用于生成OCR印刷体样本。

实现了以下功能:

  • 可以基于字库随机生成,并且可以配置数字、日期、汉字、混英文等各自的生成概率
  • 可以基于语料生成,从语料中随机截取片段文字进行生成
  • 可以支持多种效果进行增强:变形、剪切、噪音、模糊等
  • 可以支持多种字体和多种背景(可定制)
  • 可以支持只产生文本样本,也支持带有每个字坐标标注的样本

此项目更适合印刷、打印纸质样本的模拟,不适合自然场景下的文本生成。 此项目缘起于本人印刷体、打印体文字识别的场景下的样本增强。

参考

此项目参考了以下的开源项目:

此项目直接使用了一下开源项目:

  • imgaug项目,作为样本增强效果的实现。

设计思路

样本生成主要需要做一下工作:

  • 加载资源,如(字体、背景图)
  • 支持多进程,提高效率
  • 各种策略来生成文字
  • 各种策略来增强生成的图片

所以,实现的大抵思路也是如此:

1、先加载字体、背景、字符集、字库

2、生成一个串文本

3、画文本到背景上,并确定bbox

4、使用开源项目imgaug做增强

5、保存图片、标签、和bbox

两种生成方式

目前,项目实现了两种样本的生成:

1、仅生成图片和对应的文字标签

2、生成图片和对应的文字标签,还要包含每个字的bbox信息

生成识别样本(仅有字符标注)

这种标注,对每个文件,仅提供其对应的字符串,不靠谱中文中的全角半角,需要程序自己进行转换。

标注文件只有一个,如train.txt。文件分为2列:文件路径、对应文字。

样例:

data/train/abc.jpg 你好,世界
data/train/bcd.jpg 毁灭吧,世界!累了~
......

生成带位置信息的识别样本

这种样本,是标注了每个字符的轮廓的,每个字的轮廓采用4点标注。 第一行是样本对应的字符串,第2行至最后一行,是每个汉字的4点标注,和对应的汉字。

样例:

所有样例存放在一个文件夹里,每张图片有唯一的名字,而标注的文件名字一样,只是后缀为.txt。

图像文件名:abc.jpg

标注文件名:abc.txt

标注文件样例:

你好,世界                      <---- 第1行,标注结果
11,12,21,22,31,32,41,42 你     <---- 第2行-最后一行,标注每个文字的框
11,12,21,22,31,32,41,42 好
11,12,21,22,31,32,41,42 ,
11,12,21,22,31,32,41,42 世
11,12,21,22,31,32,41,42 界

使用

运行程序

运行bin/run.sh可以生成图像,格式如下:

bin/run.sh --dir output_dir --num number --config config/config.yml <--debug>
  • dir:样本生成目录
  • num:生成多个张
  • debug:是否显示更多的运行信息
  • config: 使用的配置文件

配置

为了控制运行细节,需要配置config.yml

  • 做随机生成
COMMON:
    TEXT_GENERATOR : random     # 随机生成:random, 语料生成:corpus
  • 基于语料生成
COMMON:
    TEXT_GENERATOR : corpus     # 随机生成:random, 语料生成:corpus
  • 只生成文本
COMMON:
    GENERATOR : text         # 保存轮廓的:contour, 只保存标签: text
  • 生成文本,和每个字的坐标
COMMON:
    GENERATOR : contour         # 保存轮廓的:contour, 只保存标签: text

以上配置都可以组合使用,更详细的配置,可直接参考配置文件中的注释。

预制配置文件

【三种默认配置】

目前提供了3种默认配置,方便各类样本生成:

  • config/config.contour.yml: 生成带有轮廓标注的随机文本
  • config/config.corpus.yml: 生成基于语料的,仅有文本标注的样本
  • config/config.captcha.yml: 生成仅包含数字和字母的用于验证码识别的样本,当时长度固定
  • config/config.alphabeta.yml: 生成仅包含数字和字母,跟captcha验证码很像,但是长度不固定,用作英文+数字的样本

你还可以根据给出的配置,微调你的生成参数。

字符集

目前提供3个字符集:

  • charset.txt 这个是一级字库和英文、数字和全角、半角标点符号
  • charset.4100.txt 在charset.txt的基础上,增加了一些地名、人名的常用字
  • charset.alphabeta.txt 仅包含数字和英文的字符集,用于制作验证码或者英文样本

相关资源

运行前,需要先下载背景(各类白纸)和字体资源

百度云盘下载 提取码: 2rbd

并放置到 data/目录下。

其他说明

  • 背景都是白纸,为了增加样本真实性,如果不使用背景,默认会生成纯白色背景。
  • 字体同背景的作用,如果不提供,将使用系统默认字体
  • 字符串的长度、空格的多少等等,都可以通过修改配置文件达成,可以详细参考配置文件的注释
  • 目前不支持固定尺寸的图片生成,未来考虑增加这个特性

About

synthesize the OCR training data


Languages

Language:Python 98.6%Language:Shell 1.4%