Benchmarking Chinese Text Recognition: Datasets, Baselines| OCR 中文数据集【论文翻译】

基础信息如下

1-0

  • https://arxiv.org/pdf/2112.15093.pdf
  • https://github.com/FudanVI/benchmarking-chinese-text-recognition

Abstract

深度学习蓬勃发展的局面见证了近年来文本识别领域的迅速发展。然而,现有的文本识别方法主要针对英文文本。作为另一种广泛使用的语言,中文文本识别在各个领域都有广泛的应用市场。根据我们的观察,我们认为中文文本识别受到关注不足的原因在于缺乏合理的数据集构建标准、统一的评估协议以及现有基准结果。为了弥补这一空白,我们从公开的竞赛、项目和论文中手动收集了中文文本识别数据集。根据应用场景,我们将收集到的数据集分为场景、网络、文档和手写数据集四类。此外,我们在中文文本识别中规范了评估协议。通过统一的评估协议,我们在收集到的数据集上评估了一系列具有代表性的文本识别方法,以提供基准结果。实验结果表明,由于中文文本的特点与拉丁字母有很大不同,基准方法在中文文本识别数据集上的表现不如英文数据集。此外,我们观察到通过引入基于部首级别的监督作为辅助任务,可以进一步提高基准方法的性能。The code and datasets are made publicly available at https://github.com/FudanVI/benchmarking-chinese-text-recognition

1 Introduction

近年来,文本识别因其在自动驾驶[1, 2]、文件检索[3, 4]、签名识别[5, 6]等诸多领域的广泛应用,受到了广泛关注。然而,现有的文本识别方法主要集中在英文文本上[7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],却忽视了中文文本识别(CTR)这个巨大的市场。具体来说,中文是全球使用人数最多的语言,拥有13.1亿的使用者,这意味着中文文本识别及其相关任务必然会对这一人群产生重要影响。

根据我们的观察,我们总结了中文文本识别关注度不足的三个潜在原因:1)缺乏合理的数据集构建标准。理想情况下,基于给定的四边形框,我们可以沿着注释点裁剪文本区域,然后将其矫正为水平方向的图像,与那些直接使用最小外接水平框的方法相比,这可以有效地消除无用的背景区域。因此,不同的裁剪方法会导致不公平的比较。此外,从不同环境收集的数据集在外观上显示出很大的差异。找到合理的分割策略对于更有效的研究也是有益的。因此,应考虑数据集构建的标准。2)缺乏统一的评估协议。通常,在评估英文文本数据集中的识别模型时,研究人员通常默认将大写转换为小写。然而,对于中文文本识别,目前不存在任何统一的评估协议。例如,研究人员可能会感到困惑,是否应将全角字符和半角字符、简化字符和繁体字符视为相同字符。此外,评估指标(如归一化编辑距离和准确率)在中文文本识别论文中也存在不一致之处。因此,迫切需要统一的评估协议,以公平地评估中文文本识别方法。3)缺乏现有基准方法的实验结果。现有的文本识别方法主要在英文文本数据集上进行评估,如IIIT5K [19]、IC03 [20]、IC13 [21]等。尽管少数方法尝试在中文数据集上进行实验,但相应论文中未明确解释数据集构建的细节,这使得其他研究人员难以将其用作中文文本识别的基准。

1-16

