OCR原理解析

目录

1.概述

2.应用场景

3.发展历史

4.基于传统算法的OCR技术原理

4.1 图像预处理

4.1.1 灰度化

4.1.2 二值化

4.1.3 去噪

4.1.4 倾斜检测与校正

4.1.4.2 轮廓矫正

4.1.5 透视矫正

4.2 版面分析

4.2.1 连通域检测文本

4.2.2 MSER检测文本

4.3 字符切割

4.3.1 连通域轮廓切割

4.3.2 垂直投影切割

4.4 字符识别

4.4.1 识别原理

4.5 版面恢复

4.6 后处理

4.7 传统OCR局限性

5.基于深度学习的OCR技术原理

5.1 两阶段文本识别

5.1.1 文本检测

5.1.1.1 基于回归的方法

5.1.1.2 基于分割的方法

5.1.1.3 文本检测算法发展

5.1.2 文本识别

5.1.2.1 基于CTC技术的预测方法

5.1.2.2 基于Attention机制的网络模型预测方法

5.1.2.3 文字识别算法发展

5.2 端到端文本识别

6.ChatOCR

7.总结


1.概述

OCR (Optical Character Recognition,光学字符识别)技术是一种将印刷体或手写文字转化为可编辑文本的技术。即将图像中的文字进行识别,并以文本的形式返回。

2.应用场景

OCR具有广泛的应用场景,涵盖了各个领域,如OCR识别车辆牌照实现快速通行和行车计费、识别票据快速录入信息、识别试卷辅助计算分数等,以下是一些主要的应用场景:

OCR生态图:

3.发展历史

1929年:德国科学家Tausheck首次提出了OCR的概念,设想利用机器来读取字符和数字

20世纪60年代:世界各国开始对OCR进行正式研究,研究人员将OCR技术理论运用到实际应用中,诞生了第一批OCR系统,但基本只支持数字和英文字母的识别,典型案例就是邮政编码自动识别系统。

20世纪70年代末:我国开始开始进行汉字识别研究,直到1986年研究才进入实际性阶段(863计划),相继推出各种OCR产品。

20世纪80年代:随着计算机技术的发展、扫描设备的逐渐提升以及计算机视觉的不断成熟,开始出现基于图像处理(二值化、投影分析等)和统计机器学习的OCR技术,识别准确度进一步提升。

21世纪:OCR场景逐渐复杂以及识别精度的要求不断提升,传统OCR逐渐不能满足已有需求,基于深度学习的技术让OCR识别效果更近一步。

4.基于传统算法的OCR技术原理

传统OCR基于图像处理(二值化、连通域分析、投影分析等)和统计机器学习(Adaboot、SVM),提取图片上的文本内容;用到的计算机视觉算法库主要有OpenCV、Halcon、VisionPro等,出于开源、多语言支持和方便易用的考虑,我们通常采用OpenCV进行开发,该算法主要流程如下:

4.1 图像预处理

图像预处理是一种在进行主要的图像分析之前,改进图像数据(消除无用信息,强化有用信息,或者提高计算速度)的技术。它可以增强图像质量,使得OCR引擎更好地分离出文本和背景,提高文本的识别准确度,常用图像预处理操作有灰度化、二值化、去噪、倾斜检测与校正、透视矫正等。

4.1.1 灰度化

将彩色图像转化为灰度图像。因为在大多数情况下,我们只需要关注文字和背景的对比度,而不需要关注它们的颜色。灰度化能将计算复杂度大幅降低,同时保留主要信息。

4.1.2 二值化

将图像转换为只包含黑白两色的图像。二值化过程可以通过设定一个阈值来实现,所有低于这个阈值的像素将被标记为黑色,而高于阈值的像素将被标记为白色。这样可以进一步强化文字与背景的对比度。

4.1.3 去噪

使用各种滤波器(例如,中值滤波器、高斯滤波器等)来减少图像中的噪声,如尘埃、划痕、噪点等

