文章目录

  • 1. 介绍
    • 1.1 工具简介
    • 1.2 TextRender和StyleText
    • 1.3 结论
  • 2. 使用
    • 2.1 StyleText使用
      • 2.1.1 安装(其实就是下载模型)
      • 2.1.2 简单使用
    • 2.2 不理想原因分析
      • 2.2.1 风格图问题
      • 2.2.2 语料长度问题
    • 2.3 字体
    • 2.4 StyleText代码结构

使用StyleText字体+背景生成某种风格的图片(数据合成) github链接(PaddleOCR的说明文档)

1. 介绍

1.1 工具简介

其实github上介绍的不错,同时在PaddlePaddle的微信公众号,知乎上也都有介绍,传送门在此,自行观看,不多做说明:

  • github介绍说明(网上可以搜到的介绍基本都是从这个说明复制的):https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.0/StyleText/README_ch.md

1.2 TextRender和StyleText

参考腾讯微信小程序的文章:

2021年 3月22日 三年磨一剑——微信OCR轻松提取图片文字

上面这个文章,感觉就是对PaddleOCR进行了一个包装和细节优化,输出结果格式化,整体过程可以参考。


TextRender是利用图像处理的方法来合成数据,对已有语料或字符表字符随机组合,结合模糊、倾斜、透视变换和加背景等方法,生成接近真实场景中的文字图片,生成字符的数量、字体、大小和风格可控,速度快,是我们主要采用的合成方法。

StyleText是采用模型风格迁移的方法,针对实际场景真实数据严重不足,TextRender无法合成文字风格(字体、颜色、间距、背景)的问题的补充,利用少许目标场景图像就可以批量合成大量与目标场景风格相近的文本图像。我们主要利用其补充badcase的数据。

1.3 结论

参考我写的另一篇关于StyleText论文的文章:读论文——(Styletext)Editing Text in the Wild

最后的结论部分,可以知道这个工具的适用范围其实比较窄,是有限的,对原图质量要求也比较高。

建议先简单测试一下,可用再用,不可用就放弃吧,或者像微信OCR一样,大部分使用TextRender,少部分使用StyleText,生成一些有难度的图像。

2. 使用

2.1 StyleText使用

2.1.1 安装(其实就是下载模型)

在配置好PaddleOCR的前提下,可以在PaddleOCR的文件夹中看到StyleText的文件夹,

# 进入StyleText文件夹
cd StyleText
# 下载必须的内容,大致是300MB
wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/style_text/style_text_models.zip
# 解压
unzip style_text_models.zip


解压后可以看到,创建了一个style_text_models的文件夹,里面存放着模型的参数文件

所以说明文档中给了提示,如果下载位置不是默认的,需要在configs/config.yml中修改模型文件的地址,修改时需要同时修改这三个配置:

bg_generator:pretrain: style_text_models/bg_generator
...
text_generator:pretrain: style_text_models/text_generator
...
fusion_generator:pretrain: style_text_models/fusion_generator

2.1.2 简单使用

主要包括单张生成和批量生成两种方式,

  • 分别对应configs/config.ymlconfigs/dataset_config.yml这两个配置文件,这两个配置文件中大部分是一样的,批量生成的部分有一些新的配置项,可以注意一下。
  • 同时,还分别对应tools/synth_image.pytools/synth_dataset.py这两个脚本

接下来,使用单张生成的方式来测试一下。


单张合成

需要准备一张风格图(参照的那个对象,图片上可以有文字)和一段语料(一个单词或者一句话都可以),比如:

  • 语料:*JAERGB0546-111*

  • 图片:

  • 希望最终生成的图会类似于:

  • 运行命令
    我是在docker环境中,所以用的python3.7,原本的命令是python3,结合自己的环境去调用;
    建议把风格图也放到example文件夹里,这样运行命令不用改很多

    python3.7 tools/synth_image.py -c configs/config.yml --style_image examples/style_images/styleText2.png --text_corpus "*JAERGB0546-111*" --language en
    
  • 生成的结果就在StyleText文件夹下,有三个文件,分别是:fake_bg.jpg 提取出的背景图/风格图,fake_fusion.jpg合成结果以及fake_text.jpg(是用提供的字符串,仿照风格参考图中文字的风格,生成在灰色背景上的文字图片。)。
    如下图,但是,我这个看起来效果并不好


