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

这篇博客详细介绍了PaddleOCR中用于方向分类器的后处理代码,主要功能是将文本标签转换为文本索引。代码首先通过.numpy()将paddle.Tensor转换为numpy数组,然后利用argmax()找到最大值索引,根据索引从label_list中获取对应标签。后处理代码简单高效,直接返回decode_out。如果提供了label,还会返回相应的label值。
摘要由CSDN通过智能技术生成

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。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值