4.1.4 倾斜检测与校正

OCR系统需要自动纠正图像中的倾斜,以确保文本的正确识别。这个过程包括检测图像中文本行的倾斜角度,并进行相应的校正,有如下两种常用倾斜校正算法:

4.1.4.1 霍夫曼直线矫正

主要流程如下:

矫正效果如下:

4.1.4.2 轮廓矫正

主要流程如下:

矫正效果如下:

4.1.5 透视矫正

主要流程如下:

矫正效果如下:

4.2 版面分析

识别图像中的文本区域、非文本区域以及文本的结构信息,如列、行、块、标题、段落、表格等,为后续的文字提取步骤提供基础,主要检测文本算法有连通域检测文和MSER检测文本

4.2.1 连通域检测文本

传统检测算法,一般可以分为两个部分,第一个是连通域的提取,第二个是文字连通域的判别。其中,将图像二值化后,通过连通域提取环节会将所有的连通域找出来作为候选集,然后根据启发式规则算法判断提取的连通域是否是文字连通域。流程如图所示:

输出结果:

4.2.2 MSER检测文本

MSER的处理过程:对一幅灰度图像取不同的阈值进行二值化处理,阈值从0至255递增,这个递增的过程就好比是一片土地上的水面不断上升,随着水位的不断上升,一些较低的区域就会逐渐被淹没,从天空鸟瞰,大地变为陆地、水域两部分,并且水域部分在不断扩大。在这个“漫水”的过程中,图像中的某些连通区域变化很小,甚至没有变化,则该区域就被称为最大稳定极值区域。在一幅有文字的图像上,文字区域由于颜色(灰度值)是一致的,因此在水平面(阈值)持续增长的过程中,一开始不会被“淹没”,直到阈值增加到文字本身的灰度值时才会被“淹没”。流程如图所示:

4.3 字符切割

在深度学习序列化模型还未兴起的时候,传统文本识别还不能直接对文本行直接进行文字识别,因为词与词的组合、词组与词组的组合无法枚举穷尽,对这些词组直接分类基本不可能。相对于词语、词组,字符的个数可以穷尽,如果把文本切分成单个字符来识别,任务会简单很多。主要有连通域轮廓切割和垂直投影切割两种方式:

4.3.1 连通域轮廓切割

每个文本行切片的局部图中,单个字符都是一个个独立的对象存在,如果能找到单个独立对象的轮廓信息,那么他的最小外接矩形也能通过一些opencv的函数获取得到,基于连通域的大致流程原理如下:

4.3.2 垂直投影切割

简单场景下,文本行图像中,除了文字像素就是背景像素,字符与字符之间的空隙像素一般较少,而在文字内像素分布较多,基于该特征,将文本行切片二值化变成黑底白字,统计每列中白色像素的个数,得到每列的白色像素的分布,然后根据规律找到合适的分割间隔点并对单字符进行分割,得到最终结果,流程图如下所示:

统计每列白色像素个数和画出垂直投影分布图示例:

4.4 字符识别

在传统OCR文字识别领域,是将文本行的字符识别看成一个多分类问题,中文领域字符识别类别大概有5800,包括常见汉字、标点符号、特殊字符等。

4.4.1 识别原理

在字符分类之前,我们首先将字符切片归一化成统一尺寸,参考经典手写字符分类尺寸大小28x28,统一尺寸后根据图像的常见算法去提取特征,比如hog、sift等;最后分类器选择支持向量机、逻辑回归、决策树等,模型训练完成可以集成端到端进行预测识别。大致流程如下:

像素特征:指图像中每个像素的颜色、亮度、饱和度等属性

HOG特征:也叫方向梯度直方图特征,将输入的图像分割成一个个小小的连通区域,这些独立的区域被称为“细胞单元”。然后,对每一个细胞单元中的所有像素点,计算其梯度或边缘的方向信息,并对这些信息进行统计,生成相应的直方图。最后,将所有细胞单元的直方图按照一定的规则组合起来,就构成了这个图像的HOG特征描述符。

