OCR文本检测论文阅读笔记

这篇具有很好参考价值的文章主要介绍了OCR文本检测论文阅读笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Table of Contents

1      OCR的应用场景............................................................................... 4

2      OCR的技术路线............................................................................... 5

3      DB论文笔记:................................................................................. 6

3.1      论文主要创新点:.......................................................................... 6

3.2      论文内容:.................................................................................... 6

3.3      DB算法网络架构:....................................................................... 7

3.4      可微二值化.................................................................................... 7

3.5      膨胀卷积....................................................................................... 9

3.6      标签生成....................................................................................... 9

3.6.1        训练参数设置:......................................................................................... 11

4      CRNN论文笔记.............................................................................. 12

4.1      论文主要创新点:........................................................................ 12

4.2      论文内容:.................................................................................. 12

4.2.1        整体网络架构............................................................................................. 13

4.2.2        CNN提取序列特征.................................................................................... 13

4.2.3        双向LSTM预测序列特征.......................................................................... 15

4.2.4        CTC转译序列特征到标签.......................................................................... 15

4.2.5        无词典转译:............................................................................................. 16

4.2.6        基于词典转译:......................................................................................... 16

4.2.7        Loss设计:............................................................................................... 16

4.2.8        训练参数设置:......................................................................................... 17

5      OCR身份证识别结果:................................................................... 18

OCR模型项目地址:GitHub - PaddlePaddle/PaddleOCR

  1. OCR的应用场景

根据OCR的应用场景而言,可以大致分成识别特定场景下的专用OCR以及识别多种场景下的通用OCR。就前者而言,证件识别以及车牌识别就是专用OCR的典型案例。针对特定场景进行设计、优化以达到最好的特定场景下的效果展示。那通用的OCR就是使用在更多、更复杂的场景下,拥有比较好的泛性。在这个过程中由于场景的不确定性,比如:图片背景极其丰富、亮度不均衡、光照不均衡、残缺遮挡、文字扭曲、字体多样等等问题,会带来极大的挑战。

  1. OCR的技术路线

典型的OCR技术路线如下图所示:

论文阅读 csdn,paddle,ocr

其中OCR识别的关键路径在于文字检测和文本识别部分,这也是深度学习技术可以充分发挥功效的地方。PaddleHub开源的预训练模型的网络结构是Differentiable Binarization+ CRNN,基于icdar2015数据集下进行的训练。

DB模型参考论文:Real-time Scene Text Detection with Differentiable Binarization

CRNN(Convolutional Recurrent Neural Network)即卷积递归神经网络,是CNN和RNN的组合,专门用于识别图像中的序列式对象。与CTC loss配合使用。参考论文:An end-to-end trainable neural network for image-based sequence recognition and its application to scene text recognition

  1. DB论文笔记:
    1. 论文主要创新点:
  • 提出可微的二值化模块,将阈值映射加入到训练阶段,形成自适应的阈值映射,在推理阶段删去阈值映射,这种情况下不会增加推理时间
  • 2. 我们的方法执行速度比以前的领先方法快得多,因为DB可以提供一个高度鲁棒的二值化映射,大大简化了后处理。

3.DB在使用轻量级骨干时工作得非常好,它显著地增强了ResNet-18骨干的检测性能。

4. 由于可以在推断阶段删除DB,而不牺牲性能,因此测试不需要额外的内存/时间成本。

    1. 论文内容:

情景文本检测分为回归方法的检测和给予分割方法的检测,然而回归方法通常采用的后处理(如NMS)对于不规则形状的文本效果很差(弯曲,多角度)。基于分割的方法通常结合像素级预测和后处理算法来得到bbox。分割算法存在的不足则是训练阶段只训练了segmentation map,大部分文章都是对后处理进行优化提升性能,后处理流程见Fig.2。如近期发表的PSENet (Wang et al. 2019a)提出了递进尺度扩展的后处理,以提高检测精度; (Tian et al. 2019) 中的像素嵌入根据分割结果对像素进行聚类,需要计算像素之间的特征距离。然而复杂的后处理算法会导致推断速度较低。