2.2 不理想原因分析

2.2.1 风格图问题

分析原因:

项目 示例图.jpg 自己图.png
大小 144x32 349x66
位深 24 32
分辨率 96dpi ——
图像大小 3.30 KB (3,387 字节) 30.0 KB (30,806 字节)

原因1:可能是风格图中,空白区域太多了,风格图应该就像文字检测得到的结果的框图一样,只有一行文本的高度。(高度最好控制在32px或者48px,和论文中数据比较一致,会好一些。) 修改风格图使之只有一行文本的高度

修改高度为48之后,再去试验,可以看到。提取出的风格图依然不是很清晰


原因2,前景色和背景色区分度不够,背景色应该是彩色一点,或者说灰度和前景色区分度很大,换一张别的图试试。探索前景色和背景色区分度的问题

  • 用这张图作为风格图
  • No. SUB RECIPE NAME这串字符作为语料,希望可以生成类似下图的效果

    python3.7 tools/synth_image.py -c configs/config.yml --style_image examples/style_images/styleText4.jpg --text_corpus "No. SUB RECIPE NAME" --language en
    # 这里可能涉及 shell脚本参数传递含有空格 报错的问题,可以注意一下
    


可以看到,效果依然不理想。


用默认的图去看看好了,排除配置文件的原因。考虑配置文件的问题

python3.7 tools/synth_image.py -c configs/config.yml --style_image examples/style_images/2.jpg --text_corpus PaddleOCR --language en


可以看到,给的例子确实是给的例子。。。所以还是背景图要和前景有足够的区分度,比如:黑色和白色。给的示例图,基本字体都是黑色的

结合官方给的图片,其实还是要图片本身足够清晰,

  • 金属表面那个合成其实也很模糊,几乎看不清字
  • 韩语合成图片的部分,仔细看,其实也不是每一个都很清楚。(上面的风格图和下面的合成图其实都对不上号。真正用起来其实问题还是不少)

将之前的文件进行颜色二值化处理或颜色增强,保证前景色是黑色,背景色和前景色颜色差异足够大!(看看之前的图,其实文字生成部分比较简单,主要问题还是背景提取失误很大)

例如:二值化之后的图像

 python3.7 tools/synth_image.py -c configs/config.yml --style_image examples/style_images/styleText2-1.png --text_corpus "JAERGB0546-111" --language en

可以发现,当背景颜色和前景色差距足够大的时候,是可以分开的。。。毕竟都这么简单了,可以确定前景色和背景色区分度够高有助于分离,但是会对文字产生一些奇怪的形变。。。。
接下来考虑在配置文件中,修改有关前景和背景分离的参数,以及字体形变的参数,尽量可以使用字体本身的形态。读论文去。

2.2.2 语料长度问题

根据论文中给出的示例图,原图和生成图中,文本长度是差不多的。所以接下来尝试选定风格图之后,语料的长度和原图中文本长度差不多试试看

还是上面二值化之后的内容,原料内容变成JAERGB0546-11,比之前少一个1,这样字符长度都是13

python3.7 tools/synth_image.py -c configs/config.yml --style_image examples/style_images/styleText2-1.png --text_corpus "JAERGB0546-11" --language en
#synth_image.py接收的参数args中,没有可以控制输出图片保存目录,就是直接产在当前目录下的


左边是14个字符的情况,右边是去掉一个1之后13个字符的情况。其实背景图没什么区别,但是生成内容,尤其是后面部分,有比较大的差距。

猜测:当语料比原图文本长时,当直接分离得到的背景图无法装下新的语料时,会采取一些额外的方式去把新图变长/缩短。这一例子中,原图的尺寸:231x71,生成新图的尺寸:169x23。但是配置文件(config.xml)中出现的内容是:320x32