SIFT特征:中文名为尺度不变特征变换,是一种在图像处理领域广泛应用的局部特征提取算法,核心思想实在不同尺度的空间中寻找并精确定位极值点(也称为关键点或特征点),这些极值点通常是图像中比较突出的元素,如角点和边缘点等,并且不会因为光照、仿射变换或者噪声等因素而变化。

4.5 版面恢复

与版面分析相对应,将识别后的文字恢复原始文档图片的排列方式,包括段落、位置和顺序等信息。这个过程不仅涉及到单个字符的识别,也需要考虑文本的布局和结构。例如,对于包含表格、段落样式、文字样式和文档版面的复杂文档,版面恢复可以确保识别结果与原图片的版面布局一致。

4.6 后处理

由于图像质量、字体、噪声等原因,OCR识别文本后往往存在一定的错误,使用合适的后处理方案可以进一步提升OCR识别准确率,后处理阶段主要包含两个核心任务:文本纠错和文本结构化。

文本纠错主要目标是纠正OCR输出文本中的错误文字,通常利用先验词典进行实现或经验规则来进行纠错,也可以采用基于语言模型的纠错机制等方法来对OCR结果进行进一步的校正。

文本结构化主要目标是从OCR输出的文本中定位出所需的信息,并根据特定的应用需求将这些信息进行有效的处理,如从一张包含名片信息的图片中,通过OCR技术识别出名片上的文字,然后利用命名实体识别技术标记出名片中的姓名、电话、邮箱等语义实体 。

4.7 传统OCR局限性

虽然传统OCR技术在许多场景中表现得相当出色,但这种技术确定存在一些局限性,尤其实在比较复杂的场景下,一下是一些主要的局限性:

  • 对清晰度和质量的高要求:传统的OCR技术高度依赖图像的质量。如果输入的图像质量较差(例如,图像模糊、对比度低、光照不均、存在噪声等),则OCR的准确度可能会大大降低。
  • 对字体和布局的依赖性:传统的OCR技术通常基于特定的字体和布局进行训练。因此,如果输入的文本使用了训练数据中未包含的字体或者不同的布局,那么识别精度可能会受到影响。
  • 复杂背景下识别效果差:如果文本字符与背景紧密相连或者文本在复杂的背景上,传统的OCR系统可能会难以准确地分割和识别字符。类似地,如果字符被装饰或者以艺术字形式呈现,传统的OCR系统可能也无法准确地识别出这些字符。
  • 手写识别效果差:对于手写文字的识别,传统的OCR系统通常会遇到更大的挑战,因为手写文字的形状、大小和倾斜度变化非常大,且往往缺乏清晰的边界。
  • 无法处理多语言和特殊字符:传统的OCR系统通常针对单一或者少数几种语言进行优化,对于其他语言或者特殊字符,例如数学符号、音乐符号等,可能无法提供满意的识别效果。
  • 缺乏上下文理解:传统的OCR技术通常将字符识别作为一个独立的任务进行,而没有考虑字符的上下文信息。因此,如果一个字符在图像中模糊不清,OCR系统可能无法准确地识别出这个字符。

5.基于深度学习的OCR技术原理

传统OCR技术在处理复杂的图像和不规则形状的文本时,效果并不理想。深度学习时代,机器可以“学习”处理复杂任务,并且对数据具有很好的适应性。通过结合深度学习,建立更为强大和灵活的OCR模型,它能够处理各种类型的文本,并且提高字符识别的准确率。

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

基于深度学习的场景文字识别主要包括两种方法,第一种是分为文字检测和文字识别两个阶段;第二种则是通过端对端的模型一次性完成文字的检测和识别。

5.1 两阶段文本识别

5.1.1 文本检测