作者在此提出了DB算法模型,DB算法则是针对分割结果进行了优化。之前的算法只对分割映射进行二值化推理的主要原因是二值化映射是不可微的, 故只能将二值化映射作为固定值放在推理阶段进行。DB算法则提出了类标准二值化映射的算法,使得二值化映射可微,可微后的阈值映射就可以引入训练阶段,与概率映射进行联合训练。如Fig.2红色箭头所示。推理阶段删去阈值映射,从而不损失推理速度。
 

论文阅读 csdn,paddle,ocr

    1. DB算法网络架构:

论文阅读 csdn,paddle,ocr

DB模型整体网络结构如图。基础网络采用金字塔骨架,下采样的后几层采用膨胀卷积提升弯曲标签的提取效果,上采样通过反卷积进行操作,通过下采样遇上采样元素相加融合特征信息,产生的特征图进行通道拼接进行预测,此时特征图大小为原图的1/4,后续网络预测文本特征的概率图P和阈值图T,然后用P和F计算近似二值映射(ˆB)生成最终的approximate binary map。在训练期间,对概率图、阈值图和近似二值图进行监督,其中概率图和近似二值图共享同一监督。在推理过程中,利用框公式模块可以从近似的二值映射或概率映射中轻松地得到边界框。

    1. 可微二值化

论文阅读 csdn,paddle,ocr

论文阅读 csdn,paddle,ocr

论文阅读 csdn,paddle,ocr

式中ˆB为近似二进制映射;T为从网络学习到的自适应阈值图;P为预测概率图;K为放大系数。根据经验,K设为50。近似二值化函数与标准二值化函数如图4a,近似二值化函数与标准二值化类似,但具有可微性,因此可以在训练期间随分割网络进行优化。具有自适应阈值的可微分二值化方法不仅可以将文本区域从背景中区分出来,而且可以分离出紧密连接的文本实例。表1展示了DConv和DB分别在ResNet18和ResNet50上的消融实验。

论文阅读 csdn,paddle,ocr

DB提高性能的原因可以用梯度的反向传播来解释。令x = Pi,j−Ti,j,通过T对前景和背景之间P的梯度进行影响和缩放。DB可表示为f(x)= 1 /1+e^−kx。则正面标签的损失l+和负面标签的损失l -为:

                                           

论文阅读 csdn,paddle,ocr

论文阅读 csdn,paddle,ocr

因此,我们在阈值图上采用类似边界的监督,以便更好地指导。然而,阈值图的动机和用法不同于文本边界图,the text border map文本边界图(Xue, Lu, and Zhan 2018)用于分割文本实例,而阈值地图作为二值化的阈值。

论文阅读 csdn,paddle,ocr

    1. 膨胀卷积

Deformable convolution(Dai et al. 2017;Zhu et al. 2019)可以为模型提供一个灵活的接受域,这对极端高宽比的文本实例尤其有益。随后(Zhu et al. 2019),modulated deformable convolutions被应用于ResNet-18或ResNet-50骨干中的阶段conv3、conv4和conv5的所有3 × 3卷积层(He et al. 2016a)。

    1. 标签生成

论文阅读 csdn,paddle,ocr

G表示标签顶点的集合,n为顶点数。然后利用Vatti裁剪算法(Vati 1992),将多边形G缩小为Gs(图5蓝框),得到正面积。收缩的偏移量D由原始多边形的周长L和面积A计算:

论文阅读 csdn,paddle,ocr

论文阅读 csdn,paddle,ocr

其中r为收缩比,经验值设为0.4。G以偏移量D到Gs收缩D偏移量产生文本框标签,G以偏移量D到Gd展开为阈值映射生成标签。G和Gd之间的差距作为文本区域的边界,其中阈值映射的标签可以通过计算到G中最近的线段的距离来产生。

论文阅读 csdn,paddle,ocr

论文阅读 csdn,paddle,ocr

损失函数L可以表示为概率映射Ls的损失、二进制映射Lb的损失和阈值映射Lt的损失的加权和,α和β分别设为1.0和10。Ls和Lb都应用了二元交叉熵(BCE)损失。为了克服正负数的不平衡,通过对硬负数采样,在BCE损失中使用了硬负挖掘。Sl是正负比为1:3的采样集。Lt为展开文本多边形Gd内部预测与标签之间L1距离之和,Rd为膨胀多边形Gd内部像素的索引集;∗是阈值映射的标签。