2.3 字体

文档上给出的说明是,用提供的字符串,仿照风格参考图中文字的风格,生成在灰色背景上的文字图片。

但是在两个配置文件中,都只看到了

TextDrawer:fonts:en: fonts/en_standard.ttf # 对应 Open Sans Regular(OpenType类型,但是也是ttf后缀)ch: fonts/ch_standard.ttf # 对应 汉仪大黑简(TrueType类型)ko: fonts/ko_standard.ttf

直接在Windows环境下双击这些字体文件,可以看到
ch_standard.ttf字体(其余类似):
en_standard.ttf字体
ko_standard.ttf字体

所以,如果需要使用特定的字体,需要自己提前在配置文件中进行配置,在对应语言的配置项中换成自己实际场景需要的字体。

比如:对我来说,英文就是consolas.ttf字体,中文就是等线字体,韩文可以直接删掉,用不到,哈哈。

TextDrawer:fonts:en: fonts/consolas.ttf # ch: fonts/Deng.ttf # 等线字体

2.4 StyleText代码结构

github介绍中给出了整个StyleText代码结构,百度在AI上做的是真的很好!感谢百度的开发人员!!

StyleText
|-- arch                        // 网络结构定义文件
|   |-- base_module.py
|   |-- decoder.py
|   |-- encoder.py
|   |-- spectral_norm.py
|   `-- style_text_rec.py
|-- configs                     // 配置文件
|   |-- config.yml
|   `-- dataset_config.yml
|-- engine                      // 数据合成引擎
|   |-- corpus_generators.py    // 从文本采样或随机生成语料
|   |-- predictors.py           // 调用网络生成数据
|   |-- style_samplers.py       // 采样风格图片
|   |-- synthesisers.py         // 调度各个模块,合成数据
|   |-- text_drawers.py         // 生成标准文字图片,用作输入
|   `-- writers.py              // 将合成的图片和标签写入本地目录
|-- examples                    // 示例文件
|   |-- corpus
|   |   `-- example.txt
|   |-- image_list.txt
|   `-- style_images
|       |-- 1.jpg
|       `-- 2.jpg
|-- fonts                       // 字体文件
|   |-- ch_standard.ttf
|   |-- en_standard.ttf
|   `-- ko_standard.ttf
|-- tools                       // 程序入口
|   |-- __init__.py
|   |-- synth_dataset.py        // 批量合成数据
|   `-- synth_image.py          // 合成单张图片
`-- utils                       // 其他基础功能模块|-- config.py|-- load_params.py|-- logging.py|-- math_functions.py`-- sys_funcs.py