在本论文中,我们旨在构建一个中文文本识别基准,以填补这一空白。我们首先从公开竞赛、论文和项目中获取了现有的中文文本识别数据集,分为场景、网络、文档和手写四个类别(每个数据集的一些示例见图1)。我们还通过人工校准每个类别的可识别性,证明了数据集构建的合理性。然后,我们手动将每个数据集合理地划分为训练集、验证集和测试集。验证集旨在公平比较现有方法,即确保基于验证集选择最佳超参数,以避免测试集导向的调整。此外,我们在收集的数据集上复现了一些代表性的文本识别方法的结果,作为基准。实验结果表明,一些最先提出用于英文文本的SOTA方法在中文文本识别数据集上的表现不如在英文数据集上。通过分析,一个可能的原因是中文文本的某些特点对现有方法构成了障碍。鉴于中文字符的复杂内部结构,我们引入了基于部首级别的多任务监督以实现更好的识别。总体而言,我们的贡献可以列举如下:

  • 我们手动从公开的竞赛、论文和项目中收集了中文文本识别数据集,然后将它们分为四个类别,即场景、网络、文档和手写数据集。我们进一步将每个数据集合理地划分为训练、评估和测试集。
  • 我们规范了评估协议,以公平地比较现有的文本识别方法。
  • 基于收集到的数据集和规范的评估协议,我们重新复现了一系列基准方法的结果,然后详细分析了基准方法的性能。
  • 我们在中文文本识别中引入了基于部首级别的监督,以普遍提高现有基于注意力的识别器的性能。

2 预备知识

1-2

2.1 汉字的分层表示

在这里,我们介绍了汉字的三种表示方式(见图2(a)中的示例“奇”),即字符级别、部首级别和笔画级别。

字符级别。根据中国国家标准GB18030-2005,汉字的总数为70,244个,其中3,755个字符是一级常用字符。

部首级别。根据Unicode汉字结构标准,有12种基本部首结构(见图2(b)),以及514个一级常用汉字的部首。对于这3,755个常用汉字,部首级别的表示可以有效地将字母表的大小从3,755减小到526。

笔画级别。根据Unicode汉字数据库,每个汉字可以分解为一系列笔画。有五种基本笔画类别(如横、竖、撇、捺和折),每种类别都包含几个实例(见图2(c))。

2.2 中文文本的特点

2-4

社区中公认中文文本相对于英文文本更难识别[22, 23]。为了探索其中的内在原因,我们在这里分析了中文文本与英文文本不同的特点:

  1. 大量的字符。根据国家标准GB18030-2005,汉字的数量为70,244个(包括3,755个常用的一级字符)。这比英文字符的规模大得多,后者只包含26个大写字母和26个小写字母(见图3(a))。一方面,进行大规模的分类本质上是一项困难的任务[24]。另一方面,在对中文文本识别数据集进行实验时,识别器很可能会遇到具有挑战性的零样本问题,即待测试的字符可能在训练集中不存在。
  2. 相似的外观。与英文字母相比,存在相似外观的大量汉字(见图3(b))。例如,“戌”和“戍”的区别仅在于一个微小的笔画。即使对人眼来说也很难区分,这确实给现有的文本识别方法带来了负担。
  3. 复杂的顺序模式。我们观察到现有的英文基准中大多数样本都是在单词级别上的。由于两个英文单词之间有空格,人们在标注过程中往往会将它们分开以进行检测。此外,在英文单词内部存在固有的统计模式(例如,“abl”更有可能跟随“e”),因此有助于识别器更好地捕捉顺序模式。相反,中文文本更有可能以短语或句子的形式出现。在这种情况下,中文字符之间存在复杂的依赖关系,涉及词性等(见图3(c)),这确实使识别器学习顺序模式变得困难。
  4. 常见的竖排文本。与英文文本相比,由于自然场景中常见的传统对联或招牌,中文文本更有可能出现竖排。相反,由于人们固有的阅读习惯,英文中很少有竖排文本(见图3(d))。
  5. 复杂的内部结构。如2.1中介绍的,与英文中的单组分字符不同,大部分中文字符是多组分的(见图2(a)),即每个中文字符可以分解为几个按部首结构组织的部首。更复杂的内部结构使得中文字符的分类变得更加困难。

3 Datasets

3.1 数据集的详细信息