论文阅读 csdn,paddle,ocr

在推断阶段,我们可以使用概率映射或近似二进制映射来生成文本边界框,它们产生的结果几乎相同。为了提高效率,我们使用了概率图,从而可以消除阈值分支。方框形成过程包括三个步骤:(1)首先将概率图/近似二值图以恒定阈值(0.2)进行二值化处理,得到二值图;(2)由二值映射得到连通区域(收缩文本区域);(3) Vatti裁剪算法(Vati 1992)利用偏移量D'对收缩区域进行扩张。式中A'为收缩后多边形面积;L'是收缩后多边形的周长;根据经验将r'设置为1.5。

论文阅读 csdn,paddle,ocr

DB算法在横向、多方向和曲面文本五种基准数据集上都取得了较好的性能。表6展示了MSRA-TD500多语言数据集的结果比较。

论文阅读 csdn,paddle,ocr

多边形偏移量D生成源码实现和threshold map生成源码实现DB:Real-time Scene Text Detection with Differentiable Binarization - 简书 (jianshu.com)

因此最后得到的标签

蓝线以内区域

绿线和蓝线中间的区域

其他区域

threshold map

0.3

越靠近红线越接近0.7,越远离红线越接近0.3

0.3

probability map

1

0

0

binary map

1

0

0

DB算法讲解:文字检测(三)Differentiable Binarization论文阅读 - 知乎 (zhihu.com)

      1. 训练参数设置:

在SynthText dataset(Gupta, V edaldi, and Zisserman 2016) 800k合成文本数据集上进行100k iterations预训练,之后在相应的真实世界文本数据集上进行了1200 epochs的微调,训练的batch size设置为16,采用poly学习率,初始学习率设置为0.007,power为0.9,权重衰减0.0001,动量0.9;数据增强采用随机旋转(-10,10)一个角度,随机裁剪,以及随机翻转,数据的最终图像大小设置为640*640。测试时后处理大概占了推理时间的30%。

  1. CRNN论文笔记
    1. 论文主要创新点:
  • 将特征提取(卷积神经网络完成),序列建模(循环神经网络完成)和标签转译组合成一个端到端可训练的网络框架
  1. 它是端到端可训练的,而现有的大多数算法都是单独训练和调优的。
  2. 它自然地处理任意长度的序列,不涉及字符分割或水平尺度归一化。
  3. 它不局限于任何预定义的词汇,在无词汇和基于词汇的场景文本识别任务中都取得了显著的性能。
  4. 它生成了一个有效但更小的模型,更适合实际应用场景。
  • 作者借鉴了语音序列处理的时序思路,结合了CNN提取序列特征+双向LSTM预测序列特征+转译序列标签组合了一个端到端可训练网络。

参考链接:06. OCR学习路径之CRNN文本识别 - 腾讯云开发者社区-腾讯云 (tencent.com)

    1. 论文内容:

OCR光学字符识别在检测到文本之后还需要识别出文本内的文字信息,检测出的文本片段一般是一行文字,具有sequence-like属性,因此此类文本识别归属为image-based sequence recognition的问题。这就与常规的物体识别不同,它有一系列的标签,识别出的结果是序列化的字符,而不是单个标签,类序列对象的另一个特点是其长度不统一,标签也是长度变化的。因此,解决此类问题,就不能采用固定输入和输出的传统CNN模型了。作者提出了CRNN模型框架结合CTC方式进行文本检测,

优点:因为CRNN不受序列长度的约束,所以不需要预处理(二值化、切割等)、可以直接从sequence的target上学习。

      1. 整体网络架构

论文阅读 csdn,paddle,ocr

上图为CRNN模型整体架构,主要包括三个部分:

1) 卷积层,从输入图像中提取特征序列;

2) LSTM层,预测每一帧的标签分布,从卷积层获取的特征序列的标签(真实值)分布

3) 转译层,将每一帧的预测变为最终的标签序列。

      1. CNN提取序列特征

