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.mzph.cn/news/63449.shtml

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

相关文章

企业架构LNMP学习笔记3

服务器基本环境配置: 1、安装虚拟机,centos7.9 操作系统; 2、网络配置; 3、机器名FQDN设置; 4、DNS解析设置,本地hosts设置; 5、配置yum源环境; 6、vim安装配置; …

RealVNC配置自定义分辨率(AlmaLinux 8)

RealVNC 配置自定义分辨率(AlmaLinux8) 参考RealVNC官网 how to set up resolution https://help.realvnc.com/hc/en-us/articles/360016058212-How-do-I-adjust-the-screen-resolution-of-a-virtual-desktop-under-Linux-#standard-dummy-driver-0-2 …

Docker环境搭建Prometheus实验环境

环境: OS:Centos7 Docker: 20.10.9 - Community Centos部署Docker 【Kubernetes】Centos中安装Docker和Minikube_云服务器安装docker和minikube_DivingKitten的博客-CSDN博客 一、拉取Prometheus镜像 ## 拉取镜像 docker pull prom/prometheus ## 启动p…

今天使用python进行开发

前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…

OpenCV(十一):图像仿射变换

目录 1.图像仿射变换介绍 仿射变换: 仿射变换矩阵: 仿射变换公式: 2.仿射变换函数 仿射变换函数:warpAffine() 图像旋转:getRotationMatrix2D() 计算仿射变换矩阵:getAffineTransform() 3.demo 1.…

Java 枚举是什么?什么是枚举类?枚举类的用途?

目录 1. 什么是枚举? 2. 枚举类 3. 枚举类的用途 1. 什么是枚举? 我们可以从字面意思来理解,枚:一枚一枚的,举:举例,举出,将二者意思结合起来可以理解为一个一个的举出。 这样听…

浅谈城市轨道交通视频监控与AI视频智能分析解决方案

一、背景分析 地铁作为重要的公共场所交通枢纽,流动性非常高、人员大量聚集,轨道交通需要利用视频监控系统来实现全程、全方位的安全防范,这也是保证地铁行车组织和安全的重要手段。调度员和车站值班员通过系统监管列车运行、客流情况、变电…

ESLint 中的“ space-before-function-paren ”相关报错及其解决方案

ESLint 中的“ space-before-function-paren ”相关报错及其解决方案 出现的问题及其报错: 在 VScode 中,在使用带有 ESLint 工具的项目中,保存会发现报错,并且修改好代码格式后,保存会发现代码格式依然出现问题&…

MySQL数据库学习【进阶篇】

MySQL数据库学习进阶篇 MySQL进阶篇已经更新完毕,点击网址查看👉:MySQL数据库进阶篇

十五、pikachu之CSRF

文章目录 一、CSRF概述二、CSRF实战2.1 CSRF(get)2.2 CSRF之token 一、CSRF概述 Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击&#xf…

基于白鲸算法优化的BP神经网络(预测应用) - 附代码

基于白鲸算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于白鲸算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.白鲸优化BP神经网络2.1 BP神经网络参数设置2.2 白鲸算法应用 4.测试结果:5.Matlab代码 摘要…

k8s 启动和删除pod

k8s创建pod pod的启动流程 流程图 运维人员向kube-apiserver发出指令(我想干什么,我期望事情是什么状态) api响应命令,通过一系列认证授权,把pod数据存储到etcd,创建deployment资源并初始化。(期望状态) controller通过list-wa…

jenkins 发布job切换不同的jdk版本/ maven版本

1. 技术要求 因为有个新的项目需要使用jdk17 而旧的项目需要jdk1.8 这就需要jenkins在发布项目的时候可以指定jdk版本 2. 解决 jenkins全局工具配置页面 配置新的jdk 路径 系统管理-> 全局工具配置 如上新增个jdk 名称叫 jdk-17 然后配置jdk-17的根路径即可(这…

强化自主可控,润开鸿发布基于RISC-V架构的开源鸿蒙终端新品

2023 RISC-V中国峰会于8月23日至25日在北京召开,峰会以“RISC-V生态共建”为主题,结合当下全球新形势,把握全球新时机,呈现RISC-V全球新观点、新趋势。本次大会邀请了RISC-V国际基金会、业界专家、企业代表及社区伙伴等共同探讨RISC-V发展趋势与机遇,吸引超过百余家业界企业、高…

【Go 基础篇】Go语言中的自定义错误处理

错误是程序开发过程中不可避免的一部分,而Go语言以其简洁和高效的特性闻名。在Go中,自定义错误(Custom Errors)是一种强大的方式,可以为特定应用场景创建清晰的错误类型,以便更好地处理和调试问题。本文将详…

关于Incapsula reese84加密的特征研究

最近研究了下reese84的加密算法,基本上两个参数的加密__utmvc和token,因为nodejs调用会有内存问题,没有采用补环境的方式解决,用python扣的算法 1:__utmvc参数的生成是一个ob混淆,ast处理之后调试难度不是很大 测试结…

OpenCV(二):认识Mat容器

目录 1.什么是Mat类 2.Mat类能存储的数据 整数类型(有符号和无符号): 浮点数类型: 布尔类型: 3.Mat类的创建 1.利用矩阵宽、高和类型参数创建Mat类 2.利用矩陈Size(结构和数据类型参数创建Mat类 3.利用已有Mat…

红石外汇|每日汇评:如非农数据疲软的情况下,黄金是否会突破1955美元的100日移动平均线?

1、金价已进入 1,950 美元下方盘整阶段,关注美国非农就业数据; 2、在关键就业数据和美国劳工节长周末之前,美元出现空头回补; 3、9月份开始,金价关注 100 日移动平均线 1955 美元; 金价交易接近一个月高点…

Windows右键添加用 IDEA 打开

1.安装IDEA时 安装时会有个选项来添加,如下: 勾选即可 2.修改注册表 安装时未勾选,可以把下面代码中程序路径改为自己的,保存为对应的 idea.reg文件,双击即可 Windows Registry Editor Version 5.00[HKEY_CLASSES…

Golang单元测试举例

1.第一个例子 cal.go package mainfunc addUpper(n int) int {res : 0for i : 1; i < n; i {res i}return res }func getSub(n1 int, n2 int) int {return n1 - n2 }cal_test.go package main//测试文件名必须是_test.go结尾 //测试函数必须Test开头 import ("fmt…