栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/665854.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号