给定输入图像或视频,找出文本区域,可以是单字符位置或者整个文本行位置;

5.1.1.1 基于回归的方法

基于回归的文本检测是一种自然场景文本检测方法,这种方法主要是借鉴目标检测技术,文本检测方法只有两个类别,图像中的文本视为待检测的目标,其余部分视为背景。通过设定anchor回归检测框或者直接做像素回归实现,这类方法对规则形状文本检测效果较好,但是对不规则形状的文本检测效果会相对差一些。

  • 设定anchor回归检测框方式实现思路

Anchor,也被称为锚框或先验框,主要思路是在图像上预设参照框,这些参照框有不同的大小和形状,并且会在图片上滑动,形成不同的候选框,对于每个候选框,我们都需要预测两个参数:一个是回归值,这个值描述了候选框相对于锚框的位置偏移量;另一个则是分类值,用于判断该候选框是否包含物体。

主要方法有CTPN、Textbox系列和EAST。

  • 像素回归方式实现思路

像素回归可以通过图像语义分割获得可能的文本像素,然后通过像素点进行回归或对文本像素进行聚合得到文本框位置。

主要方法有CRAFT和SA-Text。

  • 优缺点:

优点:对规则形状文本检测效果较好

缺点:无法准确检测不规则形状文本

5.1.1.2 基于分割的方法

基于分割的识别算法是自然场景文本检测算法的一个重要分支,通常包括3个步骤:图像预处理、单字符分割和单字符识别,实现思路与传统OCR识别过程中的字符切割流程类似。

主要实现思路如图所示:

算法示意图:

主要算法有PixelLink、PSENet、DB等

参考:基于分割思想的文本检测算法-腾讯云开发者社区-腾讯云

  • 优缺点:

优点:对不同形状文本的检测效果都比较好

缺点:后处理复杂且耗时长,重写文本识别效果差

5.1.1.3 文本检测算法发展

5.1.2 文本识别

在传统的文本识别方法中,任务分为3个步骤,即图像预处理、字符分割和字符识别。需要对特定场景进行建模,一旦场景变化就会失效。面对复杂的文字背景和场景变动,基于深度学习的方法具有更优的表现。多数现有的识别算法可用如下统一框架表示,算法流程被划分为4个阶段:

常见文本识别算法可以分为基于CTC技术的方法和基于Attention机制的网络模型两大类。

5.1.2.1 基于CTC技术的预测方法

CTC(Connectionist Temporal Classification)是一种经常被用于语音识别和文本识别的算法。它的主要作用是解决输入序列和输出序列长度不同、无法直接对齐的问题。

  • 技术说明

CTC的关键创新是引入了一个特殊的符号,通常被称为“空格”字符或者“blank”字符。这个字符没有实际的语义含义,但它在训练模型时起着关键的作用。

由于OCR识别过程中,输入图像的宽度往往是固定的,而输出的字符数量是变化的,这导致了输入和输出之间存在一个“不对齐”的问题。

CTC通过引入“空格”字符,有效地解决了这个问题。在训练时,我们可以为每个可能的字符预测一个概率,同时还预测一个“空格”字符的概率。然后,我们可以通过一种叫做“解码”的过程,从这些预测的概率中生成最终的字符序列。

  • 典型模型(CRNN)

CRNN网络结构包含三部分,从下到上依次为:

1.卷积层,使用深度CNN,对输入图像提取特征。

2.循环层,使用双向RNN(BLSTM)对特征序列进预测,输出预测标签(真实值)分布。

3.转录层,使用 CTC 损失,把从循环层获取的一系列标签分布转换成最终的标签序列。

  • 小结

基于CTC的解码方式在处理定长输入和变长输出的问题上有着显著的优势,但由于其预测每个字符时并未充分利用上下文信息,所以在处理不规则形状的文本(如弯曲文本或者手写文本)时,效果可能会有所下降。

5.1.2.2 基于Attention机制的网络模型预测方法