论文阅读 csdn,paddle,ocr

CNN基于VGG-VeryDeep架构,去除了其中的全连接层,采用其中的卷积层和最大池化层来构造整体卷积提取架构,其中为了让卷积适用于长度不定的文本框检测,以传输序列特征给到后续的RNN模型中,在第3,4层的最大池化层采用1*2的矩形池化窗口代替了传统方形窗口。在进入网络之前,所有的图像需要缩放到相同的高度。然后从卷积层组件产生的特征图中提取特征向量序列,这些特征向量序列作为循环层的输入。

由于卷积层,最大池化层和元素激活函数在局部区域上执行,因此它们是平移不变的。因此,特征图的每列对应于原始图像的一个矩形区域(称为感受野),并且这些矩形区域与特征图上从左到右的相应列具有相同的顺序。如图2所示,特征序列中的每个向量关联一个感受野,并且可以被认为是该区域的图像描述符。

网络配置图和细节操作如下:

l 首先会将图像缩放到 32×W×1 大小

l 然后经过CNN后变为 1×(W/4)× 512

l 接着针对LSTM,设置 T=(W/4) , D=512 ,即可将特征输入LSTM。

l LSTM有256个隐藏节点,经过LSTM后变为长度为T × nclass的向量,再经过softmax处理,列向量每个元素代表对应的字符预测概率,最后再将这个T的预测结果去冗余合并成一个完整识别结果即可。

论文阅读 csdn,paddle,ocr

其中,‘k’, ‘s’ 和‘p’ 代表 kernel size, stride 和padding size

以上都比较好理解,但是最后一步,经过LSTM后变为长度为T × nclass的向量,再经过softmax处理,列向量每个元素代表对应的字符预测概率,最后再将这个T的预测结果去冗余合并成一个完整识别结果即可。

      1. 双向LSTM预测序列特征

论文阅读 csdn,paddle,ocr

传统的循环序列网络有梯度消失的问题存在,LSTM的提出解决了被限制的存储上下文范围的界限,但LSTM是定向的,他只是用过去的上下文信息。然而,在基于图像的文本序列中,两个方向的上下文是相互有用且互补的。因此作者遵循[17]将两个LSTM进行了向前向后的双向组合,并将双向LSTM进行了堆叠,得到如图3b的深双向LSTM,深层结构允许比浅层抽象更高层次的抽象,并且在语音识别任务中取得了显著的性能改进[17]

  •  基本的LSTM单元的结构。LSTM包括单元模块和三个门,即输入门,输出门和遗忘门。
  • 我们论文中使用的深度双向LSTM结构。结合前向(从左到右)和后向(从右到左)LSTMchans双向LSTM。堆叠多个双向LSTM产生在深度双向LSTM中。

在循环层中,误差在图3.b所示箭头的相反方向传播,即反向传播时间(BPTT)。在循环层的底部,传播差异的序列被连接成映射,将特征映射转换为特征序列的操作进行反转并反馈到卷积层。实际上,我们创建一个称为“Map-to-Sequence”的自定义网络层,作为卷积层和循环层之间的桥梁。

      1. CTC转译序列特征到标签

详细的CTC推导过程网上已经有很多,说一下我的理解就是。由于输出的T=W/4是一个不定长的结果,而我们需要做的就是将该序列结果翻译成最终的识别结果。但是LSTM进行时序分类时的输出有一个特点,就是同一个字符被连续识别两次,因此需要一个去冗余机制。CTC提出了插入blank机制,比如下图的以符号“-”代表blank。若标签为“aaa-aaaabb”则将被映射为“aab”,而“aaaaaaabb”将被映射为“ab”。引入blank机制,就可以很好地处理了重复字符的问题了。

论文阅读 csdn,paddle,ocr

但是通常一个正确的输出序列可以有多条路径达成,比如直接贴一张其他博主的图吧,下面酱紫的:

论文阅读 csdn,paddle,ocr

可以看出,这4条路线都能达到正确的结果输出,那么如何找出最优的路径呢?就引出下一个公式,

论文阅读 csdn,paddle,ocr

论文阅读 csdn,paddle,ocr