场景数据集。从竞赛、论文和项目中,我们得到了一系列场景数据集,包括 RCTW [25]、ReCTS [26]、LSVT [27]、ArT [28] 和 CTW [29]。各数据集的详细信息如下:

  • RCTW [25]:提供了来自自然场景的12,263张标注的中文文本图像。我们从训练集中获得了44,420张文本图像,用于我们的基准。由于测试集的文本标签不可用,我们没有使用 RCTW 的测试集。
  • ReCTS [26]:提供了25,000张标注的街景中文文本图像,主要来自招牌。我们仅使用训练集,并总共裁剪了107,657个文本样本用于我们的基准。
  • LSVT [27]:这是一个大规模的中英文场景文本数据集,提供了50,000个完全标注的样本(多边形框和文本标签),以及400,000个部分标注的样本(每个图像仅一个文本实例)。我们仅使用完全标注的训练集,并从中裁剪了243,063张文本图像用于我们的基准。
  • ArT [28]:其中包含自然场景中采集的具有各种文本布局(如旋转文本和弯曲文本)的文本样本。在这里,我们从训练集中获得了49,951张裁剪的文本图像,并将其用于我们的基准。
  • CTW [29]:它包含了30,000张街景图像,具有丰富的多样性,包括凸起文本、遮挡文本、光线不足的文本等。此外,它不仅提供了字符框和标签,还提供了字符的属性,如背景复杂度、外观等。在这里,我们从训练集和测试集中共裁剪了191,364张文本图像。

1-5

我们将上述所有数据集组合在一起,总共得到了636,455个文本样本。我们对这些样本进行随机洗牌,并按8:1:1的比例划分,得到了509,164个样本用于训练,63,645个样本用于验证,以及63,646个样本用于测试。

Web dataset:为了收集网络数据集,我们使用了MTWI [30],其中包含来自淘宝网站的17个不同类别、20,000张中英文网络文本图像。这些文本样本出现在各种场景、排版和设计中。我们从训练集中获取了140,589张文本图像,并手动按照8:1:1的比例划分,得到了112,471个样本用于训练,14,059个样本用于验证,以及14,059个样本用于测试。

Document dataset. 我们使用公共仓库Text Render [5]生成一些文档风格的合成文本图像。更具体地说,我们均匀采样文本长度,长度从1到15不等。语料库来自维基、电影、亚马逊和百科。数据集总共包含500,000个样本,随机划分为训练集、验证集和测试集,比例为8:1:1(400,000比50,000比50,000)。

Handwriting dataset. 我们基于SCUT-HCCDoc [31]收集了手写数据集,该数据集在非受限环境中使用摄像头捕获了中文手写图像。按照官方设置,我们获得了93,254个训练样本和23,389个测试样本。为了进行更严谨的研究,我们将原始训练集手动按照4:1的比例划分成两个子集,得到了74,603个用于训练和18,651个用于验证的样本。为了方便,我们继续使用原始的测试集。

采用数据集的许可证。对于数据集 RCTW [25]、ReCTS [26]、ArT [28]、LSVT [27] 和 MTWI [30],这些数据集在发布时并没有相关的开源许可证。因此,我们已联系了这些数据集的所有者,并确认它们可以用于学术研究。数据集 CTW [29] 使用许可证 Attribution-NonCommercial-ShareAlike 4.0 International,称为 CC BY-NC-SA 4.0 [6],用户被授权在任何媒体或格式中复制和重新分发材料。在 SCUT-HCCDoc [31] 的 GitHub 仓库中,作者已经声明该数据集只能用于非商业性研究目的。此外,我们已与数据集的作者联系,并获得了学术研究的许可。

3.2 Preprocessing

1-8

在这里,我们提出了四个步骤来预处理收集的四类数据集:

1)保留包含其他语言的文本图像。我们观察到现有的中文文本识别数据集主要包含中文字符,同时也包含少量英文字符以及其他语言的字符(见图6(a))。考虑到自然场景中文本图像的语言分布,我们决定保留包含其他语言字符的样本。
2)移除标注为“###”的样本。根据一些数据集的标注标准(如RCTW [25]和ReCTS [26]),无法辨认的文本图像被标注为“###”(见图6(b))。我们观察到这些样本中存在严重的模糊或遮挡,即使对于人眼来说也很难识别。考虑到这些样本可能会为训练过程带来噪声,我们决定从数据集中将其移除。
3)构建单独的验证集。通过观察,现有的英文文本识别基准通常缺乏验证集。实际上,在训练阶段测试集是不可用的,应根据在验证集上的表现选择最佳模型。 在追求更严格的研究时,我们考虑了验证集(见图6(c))。
4)仅收集具有可用文本标签的样本。我们观察到许多测试集的文本标签并不公开,特别是对于那些竞赛数据集而言。在这种情况下,我们仅使用具有可用标注文本标签的样本。

