PaddleOCR的方向分类器代码解析(五)

PaddleOCR的方向分类器代码解析(五),第1张

PaddleOCR的方向分类器代码解析(五)

2021SC@SDUSC
  这一篇博客我将用来介绍PaddleOCR的方向分类器所使用的后处理代码。后处理顾名思义是在预处理之后再对图像进行处理,方向分类器中的后处理作用为转换图像的文本标签和文本索引。常见的后处理算法有非极大抑制、形态学的膨胀/腐蚀等等。这里的后处理代码中没有什么著名的算法,仅使用paddle包自身的数据结构和函数就完成了图像后处理 *** 作。下面是后处理代码,PaddleOCR-release-2.2->ppocr->postprocess->cls_postprocess.py。

import paddle


class ClsPostProcess(object):
    """ Convert between text-label and text-index """

    def __init__(self, label_list, **kwargs):
        super(ClsPostProcess, self).__init__()
        self.label_list = label_list

    def __call__(self, preds, label=None, *args, **kwargs):
        if isinstance(preds, paddle.Tensor):
            preds = preds.numpy()
        pred_idxs = preds.argmax(axis=1)
        decode_out = [(self.label_list[idx], preds[i, idx])
                      for i, idx in enumerate(pred_idxs)]
        if label is None:
            return decode_out
        label = [(self.label_list[idx], 1.0) for idx in label]
        return decode_out, label

  在__init__函数中获取lable_list作为ClsPostProcess的lable_list。在__call__函数中进行文本标签和文本索引之间的转换。第一行的if语句用来判断preds是否为paddle.Tensor类型,如果是就调用preds.numpy()函数。paddle.Tensor类型是paddle提供的一种数据结构,和python的几种内置结构类型有所不同,它更类似于C语言的多维数组,和Numpy的array相类似。我们可以非常方便的读取到Tensor位置上的内容,但是不能够轻易的给已经生成的Tensor添加成员或者生成维度。所有的修改都需要通过新建在把数据处理后复制进去。调用.numpy()函数把preds转换为numpy之后,新建pred_idxs=preds.argmax(axis=1)返回最大值的索引。pred_idxs中的索引对应的lable_list存入decode_out。如果label为None就直接返回decode_out,否则label赋值为label中索引值为1.0的值,然后返回decode_out和label。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5671384.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存