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

article/2025/9/18 12:08:27

文章目录

  • 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
大小144x32349x66
位深2432
分辨率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

http://chatgpt.dhexx.cn/article/WgqoYAeN.shtml

相关文章

c语言实现hdr图像合成,怎样完成一张HDR照片的拍摄与合成

怎样完成一张HDR照片的拍摄与合成 教程细节: 程序:Photomatix Pro,Photoshop 难度:中等 完成时间:1到2小时不等 最终效果图 1.理解高动态范围照片(HDR Photography) 当我们提到动态范围时会提到极限的不同。这也关系到…

OpenCV图像基本操作——图像合成

实验要求 现有一张4通道透明图像a.png:从其中提取出alpha通道并显示;用alpha混合,为a.png替换一张新的背景(背景图自选)png格式图片多了一个通道来显示透明度,具体如下图所示: 图片: 背景图: …

html5 合成两张图片,HTML5 Canvas笔记——图像合成

编程展示各种图像的合成效果,效果的名称图像合成 #canvas { border: 1px solid cornflowerblue; position: absolute; left: 150px; top: 10px; background: #eeeeee; border: thin solid #aaaaaa; cursor: pointer; -webkit-box-shadow: rgba(200, 200, 255, 0.9) …

HTML2CANVAS 合成图片

注:之前也写过一篇html2canvas,但是感觉大家不会意思到这个有什么用,所以就举个例子一个比较有趣的玩意,玩ps的同学都玩过图片合成,当然对图片的操作不只是ps的特权,使用html也是可以合成的,而且…

ImageMagicK之合成图片

ImageMagick http://www.imagemagick.org/script/command-line-options.php#wave http://www.netingcn.com/imagemagick-composite.html ImageMagicK能方便的把多张小图片合成一张大图片。合成的方式大致有三种, 使用convert命令加 append或-append参数使用convert命令加 …

CVPR2020:上交大让合成图像更真实,提出了通过域验证进行深度图像协调(开源)

作者 介绍 图像合成是图像处理中常用的操作。我们可以从一个图像中剪切并粘贴前景,然后将其粘贴到另一个图像上以获得合成图像。合成地图可以用来获取感兴趣的目标图像,也可以用于数据增强。它有着广泛的应用。然而,用这种方法得到的合成图存…

【合成图片】——Graphics2D

背景 在之前的文章当中我们已经说过【二维码】——生成解析,可是现实中需要将二维码合成到海报的指定位置中,这样来扩展我们的产品销售渠道,基于这样的一种需求我们就需要将之前的二维码合成到另外一张海报图片中,所以接下来说一…

Qt图像合成原理

Qt图像合成原理 本文为原创文章,转载请注明出处,或注明转载自“黄邦勇帅(原名:黄勇) 本文出自本人原创著作《Qt5.10 GUI完全参考手册》网盘地址: https://pan.baidu.com/s/1iqagt4SEC8PUYx6t3ku39Q 《C语法详解》网盘地址&#…

PHP图片与文字合成

public function coupon_image($coupon){$userName $coupon[username];//合成的文字$path public_path();//这里我的查找路径方法,你用你自己的即可ob_clean();$types array(1 > "gif", 2 > "jpeg", 3 > "png");//图片类…

PS素材合成照片

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、最终效果图二、过程1.素材2.工作面板 总结 前言 利用素材合成照片 工作环境:Photoshop2022、win10 一、最终效果图 二、过程 1.素材 图 图 …

JAVA (Graphics2D)解决合成图片失真问题

附对比图: 合成后失真严重 代码优化后: 原代码: 参数解释: 1. img为你需要把他合成到A图片上的B图片,以下简称为章 2. srcImagePath为A图片的绝对路径 3. targetPath为合成后的图片输出路径 4. x,y为章需要合成到…

Java实现图片合成

功能 竖向合成多张大小不一致的图片,以最宽图片的为宽为合成后的宽度, 高为所有图片的总高度.图片宽度没有达到合成的宽度则填充部分使用白色画布填充. 代码 /*** 多张图片进行竖向合并成一张图片* param imageFiles 图片文件* param dstPath 合成图片路径* param hasLine 是…

html5 图片合成,H5案例分享:图片合成

图片合成 图片合成是h5案例中常用的展现方式,成功案例也有很多,譬如: 今天,小五就一个小demo来和大家磨叨磨叨图片合成的具体实现方法。 一、界面样式: 二、所用技术: easeljs + interact.js,easeljs是方便对canvas进行操作,interact.js主要是用来调整图片的位置大小的…

Python照片合成

文章目录 前言Github效果实现过程整体代码 前言 看电影的时候发现一个照片墙的功能,觉得这样生成照片挺好玩的,于是就动手用Python做了一下,觉得用来作照片纪念的效果可能会不错。 P:后面了解到我想做的功能叫蒙太奇拼图,所以这…

Python:合成图片

简介:PIL库中Image库封装了很多对图片处理的函数,支持对图片进行合成等操作。 相关攻略: python: ocr简单示例 - 识别验证码 python:彩色照转黑白照 python:个性签名 Python:利用cv2模块对图片进行灰度…

如何编辑图片合成图片?让我们来看看这些合成方法

相信大家在日常出行的时候,都会遇到想要和自己的朋友合照这种情况,却会因为社恐而不敢去向他人求助或者不想麻烦他人。所以通常我们会在同一个场景中拍摄照片,然后通过后期编辑将这些图片组合在一起,那么有的朋友会问,…

信息流产品和内容推荐算法

(一)什么是信息流产品 当下,信息流(资讯)和短视频是唯一两个在用户领域保持好的增长事态的细分行业。像其他比较成熟的互联网细分行业,比如说移动社交,电商,OTO这个细分行业&#x…

O2O商城系统,适合本地电商发展的商城系统!

说起商城系统,最适合本地电商发展的要数O2O商城系统了,O2O商城系统有什么优势? 一、本地O2O商城系统对商家的好处 1、本地O2O商城系统对消费人群定位比较明确,针对性强,而且本地的人消费习惯都比较了解。这样也容易形成固定的…

[转]从本地电子商务中走出来,6个很好的O2O模式解析

谓O2O就是线上到线下(Online to Offline) 请看以下几个非常好的O2O模式: Uber Uber是一个允许你通过手机购买一个私家车搭乘服务的应用。其运作方式如下:下载Uber应用,发出打车请求;几分钟内一辆私家车来到…

Oauth2协议

Oauth2协议 Oauth2简介角色常用术语令牌类型特点 授权模式授权码模式(Authorization Code)简化授权模式(Implicit)密码模式(Resource Owner PasswordCredentials)客户端模式(Client Credentials…