我们在阅读时,总是会关注到一些特定的部分,而忽略其他不太重要的信息。在这个过程中,我们总是在上下文中寻找重要的信息,这就是Attention机制。

基于Attention的解码方式是一种在深度学习中广泛使用的方法,尤其在处理序列型问题,如机器翻译和OCR时,表现优异。它之所以被称为"Attention"(注意力),是因为这种机制能模仿人类在处理信息时会关注关键部分的特性。

  • 技术说明

Attention机制的基本思想是,在进行预测时,模型应该“关注”输入中最相关的部分。在OCR的环境中,这意味着在预测某个字符时,模型应该关注图像中与该字符最相关的区域。

Seq2Seq+Attention模型就是基于Attention的一种典型模型。这种模型通常由两部分组成:编码器(Encoder)和解码器(Decoder)。编码器的任务是将输入图像转化为一组特征向量。解码器的任务是将这些特征向量转化为字符序列。

与传统的Seq2Seq模型不同,这里的解码器在生成每一个字符时,都会通过Attention机制来选择和关注哪些特征向量。换句话说,模型会“关注”那些对当前预测最有帮助的特征。

  • 典型模型(ASTER)

引入注意力机制,整合矫正和识别,改善大规则文字识别

1.卷积层:使用DCNN,将输入的图像转化为一组特征向量

2.循环层:使用双向RNN(BLSTM)对特征序列进预测,将这些特征向量转化为字符序列,在生成每一个字符时,解码器都会使用Attention机制来选择和关注哪些特征向量。

  • 小结

基于Attention的解码方式虽然在处理不规则形状的文本,如弯曲文本或手写文本时效果较好,但是需要注意的是,当处理的文本过长或者过短时,这种方法可能效果会有所降低。此外,由于模型需要考虑全部的上下文信息,因此计算复杂度相对较高,这也是基于Attention的解码方式需要注意的一点。

5.1.2.3 文字识别算法发展

5.2 端到端文本识别

与检测-识别的多阶段OCR不同,深度学习使端到端的OCR成为可能,将文本的检测和识别统一到同一个工作流中,其基本思想是共享同一个主干网络,并设计不同的检测模块和识别模块,可以同时训练文本检测和文本识别。

  • 典型模型(FOTS)

FOTS是一个快速的端对端的文字检测与识别框架,通过共享训练特征、互补监督的方法减少了特征提取所需的时间,从而加快了整体的速度。其整体结构如图所示:

1.卷积共享:从输入图象中提取特征,并将底层和高层的特征进行融合;

2.文本检测:通过转化共享特征,输出每像素的文本预测;

3.ROIRotate:将有角度的文本块,通过仿射变换转化为正常的轴对齐的本文块;

4.文本识别:使用ROIRotate转换的区域特征来得到文本标签。

  • 小结

端到端OCR的主要优点包括模型小,速度快,以及整合了文本检测和识别的功能,但由于只有一个模型,可解释性更差,且目前仅在英文、数字识别领域识别效果较好,中文领域识别准确性有待提升。

6.ChatOCR

最近百度飞桨团队推出了一款基于文心大模型的通用图像关键信息抽取工具PP-ChatOCR。它结合了OCR文字识别和文心一言大语言模型,可以在多种场景下提取图像中的关键信息,效果非常惊艳。而传统的OCR识别技术的准确率容易受到多种因素影响,例如图像质量、字符布局、字体样式等。但当我们将OCR技术与大语言模型相结合时,可以避免繁杂的规则后处理,提升泛化能力,从而能够更智能、准确地理解和利用文本信息。

PP-ChatOCRv2体验地址:【PaddleX】PP-ChatOCRv2_AI应用-飞桨AI Studio星河社区

PP-ChatOCRv2效果演示图如下:

7.总结