Β 作用就是maps π onto l by firstly removing the repeated labels。

ytπt是时刻t在能输出正确值πt的情况下,所输出某一个字符的概率。

每一个字符的输出都对应着一个softmax计算出的概率ytπt ,再把每一个字符输出对应的概率相乘,得出这条路径的概率为p(π|y),那所有路径的概率总和就是p(l|y),也就是以上公式想表达的意思了。

      1. 无词典转译:

在这种模式下,以公式1中定义的概率最大的* l作为预测。由于不存在可跟踪的算法来精确求解,我们使用[15]中采用的策略。l∗≈B(arg maxπ p(π|y))可以近似地找到l∗序列,即

在每个时间戳t取最可能的标签πt,并将结果序列映射到* l上。

      1. 基于词典转译:

在基于词库的模式下,每个测试样本都与一个词库D相关联。基本上,标签序列是通过在公式1中定义的条件概率最高的词库中选择序列来识别的,即* * * = arg maxl∈D p(l|y)。然而,对于大的字典,例如50k个单词的Hunspell拼写检查字典[1],在字典上执行穷举搜索将是非常耗时的,即对字典中的所有序列计算等式1,并选择概率最高的一个。为了解决这个问题,我们观察到,在编辑距离度量下,通过无字典转录(如2.3.2所述)预测的标签序列往往接近于真实值。这表明我们可以将搜索限制到最近的候选Nδ(l0),其中δ是最大的编辑距离,而l0是在无字典模式下从y转录的序列:

      1. Loss设计:

由以上分析,知道了最佳路径的概率值,那么现在就可以设计一个训练的Loss函数来寻找一个最大概率的输出序列,

论文阅读 csdn,paddle,ocr

Ii是训练图片,I_i是真实标签。

论文阅读 csdn,paddle,ocr

通过对概率的计算,就可以对之前的神经网络进行反向传播更新。类似普通的分类,CTC的损失函数O定义为负的最大似然,为了计算方便,对似然取对数。我们的训练目标就是使得损失函数O优化得最小即可。

      1. 训练参数设置:

SGD优化器,在转录层,误差微分通过正向向后算法反向传播,如[15]所述。在循环层中,采用时间反向传播法(BPTT)计算误差微分。转录层(在c++中)和BK-tree数据结构(在c++中)的实现。实验在2.50 GHz Intel(R) Xeon(R) E52609 CPU, 64GB RAM和NVIDIA(R) Tesla(TM) K40 GPU的工作站上进行。网络使用ADADELTA计算每个维度的学习率,设置参数ρ为0.9。在训练过程中,为了加速训练过程,所有的图像都被缩放到100 × 32。训练过程大约需要50个小时才能达到收敛。测试图像被缩放为高度为32。宽度与高度成比例缩放,但至少100像素。平均测试时间是0.16秒/样本,在没有字典的IC03上测量。对IC03的50k字典进行近似字典搜索,参数δ设为3。测试每个样本平均需要0.53秒。

  1. OCR身份证识别结果:

论文阅读 csdn,paddle,ocr

论文阅读 csdn,paddle,ocr

论文阅读 csdn,paddle,ocr文章来源地址https://www.toymoban.com/news/detail-766902.html

