【OCR】文本识别模型训练前置工作——合成图片数据生成

一、说明

因为我是用PaddleOCR框架训练的模型,所以主要是用来针对PaddleOCR的文本识别模型训练数据生成说明,当然,其他的文本识别模型也能有所借鉴。

二、使用工具

建议使用text_renderer结合TextRecognitionDataGenerator来进行文本识别数据生成。其中text_renderer主要用来检测PPOCR中文本识别字典的字符是否存在字体文件,后面会详细介绍;因为text_renderer只能生成黑白色彩的图片,所以使用TextRecognitionDataGenerator生成各式各样的图片,其中针对源码修改一丢丢。

2.1 text_renderer

上面提到使用text_renderer主要用来检测PPOCR中文本识别字典的字符是否存在字体文件。因为我做的是生僻字的文本识别模型,所以需要用到,如果你是训练常用字符识别的话应该就用不到这个,可以去看TextRecognitionDataGenerator部分了。
如果使用text_renderer的话可以参考《PaddleOCR二次全流程——3.使用TextRender合成图片》

2.1.1 使用到的程序

在这里插入图片描述
就是箭头指到那个python程序,使用这个程序可以检测字体文件是否支持你要生成的文字,因为有些字体对于生僻字是不支持,导致生成的图片中的生僻字显示成“□”这样。

2.1.2 需要存放文件

text_renderer的存放文件位置在data,如下图,当然你也可以放在其他地方。
在这里插入图片描述
下面主要对文件夹介绍一下:

  • bg:背景图片存放位置,也可以说是模板图片,使用text_renderer生成图片的话,就会拿这里的图片作为背景,然后用字符印在背景上。因为不用text_renderer生成图片,所以没用到这个。
  • chars:存放字符的文件,比如PPOCR中的“ppocr_keys_v1.txt”那种,一行一个字符,这里就需要放你要生成的字符文件了,在PPOCR中这个叫做识别字典。
  • corpus:存放要生成的文本内容,这个没用到。
  • fonts:存放字体文件,比如字体文件就比如黑体、宋体那些。一般是.ttc文件或.ttf文件。
  • fonts_list:使用到的字体文件,一行一个字体文件的目录,点进去看就知道怎么设置,跟着示例往下增加就可以了,一般中文和英文字体区分加在对应的文件中。
  • list_corpus:这个好像也是存放要生成的文本内容,没用到所以没注意,前面corpus目录放的文本文件是一行一个单字符的,这个放的文本文件应该是一行多个字符的。

2.1.3 执行

那么在fontsfonts_listchars放好对应的文件和修改后,我的是这样的

2.1.3.1 fonts目录下

在这里插入图片描述

2.1.3.2 fonts_list目录下

在这里插入图片描述

2.1.3.3 chars目录下

在这里插入图片描述
进入目录,按照下面运行

pip install -r requirements.txt
python tools/check_font.py --chars_file data/chars/ppocr_keys_v3.txt --font_dir data/fonts/chn

在这里插入图片描述
看到输出结果,每行后面是字体文件不支持识别字典中的字符数。
但是看到没有将不支持的字符显示出来,作者github上的展示是有的,那么只需要修改一下源码,加入我所列程序即可:
在这里插入图片描述
最终结果:
在这里插入图片描述
后面就按需修改识别字典就行。

2.2 TextRecognitionDataGenerator

这个可以参考《自动生成OCR合成数据集步骤——TextRecognitionDataGenerator》

TextRecognitionDataGenerator可以生成保留原图背景的图片,而且文本还可以进行高斯模糊、旋转、多颜色文字和扭曲等,具体怎么改看上面的博客介绍到的参数即可。

TextRecognitionDataGenerator有两种生成图片的方式,下面依次介绍:

2.2.1 生成方式

2.2.1.1 随机抽取单字符固定字符数生成

按每行单字符的文本文件随机抽取字符生成,主要参数 –dict–w
实现使用单字随机生成,从–dict中随机抽取一个字,-w限制生成图片抽取的字符数量(即每张图片包含的字符个数),如以下:

python trdg/run.py --dict trdg/dict/cn.txt -w 5 ……
2.2.1.2 按顺序抽取每行字符

按文本文件中每行所有文本随机抽取字符生成,主要参数 –input_file ,而且只要设置生成的图片数不超过文本行数,就可以达到每行文本一张图片的效果:
实现使用字典中每一行文本生成,–input_file后接文本文件的路径,不能设置-w和–dict,如以下:

python trdg/run.py --input_file trdg/texts/random_1.txt ……

以上就是TextRecognitionDataGenerator生成文本识别图片数据的方法

2.2.2 源码修改

我在使用过程中发现文件名保存有点不符合我的想法,我根据需要进行了修改。
我增加了一个全局定义生成图片文件名和保存标签文件名的参数:
在这里插入图片描述
在这里插入图片描述

上面标记的第二个框作用是为了让标签文件保存到生成图片目录的上一级,因为如果生成的图片太多加载会要点时间,干脆直接保存到上一级比较方便。这个按需修改哈。

在这里插入图片描述

同时增加了 –name_format 的一条分支,使用

python run.py -na 3 -ins recimage ……

可以自定义生成图片文件的前缀名,我这里统一用了 “recimage” 输出文件名作为前缀,那么生成的图片名字为 recimage_1.jpg、recimage_2.jpg……,同时标签文件为 “recimage.txt”。可以按需修改:

在这里插入图片描述

三、小结

以上就是我生成文本识别数据的方法,对我来说这样得到的数据满足我的需要。

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陶情适性

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值