尽管基于深度学习的OCR表现相较于传统方法更为出色,但是深度学习技术仍需要在OCR领域进行特化,而其中的关键正式传统OCR方法的精髓。因此我们仍需要从传统方法中汲取经验,使其与深度学习有机结合进一步提升OCR的性能表现。另一方面,作为深度学习的推动力,数据起到了至关重要的作用,因此收集广泛而优质的数据也是现阶段OCR性能的重要举措之一。相信随着大模型技术的发展,OCR表现也会越来越好。

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

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

相关文章

TiDB 在咪咕云原生场景下的实践

导读 咪咕是中国移动旗下的视频科技公司,门户系统是其核心业务之一。 为满足用户的多样化需求,咪咕计划对其数据库进行升级。 经过对中国主流国产数据库的测试评估后,咪咕选择了 TiDB,并成功将其落地于门户系统云化项目。 TiDB 为…

Linux系统之centos7编译安装Python 3.8

前言 CentOS (Community Enterprise Operating System) 是一种基于 Red Hat Enterprise Linux (RHEL) 进行源代码再编译并免费提供给用户的 Linux 操作系统。 CentOS 7 采用了最新的技术和软件包,并提供了强大的功能和稳定性。它适用于各种服务器和工作站应用场景&a…

分布式架构demo

1、外层创建pom 版本管理器 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.15</version><relativePath/> <!-- lookup parent from repository…

鉴源实验室 | 汽车网络安全攻击实例解析(三)

作者 | 张璇 上海控安可信软件创新研究院工控网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 引言&#xff1a;随着现代汽车技术的迅速发展&#xff0c;车辆的进入和启动方式经历了显著的演变。传统的物理钥匙逐渐被无钥匙进…

certbot—30秒部署你的HTTPS,永久免费,自动续约

在之前我已经介绍过部署反向代理的2种方式了。第一种是通过宝塔的反向代理配置然后开启HTTPS。 第二种是通过nginxproxymanager。 今天要给大家分享的是一个 certbot。 Certbot 是一个由 Lets Encrypt 开发的免费开源工具&#xff0c;用于自动化部署和管理 SSL/TLS 证书。它具有…

SpringBoot3.x + mp代码生成器(更新系列)

小伙伴们&#xff0c;有没有这样一个体验&#xff0c;每次开始写一个项目时&#xff0c;搭建项目环境&#xff0c;建entity&#xff0c;mapper&#xff0c;service&#xff0c;controller层文件的感到繁琐&#xff0c;这属实体力活呀&#xff01;然而&#xff0c;自从有了Mybat…

【二分查找】LeetCode1970:你能穿过矩阵的最后一天

本文涉及的基础知识点 二分查找算法合集 作者推荐 动态规划LeetCode2552&#xff1a;优化了6版的1324模式 题目 给你一个下标从 1 开始的二进制矩阵&#xff0c;其中 0 表示陆地&#xff0c;1 表示水域。同时给你 row 和 col 分别表示矩阵中行和列的数目。 一开始在第 0 …

【开源】基于JAVA的大病保险管理系统

项目编号&#xff1a; S 031 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S031&#xff0c;文末获取源码。} 项目编号&#xff1a;S031&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统配置维护2.2 系统参保管理2.3 大…

uniapp是否可以用elementUI等前端UI库、使用步骤以及需要注意的问题

文章目录 uniapp是否可以用elementUI等前端UI库使用方法和步骤问题如何解决 uniapp是否可以用elementUI等前端UI库 在PC端开发uniapp&#xff0c;可以用elementUI&#xff0c;因为elementUI就是PC端的。 在使用uniapp&#xff0c;选择vue2.0时&#xff0c;实测可以用nodejs16的…

java企业财务管理系统springboot+jsp

1、基本内容 &#xff08;1&#xff09;搭建基础环境&#xff0c;下载JDK、开发工具eclipse/idea。 &#xff08;2&#xff09;通过HTML/CSS/JS搭建前端框架。 &#xff08;3&#xff09;下载MySql数据库&#xff0c;设计数据库表&#xff0c;用于存储系统数据。 &#xff08;4…