3.3 Analysis of Datasets

1-10

字母表大小和字符数量。 从表1中可以看出,四个数据集的字母表大小和汉字比例各不相同。例如,大部分网络文本都是包含固定短语表达的中文广告,因此字母表中的字符较少(4,402个字符)。此外,网络数据集包含许多电话号码和英文网站,导致其汉字比例是四个数据集中最低的(44.9%)。对于手写数据集,大部分文本是中文古诗,其中包含的生僻字符较多,因此字母表最大(6,105个字符)。结果,手写数据集的测试集包含了最多的零样本字符(253个零样本字符),这些字符在训练集中不存在,进一步增加了识别的难度。

文本长度和长宽比的分布。 图4和图5展示了文本长度和长宽比(即宽度与高度的比值)的分布情况。从这些图中,我们观察到在手写数据集中长文本(例如,长度≥ 10)更频繁出现,这为基线方法带来了困难。相反,场景和网络数据集中的文本相对较短,可能考虑到乘客、顾客等的阅读效率。在长宽比分布方面,由于野外常见的对联和招牌,场景数据集中的竖排文本(比例≤ 1)更多。相比之下,手写数据集包含更多的横排文本。

字符和词频率。 如表2所示,我们分析了每个数据集中字符和词汇的频率,并观察到一些有趣的现象。例如,由于自然场景中有许多中国品牌或国有企业,字符“中”、“国”以及词汇“中国”出现在场景数据集中的频率较高。此外,网络数据集包含许多高频广告术语,如“包邮”、“正品”等。由于文档和手写数据集中大多数样本都是中文句子,所以助词“的”在这些数据集中出现最频繁。特别是在手写数据集中,由于一些文本图像是从日记中裁剪出来的,因此有很多与人有关的字符或词汇,如“我”、“你”、“我们”等。

人类识别能力的校准。 为了找出影响四个数据集中文本图像识别能力的因素,我们邀请了20位受过良好教育的参与者进行此实验。我们邀请参与者从不同的角度选择相应的原因(多个选项),阻碍了识别能力:1)遮挡(来自前景),2)倾斜或弯曲(实例级别),3)背景混淆(来自背景),4)涂鸦(字符级别),5)模糊(图像来源)。如果没有一个原因被满足,我们认为文本图像是可识别的。总体而言,我们为每个数据集获得了500个投票(20名参与者对每个数据集的25个图像样本进行评估)。统计结果如表3所示。我们可以看到,在场景数据集中,参与者的投票主要集中在“遮挡”、“背景混淆”和“模糊”上,表明这对人类来说是最难识别的数据集。影响识别能力的因素主要来自野外环境和获取文本图像的方式。对于网络数据集,通过可控的生成,文本的外观可以更加多样,因此“倾斜或弯曲”的选择获得了最多的投票。对于文档数据集,样本对于人类来说相对容易识别,因此获得的投票较少。在手写数据集中,参与者对“涂鸦”投票最多,表明书写中的笔画连贯性也是影响识别能力的一个基本因素。通过以上观察,我们可以发现影响识别能力的因素在不同数据集中有所不同,从而激发了我们对每个数据集单独进行性能调查的兴趣。

4 Baselines

文本识别在过去的十年中取得了快速的进展。根据主要特点,文本识别方法可以分为几个类别,包括基于CTC的方法、基于矫正的方法等。从这些类别中,我们选择了八种代表性的方法作为基线,这些方法大多用于文本识别任务中的比较。

CRNN(Shi等人,2016)[7] 是一种典型的基于CTC的方法,广泛应用于工业领域。它将文本图像送入CNN中提取图像特征,然后采用双层LSTM对序列模式进行编码。最后,LSTM的输出被送入CTC(Connectionist Temperal Classification)[32]解码器,以最大化通向实际文本的所有路径的概率。

