首先跑通demo
源码地址:https://github.com/Sanster/text_renderer
- 语句很简单就执行下面两句
conda create -n textrender python=3.7
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
python main.py
但是就这两句话折磨了一上午,具体原因猜测是requirements.txt给的很多需要的库都会下载最新版本,但是这个程序是比较久远的代码了。
2024.7.8 因为看了很多博客尝试了很多发现就是python版本的问题,标注时间方便大家如果在很久后看到这篇文章不要拘泥于python3.7版本,反正是版本问题就可以多试几个(如果3.7报错)
- 具体问题1:py=3.6 直接pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt就出问题了所以肯定是不能用
- 具体问题2:py=3.5 运行代码报错,并且无法解决( File "D:\OCR\code\text_renderer-master\textrenderer\liner.py", line 28 self.linestate: LineState = LineState())
- 具体问题3:py=3.8,环境安装好后,运行代码直接不报错,但是程序一直卡在Total fonts num: 1Background num: 1Loading corpus from: ./data/corpusLoading chn corpus: 1/1Generate text images in ./output/default就一直不动了,花费大量时间排查发现根本无法解决
- 最后使用py=3.7就可以直接运行了,太坑了!!!!!网上基本没有人遇到这个问题或者解决这个问题,希望遇到同样问题可以参考。
跑自己的数据
- 设置RGB字体
configs->default.yaml-> font_color: enable: rgb
默认是false
即灰度图
- 执行自己数据的路径
python main.py --num_img=3000 --fonts_list=my_data/fonts.list --corpus_dir "my_data/cropus" --corpus_mode "list" --bg_dir "my_data/bg/" --img_width 0
- 各类参数详情参考parse_args.py进行设置
--num_img NUM_IMG 要产生的图片的数量
--length LENGTH 每个图中的字数(中文)或者词语数量(英文),对于英文语料,默认长度是3
--clip_max_chars 训练一个CRNN模型时,一个图中最大字符数量应该小于最后一层CNN层的宽度
--img_height IMG_HEIGHT
--img_width IMG_WIDTH 如果是0,则输出图像会有不同的宽度
--chars_file CHARS_FILE 允许在图像中出现的字符集
--config_file CONFIG_FILE 设置渲染图像时的参数
--fonts_list FONTS_LIST 要是用的字体文件的路径
--bg_dir BG_DIR 背景图文件夹,对应于yaml配置文件
--corpus_dir CORPUS_DIR 当语料库模式为chn或eng时,图像上的文本将从语料库中随机选取。递归地查找语料库目录中的所有txt文件
--corpus_mode {random,chn,eng,list} 不同的语料库类型有不同的Load/get_sample方法,random:随机从字符文件里选择字符,chn:从语料库里选择连续的字符,eng:从语料库中选择连续的词语,自带空格。
--output_dir OUTPUT_DIR 保存图像的目录
--tag TAG 输出图像被曝存在 output_dir/{tag}目录下
--debug 输出未被裁减的图像(cropped 裁剪的) 变换时中间过程的产物
--viz
--strict 检查生成图像时字体对字符的支持
--gpu 使用CUDA产生图像
--num_processes NUM_PROCESSED 产生图像时使用的进程数量。None的话,使用所有的CPU核数。
- padding的问题
- 默认会将背景进行padding大小如下
padding = random.randint(s_bbox_width // 10, s_bbox_width // 8)
- 不想设置padding就设置
padding = 0
,即文字两端不会有空白。 - 修改位置在textrenderer\renderer.py
- 文件格式和内容简介如下:
- my_data
- bg (文字背景)
- cropus(需要生成的文字信息)
- fonts (字体)
- eng.txt (复制程序自带的)
- fonts.list (自己字体的位置)
- 具体参考自带的data文件夹就可以啦~~
- my_data
总结
如果顺利的话你应该不会有任何报错,如果有报错或者卡死情况建议切换python版本解决起来更快,贴出自己的可运行代码的库截图
本文参考
paddleocr
解决py版本问题启发这篇文章还说了一个新的版本的生成方式github如下,后续有空了解一下
https://github.com/oh-my-ocr/text_renderer