三、使用CRT连接三台虚拟机

目录 1、建立连接 2、参数配置 3、设置主题,颜色和仿真 1、建立连接

SQL server 2016安装

1、关系数据库的基本概念。 行&#xff1a;每行成为一条“记录”或“元组”&#xff0c;用于描述一个对象的信息。 列&#xff1a;每列称为一个“字段”或“属性”&#xff0c;用于描述对象的一个属性。 2、主键与外键。 主键&#xff1a;键&#xff0c;即关键字。主键由一个或…

Android--Jetpack--Lifecycle详解

富贵本无根&#xff0c;尽从勤里得 一&#xff0c;定义 Lifecycle 是一个具备宿主生命周期感知能力的组件。它持有组件&#xff08;Activity/Fragment&#xff09;生命周期状态信息&#xff0c;并且允许其观察者监听宿主生命周期状态变化。 顾名思义&#xff0c;Lifecycle的主…

TA-Lib学习研究笔记(八)——Momentum Indicators 上

TA-Lib学习研究笔记&#xff08;八&#xff09;——Momentum Indicators 上 Momentum Indicators 动量指标&#xff0c;是最重要的股票分析指标&#xff0c;能够通过数据量化分析价格、成交量&#xff0c;预测股票走势和强度&#xff0c;大部分指标都在股票软件中提供。 1. A…

水利安全监测方案——基于RTU200的解决方案

引言&#xff1a; 水资源是人类赖以生存的重要基础&#xff0c;对于保障水利系统安全运行以及应对自然灾害起着关键作用。为了实现水利安全监测的目标&#xff0c;我们提出了基于RTU200的解决方案。本方案将结合RTU200的可靠性、灵活性和高效性&#xff0c;为您打造一个全面的…

[笔记]dubbo发送接收

公司需要使用java技术栈接入一套自定义的通讯协议&#xff0c;所以参考下dubbo的实现原理。 consumer 主要使用ThreadlessExecutor实现全consumer的全双工通讯。consumer创建本次请求的requestId用于将response和request匹配。 然后分以下几步完成一次请求发送并接收结果&…

Elasticsearch分词器--空格分词器(whitespace analyzer)

介绍 文本分析&#xff0c;是将全文本转换为一系列单词的过程&#xff0c;也叫分词。analysis是通过analyzer(分词器)来实现的&#xff0c;可以使用Elasticearch内置的分词器&#xff0c;也可以自己去定制一些分词器。除了在数据写入时将词条进行转换&#xff0c;那么在查询的时…

Spring 多数据源搭建

目录 前言 正文 1.Druid 介绍和使用 2.其他多数据源解决方案 总结 前言 对于复杂的业务和项目&#xff0c;可能在一个单体项目中存在需要连接多个数据库的情况。这时&#xff0c;就会使用到多数据源&#xff0c;实际中遇到的可能性比较大。 正文 如果一个项目中需要连…

@2023 中国家居家具行业数字化转型分析与案例解读|商派徐礼昭

作者&#xff1a;徐礼昭&#xff08;商派市场负责人&#xff0c;重构零售实验室负责人&#xff09; 中国的家居家具行业面临着市场竞争激烈、消费者需求多变等诸多挑战。为了应对这些挑战&#xff0c;许多品牌企业开始探索数字化转型的道路&#xff0c;以提升竞争力并满足消费…

java游戏攻略资讯网站的设计与实现springboot+vue

游戏攻略网站分为管理员与用户两种角色。 管理员的功能包括登录&#xff0c;用户管理&#xff0c;游戏分类管理&#xff0c;游戏攻略管理&#xff0c;游戏资讯管理等。 登录功能&#xff1a;管理员需要登录进入系统后台。 用户管理&#xff1a;实现用户信息的查询&#xff0c;修…