ASTER(Shi等人,2018)[8] 是一种典型的基于矫正的方法,旨在处理不规则文本图像。它引入了空间变换网络(STN)[33]来矫正给定的文本图像。然后,矫正后的文本图像被送入CNN和双层LSTM以提取特征。特别地,ASTER利用注意机制来预测最终的文本序列。

MORAN(Luo等人,2019)[12] 是一种代表性的基于矫正的方法。它首先采用多对象矫正网络(MORN)以弱监督方式预测矫正后的像素偏移(不同于ASTER使用STN)。输出的像素偏移进一步用于生成矫正后的图像,然后送入基于注意机制的解码器(ASRN)进行文本识别。

SAR(Li等人,2019)[13] 是一种代表性的利用2D特征图进行更强鲁棒解码的方法。不同于CRNN、ASTER和MORAN将给定图像压缩为1D特征图,SAR采用2D注意力在特征图的空间维度上进行解码,从而在曲线和倾斜文本上表现出更强的性能。

SEED(Qiao等人,2020)[14] 是一种代表性的基于语义的方法。它引入一个语义模块来提取全局语义嵌入并将其用于初始化解码器的第一个隐藏状态。通过在识别过程之前引入语义,SEED的解码器在识别低质量文本图像方面表现出优越性能。

MASTER(Lu等人,2021)[34] 是一种基于注意力的方法,利用自注意力机制学习畸变文本图像的更强大且更鲁棒的表示。同时,由于训练并行化和内存缓存机制的优势,该方法具有很高的训练效率和高速的推理速度。

ABINet(Fang等人,2021)[35] 是一种用于场景文本识别的自主、双向和迭代方法。自主原则意味着视觉模型和语言模型应分开学习;双向原则旨在捕获两倍数量的信息;迭代原则旨在从视觉和语言线索中细化预测。此外,作者还提出了一种自训练方法,使得ABINet能够从无标签图像中学习。

TransOCR(Chen等人,2021)[36] 是代表性的基于Transformer的方法之一。最初设计用于为超分辨率任务提供文本先验。它使用ResNet-34 [37] 作为编码器,并使用自注意力模块作为解码器。与基于RNN的解码器不同,自注意力模块更有效地捕获给定文本图像的语义特征。

通过基线的实验结果(详细内容将在第5节介绍),我们观察到基线在中文文本识别数据集上的性能不如在英文数据集上的好,这是由于中文文本的特点(见第2.2节)。针对中文字符的复杂内部结构,我们提出了一种可插拔的基于部首的分支(PRAB),它可以插入任何基于注意力的识别器中,以引入基于部首的多任务监督,从而实现更好的识别。有关PRAB的更多详细信息,请参见补充材料。

5 实证研究

5.1 Experiments

1-20

1-12

实现细节。我们在Github上采用了CRNN [7]、ASTER [8]、MORAN [12]、SAR [13]、SEED [14]、MASTER [34]、ABINet [35]和TransOCR [36]的现成PyTorch实现,以在收集的CTR数据集上复现实验结果。所有基线实验均在具有11GB内存的NVIDIA RTX 2080Ti GPU上进行。为了保持现有识别器的时间效率并使识别器更容易识别文本图像,我们将输入图像调整为32 × 256的大小进行所有实验。我们利用每个数据集的验证集根据识别准确性选择最佳超参数,然后使用测试集对基线进行评估。为方便起见,我们将四个数据集的字母表合并用于所有实验,得到总共包含7,934个字符的字母表。对于基线,没有使用其他类似数据增强和预训练的策略。

评估协议。实际上,公平比较不可或缺的是统一的评估协议。遵循ICDAR2019 ReCTS竞赛[10],我们使用一些规则将预测结果和标签进行转换:(1)将全角字符转换为半角字符;(2)将繁体中文字符转换为简化字符;(3)将大写字母转换为小写字母;(4)移除所有空格。在这些转换之后,我们使用广泛使用的准确率(ACC)指标来评估基线。此外,归一化编辑距离(NED)用于综合评估基线的性能,因为与英文文本识别数据集相比,CTR数据集包含更多的长文本图像。ACC和NED的取值范围均为[0,1]。较高的ACC和NED表示评估基线的性能较好。