到了这里,关于OCR文本检测论文阅读笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Microsoft认知服务进行文本检测和 OCR

    (Microsoft Cognitive Services MCS) Microsoft认知服务 这篇博客将介绍 Microsoft Cognitive Services (MCS) OCR API。尽管与Amazon Rekognition API相比,实现和使用起来稍微困难一些,但Microsoft Cognitive Services OCR API表明它非常强大,并且能够在许多情况下(包括低质量图像)进行OCR文本。 在处理

    2024年02月09日
    浏览(21)
  • 基于飞浆OCR的文本框box及坐标中心点检测JSON格式保存文本

    一、借助飞浆框出OCR识别的文本框 二、以圆圈形式标出每个框的中心点位置 三、以JSON及文本格式保存OCR识别的文本 四、以文本格式保存必要的文本信息 一、文本的坐标来自飞浆的COR识别 二、借助paddleocr的draw_ocr画出文本的外框 三、中心点由坐标的左上和右下均值得出 四、

    2024年02月03日
    浏览(24)
  • Paddle OCR 安装使用教程

    PaddleOCR是飞浆开源文字识别模型,最新开源的超轻量PP-OCRv3模型大小仅为16.2M。同时支持中英文识别;支持倾斜、竖排等多种方向文字识别;支持GPU、CPU预测,并且支持使用paddle开源组件训练自己的超轻量模型,对于垂直领域的需求有很大帮助。 环境安装 说明:官方推荐使用

    2024年02月15日
    浏览(31)
  • paddle ocr框架识别数字问题和解决方案

    情况1:检测错误,同一个字符串被两次检测到 比如 “12 方案 ” 被识别成:“12” “2方案”,这种可以通过x坐标交叉并且第一个结果最后一个字符与第二个结果第一个字符相同判断 情况2: 识别错误,11被识别成111 可能是文本周围空白区域太多,通过轮廓裁剪出文本区域,

    2024年02月12日
    浏览(27)
  • 免费开源的高精度OCR文本提取,支持 100 多种语言、自动文本定位和脚本检测,几行代码即可实现离线使用(附源码)

    免费开源的高精度OCR文本提取,支持 100 多种语言、自动文本定位和脚本检测,几行代码即可实现离线使用(附源码)。 要从图像、照片中提取文本吗?是否刚刚拍了讲义的照片并想将其转换为文本?那么您将需要一个可以通过 OCR(光学字符识别)识别文本的应用程序。 图

    2024年02月01日
    浏览(104)
  • Ubuntu20.04 交叉编译Paddle-OCR

    参考链接: https://blog.csdn.net/sz76211822/article/details/130466597?spm=1001.2014.3001.5501 参考链接: https://blog.csdn.net/sz76211822/article/details/130461683?spm=1001.2014.3001.5501 1.将Paddle-Lite编译好的cxx文件夹放置到PaddleOCR/deploy/lite目录下 2.将编译好的opencv文件夹放置到cxx目录下 3.除了拷贝过来的源代码

    2024年02月02日
    浏览(38)
  • CSDN首发 | 《深入浅出OCR系列》目录

    👨‍💻 作者简介: CSDN、阿里云人工智能领域博客专家,新星计划计算机视觉导师,百度飞桨PPDE,专注大数据与AI知识分享。✨ 公众号:GoAI的学习小屋 ,免费分享书籍、简历、导图等,更有交流群分享宝藏资料,关注公众号回复“加群”或➡️ 点击链接 加群。 🎉 专栏推

    2023年04月08日
    浏览(39)
  • fastdeploy部署多线程/进程paddle ocr(python flask框架 )

    部署参考:https://github.com/PaddlePaddle/FastDeploy/blob/develop/tutorials/multi_thread/python/pipeline/README_CN.md 安装 cpu: pip install fastdeploy-python gpu : pip install fastdeploy-gpu-python 命令: 多线程 多进程 文件:multi_thread_process_ocr.py 原始代码:270行 修改为如下,去掉1 因为安装包不对,fastdeploy与

    2024年02月11日
    浏览(29)
  • 67、C#调用Visual Studio 2019生成的Paddle+OCR(使用ncnn库),去完成业务任务

    基本思想:这里使用飞哥写的android代码,将其取出纯c++代码逻辑,自己尝试转了paddle+ocr模型,可以成功转换,不在详细阐述生成ncnn模型的过程和写后处理ocr识别过程,这里要实现的目的是使用c#调用ncnn的ocr工程,完成对应部门的业务支撑~ 一、在window10+ncnn+clion+mingw32测试结

    2024年02月09日
    浏览(41)
  • Mac 上使用 Tesseract OCR 识别图片文本

    Tesseract OCR 引擎:Tesseract是一个开源的OCR引擎,你需要先安装它。可以从Tesseract官方网站(https://github.com/tesseract-ocr/tesseract)下载适用于你的操作系统的安装程序或源代码,并按照官方文档进行安装。 Tesseract OCR 对于低分辨率或模糊的图片可能无法准确识别。尝试使用更高分

    2024年02月15日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包