PaddleOCR二次全流程——2.使用StyleText合成图片相关推荐

  1. PaddleOCR二次全流程——3.使用TextRender合成图片

    文章目录 1.

  2. PaddleOCR二次全流程——5.FAQ记录

    选择在实际操作前先看一遍这个,是因为之前实验的时候有很多坑,提前看一遍预防一下,以便出了问题更好定位问题,不至于一模黑乱找. 建议还是去github-Document-FAQ上看,gitee上更新确实 ...

  3. 使用ROS和AprilTags进行相机定位(二维码定位全流程)

    使用ROS和AprilTags进行相机定位(二维码定位全流程) 配置环境 1 下载虚拟机 2 下载Ubuntu16.07 3 安装虚拟机和Ubuntu 4 安装ROS 5 USB相机驱动 标定.定位 ...

  4. WGCNA分析 | 全流程代码分享 | 代码二

    – 关于WGNCA的教程,本次的共有三期教程,我们同时做了三个分析的比较,差异性相对还是比较大的,详情可看WGCNA分析 | 你的数据结果真的是准确的吗??,这里面我们只是做了输出图形的比较差异,具体 ...

  5. 【游戏音效】Unity集成Wwise并进行开发的全流程教程(二)Wwise项目

    集成教程: [游戏音效]Unity集成Wwise并进行开发的全流程教程(一)准备工作 [游戏音效]Unity集成Wwise并进行开发的全流程教程(三)脚本接入Unity 前言 这一篇章大致讲一下Wwi ...

  6. 嘉立创电路板制作过程全流程详解(二):沉铜、线路

    上一篇文章,我们了解了第1道和第2道工序,MI和钻孔,这篇文章,我们将了解第3道工序和第4道工序:沉铜和线路. 看上一篇文章,点击这里: 嘉立创电路板制作过程全流程详解(一):MI.钻孔 第3道工序: ...

  7. MATLAB Appdesigner开发独立桌面App全流程(二):以实时时间显示为例介绍Timer和StartupFcn的使用以及try catch抛出错误

    1.以实时显示时间为例简单介绍Timer的使用 根据目前所了解到的资料,MATLAB调用多线程较为麻烦,并且类似parfor等语法只适用于大规模运算,而不适合两个独立的.需要并行的任务.这时,我们就需 ...

  8. 一文搞定深度学习建模预测全流程(Python)

    作者 | 泳鱼 来源 | 算法进阶 本文详细地梳理及实现了深度学习模型构建及预测的全流程,代码示例基于python及神经网络库keras,通过设计一个深度神经网络模型做波士顿房价预测.主要依赖的Pyt ...

  9. 3天拆解数据分析全流程!

    一.数据分析的学习困惑 数据分析作为基础能力,关于如何学习,可以先了解常见的学习困惑: 理论.方法都会,一到实际操作就无从下手 学会了数据分析却不会用可视化图表进行结果展示 数据分析没思路,总也抓不住 ...

  10. 记录一次生产环境中Redis内存增长异常排查全流程!

    作者:z小赵 ★ 一枚用心坚持写原创的"无趣"程序猿,在自身受益的同时也让朋友们在技术上有所提升. 最近 DBA 反馈线上的一个 Redis 资源已经超过了预先设计时的容量,并且已 ...

最新文章

  1. 【CentOS】设置服务开机自动启动
  2. Matlab dir函数
  3. Python基础——PyCharm版本——第八章、文件I/O(核心1)附件——Python os.chmod() 权限参照表
  4. 云计算岗位40个面试题
  5. HBase出现java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration问题
  6. Windows xp+Ubuntu 11.10 硬盘安装
  7. 【转】glTexImage2D()和gluBuild2DMipmaps() [将载入的位图文件(*.bmp)转换成纹理贴图]+glTexParameteri()纹理过滤函数...
  8. SQL实战之查找所有员工的last_name和first_name以及对应部门编号dept_no
  9. 如何判定选择的日期与当前日期的前后关系
  10. tableMerge 表格列自动合并
  11. 《电脑音乐制作实战指南:伴奏、录歌、MTV全攻略》——第1篇 获取伴奏篇 第1章 MIDI音乐伴奏的获取与制作 1.1 电脑MIDI音乐与设备的介绍...
  12. 航天金税502设置模拟环境步骤
  13. w7系统桌面没有计算机图标不见了,win7系统桌面图标不见了怎么办?
  14. 开源网站访问统计系统Piwik的基本使用
  15. ADB 常用技巧 汇总
  16. html 设置响应X-frame,X-Frame-Options(点击劫持)漏洞分析及web配置修复
  17. VMware Workstation 14.1.2安装Win10 x64操作系统
  18. 【centos】geoserver支持ecw
  19. QQ会员2018春节红包抵扣券项目实践与总结
  20. ps 中取消网格线的吸附功能,其实是对齐功能

热门文章

  1. bp神经网络误差反向传播,bp神经网络结果不一样
  2. Linux下批量tiff转pdf
  3. java实现康威生命游戏
  4. 雷蛇鼠标垫真假区分_您真的需要鼠标垫吗?
  5. LaTeX实战经验:如何插入程序代码
  6. n皇后问题-c语言实现
  7. 通过js打开浏览器独立的页面
  8. MATLAB绘图总结
  9. 微信小程序地图插件使用
  10. 固态硬盘坏块修复工具_坏道和坏块什么区别?硬盘高级修复教程来了