实验结果。首先,我们分析不同方法的实验结果(见表格4)。我们观察到CRNN [7]在每个数据集上的性能优于那些传统的基于注意力的识别器(即MORAN [12]、SEED [14]和SAR [13]),后者在遇到含有较长中文文本的图像时容易出现注意力漂移问题[9]。虽然CRNN在场景数据集上的性能不如基于Transformer的方法,但CRNN具有更少的参数并在推理中耗时更短。此外,我们注意到SEED在所有数据集上的表现都不好。可能的原因是SEED需要将每个文本图像映射到由fastText [38]引导的相应语义嵌入,而中文文本通常包含复杂的语义,从而给语义学习过程带来困难。显然,TransOCR [36]在对于模型更灵活地建模序列模式方面优于其他方法。接下来,我们从数据集的角度分析实验结果。如表格4所示,由于手写体数据集中存在涂写,所有基线在该数据集上的表现都不好。正如表格3所示,手写体数据集中近40%的文本样本被标记为“涂写”。实际上,为了加快书写速度,写作者可能会连接或省略一些笔画,这确实给现有方法带来了困难。相反,在文档数据集中,由于该数据集中的文本样本更易于识别,所有基线的识别准确率都能够超过90.0%。尽管场景数据集包含更多的样本,但仍然存在一些问题(如遮挡、背景混淆、模糊等)挑战着基线方法,导致在场景数据集上性能相对较差。对于网络数据集,所有基线的性能都低于场景数据集,可能是因为训练样本的稀缺性。

5.2 Discussions

在合成数据集上进行预训练。考虑到之前的英文文本识别方法往往是在大规模的合成数据集上进行训练的,我们也制作了一个合成的中文文本识别(CTR)数据集,以预训练基线模型,进一步提高性能。关于合成CTR数据集的详细信息和实验结果可以在补充材料中找到。通过广泛的实验,我们观察到使用合成数据集对基线模型进行预训练确实在大多数情况下可以提高性能。尽管使用了大规模的合成数据集进行预训练,但由于中文文本的特点,基线模型仍然无法达到预期的性能。

PRAB的有效性。考虑到每个中文字符都可以根据cjkvi-ids11分解成特定的部首序列,我们提出了一个可插拔的部首感知分支(PRAB),为每个字符引入更精细的监督(即部首)。我们通过为第4节中提到的所有基于注意力的方法装备PRAB来评估其有效性。通过实验结果(在补充材料中显示),我们观察到当所提出的PRAB用于提供部首级别的监督时,基于注意力的识别器在四个数据集上的表现都更好,这验证了PRAB的有效性。具体而言,借助于PRAB,MORAN、SAR和TransOCR的平均准确率分别提高了1.83%、3.35%和2.33%。

对困难案例的分析。我们手动选择了一些困难案例(例如遮挡、倾斜或弯曲、混乱的背景、模糊和竖直)并分析了基线模型在这些案例上的性能。请注意,“涂鸦”情况主要与手写数据集相关,因此我们不单独分析“涂鸦”案例。这些困难案例的实验结果显示在表5中。特别地,我们观察到TransOCR [36]与其他基线相比,在适应每个困难案例时表现得更好。得益于自注意机制,这个识别器可以轻松应对非常规的文本布局,如倾斜和弯曲,或者减轻由混乱的前景(遮挡)或混乱的背景引起的噪音。有趣的是,ASTER[8]在大多数情况下在NED方面的表现优于TransOCR [36],因为ASTER使用的STN可以增加对一定程度的倾斜的困难样本的识别能力。此外,基于CTC的CRNN [7]简单地将原始输入转化为1维特征,因此在竖直文本图像上表现较差。总体而言,在这些困难案例中仍有很大的改进空间。

6 Conclusions

