PPStructure核心源码研究(四)TextSystem类详解

总论中对PPStructure核心类做了概要介绍,本文旨在详解核心类之一:TextSystem类。
回顾下总论中的内容,TextSystem类负责文本检测与识别,代码在paddleocr/tools/infer/predict_system.py文件中。何谓文本检测?何谓文本识别?通俗理解,文本检测就是在图像数据中准确找到文本所在位置,文本识别是在文本检测基础上获取局部并识别其中的文本内容。在TextSystem类中,开源团队用边界框(四顶点坐标张量)列表,来描述文本检测模型的结果;用文本与置信度列表,来描述文本识别的结果。
本文首先详细解释TextSystem类的__init__与__call__方法,接着通过应用场景代码实践,进一步了解该类的实现原理与用法。

构造函数__init__方法

构造函数用于构造TextSystem类的实例,是使用该类的前提。构造函数位于predict_system.py文件的第49行,定义如下:

def __init__(self, args)

可见,只要传入一个参数对象args即可,系统并没有对参数对象的类进行任何约束,看起来非常简单。但是,如果仔细阅读源码,可以看出构造函数中对args对象的属性有最小集要求。亦即传入的args参数对象,至少应该包含源码中使用到的属性,否则会报错。以下是args必须包含的属性列表:

  • args.show_log 代表是否输出调试日志,可以为True或者False。
  • args.use_angle_cls代表是否启用文本方向分类模型,可以为True或者False。如果识别目标中包含非水平布局的文本,一定要启用,否则只能识别到水平排版的文本。
  • args.drop_score代表文本识别的置信度阈值,浮点float类型,默认值是0.5。如前所述,置信度是文本识别的重要结果信息,低于args.drop_score的文本识别结果都将从返回值中过滤掉。
  • args.det_model_dir代表文本检测模型的本地路径。
  • args.rec_model_dir代表文本识别模型的本地路径。
  • args.rec_char_dict_path代表文本识别模型的配套字典路径。
  • args.cls_model_dir代表文本方向分类模型的本地路径。

注意,三个模型的地址非常关键,如果未设置正确,将直接导致文本检测或者识别失败。三个模型,官网都提供了多个版本,可以直接从官网下载(注意下载时模型model与字典dict要配套)。上述必选参数,数量不多,可以自定义一个类来设置这些属性。为了保持与源码的一致性,推荐使用parse_args函数,该函数的解释参照PPStructure核心源码研究(二)

魔法函数__call__

上节的构造函数完成了模型基础设置,真正体现功能的地方在魔法函数__call__。函数位于predict_system.py文件的第76行,定义如下:

def __call__(self, img, cls=True, slice={
   })

传入参数解释如下:

  • img参数,图像数据三维张量,形状为[h,w,3],分别代表图像高度、图像宽度、通道数(RGB)
  • cls参数,是否启用文本方向分类模型,布尔bool类型,默认值为True
  • slice参数,切片设置,字典dict类型,包含horizontal_stride、vertical_stride、merge_x_thres、merge_y_thres四个属性,分别代表切片宽度、切片高度、合并x坐标阈值、合并y坐标阈值。对于文本检测模型,原始图片的大小对识别效果影响显著。识别模型执行前,会对图片进行一系列预处理操作,其中就包含resize预处理。resize预处理会对原始图片过大者(超出det_limit_side_len设定值,默认为960)进行压缩,确保输入张量的shape与模型配置一致。所以,原始图片越大,压缩后检测识别的效果就越差。这种场景下,可以传入slice参数,让TextSystem在识别前先将原始图片切块,逐一识别后,合并识别结果。按照官方说明文档,对于原始尺寸为[6616,14886]的图片,可以设置slice参数为如下:
slice = {
   'horizontal_stride': 300, 'vertical
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值