在本文中,我们首先讨论了为何在中文文本识别领域关注相对较少的可能原因。为了解决这些问题,我们收集了公开可用的数据集,并将它们分成场景、网络、文档和手写数据集。我们还分析了每个数据集的特点。然后,我们对中文文本识别(CTR)中的评估协议进行了标准化(例如,研究人员是否应将繁体和简体中文字符视为相同的字符),这使得没有中文字符知识的研究人员也能参与CTR研究。最后,我们选择了八种代表性的方法作为基线模型应用于收集的数据集上。通过实证研究,我们观察到将中文字符知识与模型相结合对中文文本识别任务是有帮助的,这也为未来CTR的研究工作提供了指导。

📙 预祝各位 前途似锦、可摘星辰


  • 🎉 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️
  • ❤️ 过去的每一天、想必你也都有努力、祝你披荆斩棘、未来可期
  • 🍊 深度学习模型训练推理——基础环境搭建推荐博文查阅顺序【基础安装—认真帮大家整理了】
  • 🍊 计算机视觉:硕博士,交流、敬请查阅
  • 🍊 点赞 👍 收藏 ⭐留言 📝 都是博主坚持写作、更新高质量博文的最大动力!

9-9

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/125009.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NIFI实现JSON转SQL并插入到数据库表中

说明 本文中的NIFI是使用docker进行安装的,所有的配置参考:docker安装Apache NIFI 需求背景 现在有一个文件,里面存储的是一些json格式的数据,要求将文件中的数据存入数据库表中,以下是一些模拟的数据和对应的数据库…

初试小程序轮播组件

文章目录 一、轮播组件(一)swiper组件1、功能描述2、属性说明 (二)swiper-item组件1、功能描述2、属性说明 二、案例演示(一)运行效果(二)实现步骤1、创建小程序项目2、准备图片素材…

工程管理系统简介 工程管理系统源码 java工程管理系统 工程管理系统功能设计

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管…

微信小程序 房贷计算器 js代码终极版

这里写目录标题 展示图1.在utils 中创建文件calculateMortgage.ts2. 在需要使用的地方引入并传参 展示图 1.在utils 中创建文件calculateMortgage.ts /** 假设房贷本金是60万,贷款年利率为4.8%即月利率为0.4%,分20年即240期偿还,等额本金还款…

AWS-数据库迁移工具DMS-场景:单账号跨区域迁移RDS for Mysql

参考文档: 分为几个环节: 要使用 AWS DMS 迁移至 Amazon RDS 数据库实例: 1.创建复制实例 有坑内存必须8g或者以上,我测试空库 都提示内存不足 2.创建目标和源终端节点 目标空库也得自己创建哈 3.刷新源终端节点架构 4.创建迁…

echarts环图配置

echarts环图配置 1、安装echarts npm install echarts4.9.02、页面引入echarts import echarts from echarts;3、应用 template片段 <div class"chart-wrap"><div id "treeChart" style "width: 180px; height:180px;" ><…

vite介绍

vite vite是一种新的前端构建工具&#xff0c;vite借助了浏览器对ESM的支持&#xff0c;采用和传统webpack打包完全不一致的unbundle打包机制&#xff1b; vite的快主要体现在两个方面&#xff0c;快速的冷启动和快速的热更新 快速的冷启动&#xff1a;vite只需启动一台静态页…

LeetCode刷题笔记【24】:贪心算法专题-2(买卖股票的最佳时机II、跳跃游戏、跳跃游戏II)

文章目录 前置知识122.买卖股票的最佳时机II题目描述贪心-直观写法贪心-优化代码更简洁 55. 跳跃游戏题目描述贪心-借助ability数组贪心-只用int far记录最远距离 45.跳跃游戏II题目描述回溯算法贪心算法 总结 前置知识 参考前文 参考文章&#xff1a; LeetCode刷题笔记【23】…

SpringBoot隐藏文件

1.设置 2.输入file Types 3.点击忽略文件或者文件夹 4.成功

Linux下go环境安装、环境配置并执行第一个go程序

一、安装 1.Golang对Linux的内核版本要求 GO对Linux内核版本最低要求是 2.6.23&#xff0c;对应要求操作系统版本是&#xff1a; RHEL 6.0CentOS 6.0即&#xff0c;不支持 (RHEL 和 CentOS) 的 (4.x or 5.x)。2.下载golang的代码版本 Golang的官网下载地址&#xff1a;https:…

Qt 简单闹钟

//wiget.h#ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTime> //时间类 #include <QTimer> //定时器类 #include <QTextToSpeech> #include <QDebug> QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPA…

文件上传与下载

文章目录 1. 前端要求2. 后端要求 1. 前端要求 //采用post方法提交文件 method"post" //采用enctype属性 enctype"" //type属性要求 type"file"2. 后端要求 package com.itheima.reggie.controller;import com.itheima.reggie.common.R; impo…

(数字图像处理MATLAB+Python)第十二章图像编码-第三、四节:有损编码和JPEG

文章目录 一&#xff1a;有损编码&#xff08;1&#xff09;预测编码A&#xff1a;概述B&#xff1a;DM编码C&#xff1a;最优预测器 &#xff08;2&#xff09;变换编码A&#xff1a;概述B&#xff1a;实现变换编码的主要问题 二&#xff1a;JPEG 一&#xff1a;有损编码 &am…

README

一、Markdown 简介 Markdown 是一种轻量级标记语言&#xff0c;它允许人们使用易读易写的纯文本格式编写文档。 应用 当前许多网站都广泛使用 Markdown 来撰写帮助文档或是用于论坛上发表消息。例如&#xff1a;GitHub、简书、知乎等 编辑器 推荐使用Typora&#xff0c;官…

使用Akka的Actor模拟Spark的Master和Worker工作机制

使用Akka的Actor模拟Spark的Master和Worker工作机制 Spark的Master和Worker协调工作原理 在 Apache Spark 中&#xff0c;Master 和 Worker 之间通过心跳机制进行通信和保持活动状态。下面是 Master 和 Worker 之间心跳机制的工作流程&#xff1a; Worker 启动后&#xff0c…

Redis 7 第九讲 微服务集成Redis 应用篇

Jedis 理论 Jedis是redis的java版本的客户端实现&#xff0c;使用Jedis提供的Java API对Redis进行操作&#xff0c;是Redis官方推崇的方式&#xff1b;并且&#xff0c;使用Jedis提供的对Redis的支持也最为灵活、全面&#xff1b;不足之处&#xff0c;就是编码复杂度较高。 …

如何选择合适的HTTP代理服务器

HTTP代理服务器是一种常见的网络代理方式&#xff0c;它可以帮助用户隐藏自己的IP地址&#xff0c;保护个人隐私和安全。然而&#xff0c;选择合适的HTTP代理服务器并不容易&#xff0c;需要考虑多个因素。本文将介绍如何选择合适的HTTP代理服务器。 了解代理服务器的类型 HTT…

中使用pack局管理器:管理器布置小部件

一、说明 在本教程中&#xff0c;我们将了解如何制作登录 UI。今天的教程将重点介绍如何使用 Tkinter 的pack布局管理器。 二、设计用户界面 什么是布局管理器&#xff1f;创建图形界面时&#xff0c;窗口中的小部件必须具有相对于彼此排列的方式。例如&#xff0c;可以使用微件…

Vue + Element UI 前端篇(十一):第三方图标库

Vue Element UI 实现权限管理系统 前端篇&#xff08;十一&#xff09;&#xff1a;第三方图标库 使用第三方图标库 用过Elment的同鞋都知道&#xff0c;Element UI提供的字体图符少之又少&#xff0c;实在是不够用啊&#xff0c;幸好现在有不少丰富的第三方图标库可用&…

Python 网页爬虫原理及代理 IP 使用

目录 前言 一、Python 网页爬虫原理 二、Python 网页爬虫案例 步骤1&#xff1a;分析网页 步骤2&#xff1a;提取数据 步骤3&#xff1a;存储数据 三、使用代理 IP 四、总结 前言 随着互联网的发展&#xff0c;网络上的信息量变得越来越庞大。对于数据分析人员和研究人…