当前位置: 首页 > news >正文

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表现也会越来越好。

相关文章:

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 连…...

使用com组件编辑word

一个普通的窗体应用,6个button using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; u…...

国产Euler(欧拉)系统安装docker

国产的真™难用呀 生态又差还不开源 血泪经验 解压Docker安装包。 tar zxf docker-19.03.10.tgz 将解压后目录中的文件移动到“/usr/bin”下。 cp docker/* /usr/bin配置docker.service文件。 编辑docker.service文件。 vim /usr/lib/systemd/system/docker.service添加以…...

Linux 进程控制

文章目录 进程创建进程终止进程结果wait函数waitpid函数status参数 进程替换进程替换原理进程替换函数 补充/拓展 进程创建 fork函数 #include <unistd.h>pid_t fork(void);函数返回值&#xff1a; 在父进程中&#xff0c;fork函数返回子进程的进程ID&#xff08;PID&…...

[ Linux Audio 篇 ] 音频开发入门基础知识

在短视频兴起的背景下&#xff0c;音视频开发越来越受到重视。接下来将为大家介绍音频开发者入门知识&#xff0c;帮助读者快速了解这个领域。 轻柔的音乐、程序员有节奏感的键盘声、嗡嗡的发动机、刺耳的手提钻……这些声音是如何产生的呢&#xff1f;又是如何传到我们耳中的…...

关于高校电子邮件系统开通双因素认证的经验分享-以清华大学为例

清华大学信息化技术中心 马云龙 作者简介: 马云龙,男,清华大学信息化技术中心高级工程师;Coremail管理员社区大咖嘉宾 深耕高校计算机网络/信息化/网络安全岗位20年,对大规模计算机网络及信息系统规划,开发/建设,运维有深刻体会。 目前,越来越多的高校/企业/政府机关…...

「Swift」类淘宝商品瀑布流展示

前言&#xff1a;需要做一个类似于淘宝商品页面的瀑布流展示 结构分析&#xff1a; ps&#xff1a;图片来源 思路分析&#xff1a; 该瀑布流主要还是基于UICollectionView进行展示&#xff0c;只是在cell展示的UICollectionViewFlowLayout需要进行相应调整和自定义&#xff…...

道可云会展元宇宙平台全新升级,打造3D沉浸式展会新模式

随着VR虚拟现实、人工智能、虚拟数字人等元宇宙技术的快速发展&#xff0c;各个行业正试图通过元宇宙技术寻求新的发展突破口&#xff0c;会展行业也不例外。会展作为经贸领域的重要产业形态&#xff0c;越来越多的企业和组织开始寻求通过元宇宙技术为展会赋能&#xff0c;以满…...

Ant Design Pro初始化报错

今天按照官网步骤初始化项目&#xff0c;第一次报错 fatal: unable to access https://github.com/ant-design/ant-design-pro/: SSL certificate problem: unable to get local issuer certificate 致命&#xff1a;无法访问https://github.com/ant-design/ant-design-pro/&…...

第16届中国R会议暨2023X-AGI大会开幕,和鲸科技分享ModelOps在数据科学平台中的实践与应用

11月25日&#xff0c;第 16 届中国 R 会议暨 2023 X-AGI 大会在在中国人民大学逸夫会堂拉开帷幕&#xff0c;本次会议由中国人民大学统计学院、中国人民大学应用统计科学研究中心、统计之都、原灵科技和中国商业统计学会人工智能分会&#xff08;筹&#xff09;主办&#xff0c…...

❀My学习Linux命令小记录(12)❀

目录 ❀My学习Linux命令小记录&#xff08;12&#xff09;❀ 46.arp指令 47.tcpdump指令 48.chmod指令 49.chown指令 50.bash调用脚本指令 shell介绍 shell脚本的组成部分 脚本执行方式 检查脚本语法 bash之变量 变量的种类&#xff1a;根据生效的范围不同来区分 …...

MySQL学习day05

DCL&#xff08;Data Control Language&#xff09;数据控制语言学习 作用&#xff1a;用来创建数据库用户、控制数据库的访问权限 1&#xff09;查询用户&#xff1a; use mysql; select * from user; 2&#xff09;创建用户&#xff1a; create user 用户名主机名 identifi…...

JAVA面试题7

1.Java中的ClassLoader是什么&#xff1f; 它有什么作用&#xff1f; 答案&#xff1a;ClassLoader是一种加载Java类文件的机制&#xff0c;可以从不同的来源加载类文件&#xff0c;如本地文件系统、网络等。ClassLoader可以帮助实现模块化开发和动态加载类等功能。 2.什么是J…...

好用免费的AI换脸5个工具

在当今社会的发展中&#xff0c;人工智能&#xff08;Artificial Intelligence, AI&#xff09;扮演着关键的角色&#xff0c;其应用领域不断扩展。作为AI的一个分支&#xff0c;换脸技术近年来备受欢迎。这项技术使得将一个人的面部特征迁移到另一个人的照片或视频成为可能。除…...

【Linux】公网远程访问AMH服务器管理面板

目录 1. Linux 安装AMH 面板2. 本地访问AMH 面板3. Linux安装Cpolar4. 配置AMH面板公网地址5. 远程访问AMH面板6. 固定AMH面板公网地址 AMH 是一款基于 Linux 系统的服务器管理面板&#xff0c;它提供了一系列的功能&#xff0c;包括网站管理、FTP 管理、数据库管理、DNS 管理、…...

随笔-这都是命吗

我与鹏哥、小付有个小群&#xff0c;前几天&#xff0c;鹏哥在群里发了一个图&#xff0c;是他那个城市准备扶持的高新产业&#xff0c;有元宇宙、量子信息、生物制药、人工智能什么的。 先前的时候鹏哥给我说过&#xff0c;当地准备了六百多亩地&#xff0c;准备发展高新产业…...

优化网站性能,从容谈CDN加速的部署与运维

随着互联网的迅猛发展&#xff0c;网站的性能优化成为网站运维工作中不可或缺的一环。其中&#xff0c;CDN&#xff08;Content Delivery Network&#xff09;加速技术因其在全球范围内提供快速、可靠的内容分发而备受关注。本文将从一个网站运维的角度出发&#xff0c;深入探讨…...

JavaScript-事件

事件 事件流 指的是事件完整执行过程中的流动路径 两个阶段&#xff1a; 捕获阶段&#xff1a;从大到小冒泡阶段&#xff1a;从小到大 实际开发中都是使用事件冒泡为主 事件捕获 从DOM的根元素开始取执行对应的事件&#xff08;从外到里&#xff09; document.addEventLis…...

linux的磁盘管理

Linux 提供了多种工具和技术来进行磁盘管理。下面是对 Linux 磁盘管理的详细解释&#xff1a; 磁盘和分区&#xff1a; 磁盘&#xff08;硬盘&#xff09;&#xff1a;Linux 系统中的磁盘通常是通过 SATA、SCSI、NVMe 等接口连接的物理硬盘。可以使用工具如 lsblk、fdisk、pa…...

qt-C++笔记之主线程中使用异步逻辑来处理ROS事件循环和Qt事件循环解决相互阻塞的问题

qt-C笔记之主线程中使用异步逻辑来处理ROS事件循环和Qt事件循环解决相互阻塞的问题 code review! 文章目录 qt-C笔记之主线程中使用异步逻辑来处理ROS事件循环和Qt事件循环解决相互阻塞的问题1.Qt的app.exec()详解2.ros::spin()详解3.ros::AsyncSpinner详解4.主线程中结合使用…...

【Docker】从零开始:18.使用Dockerfile构造自己的KingbaseES数据库镜像

【Docker】从零开始&#xff1a;17.使用Dockerfile构造自己的数据库镜像 新建一个自定义目录并创建Dockerfile文件上传需要的文件到自定义目录下注意docker-circle-init.sh文件内容password 内容 开始打包注意打包完成后执行 尝试用工具连接数据库 kingbase.tar.gz 包过大我就上…...

YOLOv8独家改进《全网无重复 YOLOv8专属打造》感知聚合SERDet检测头:简单高效涨点,即插即用|检测头新颖改进

💡本篇内容:YOLOv8独家改进《全网无重复,YOLOv8专属》感知聚合SERDet检测头:高效涨点,即插即用|检测头新颖改进 💡🚀🚀🚀本博客 YOLO系列 + 全新原创感知聚合SERDet检测头 改进创新点改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可,附改进源代…...

Android Studio中Flutter项目找不到Android真机设备解决方法

起因&#xff1a;创建正常Android项目可以运行在真机设备上&#xff0c;创建flutter项目就找寻不到Android真机设备。 1&#xff1a;在flutter sdk安装目录按下Shift和鼠标右键&#xff0c;打开Powershell窗口 2&#xff1a;输入以下&#xff0c;然后回车 flutter config --…...

Vue 静态渲染 v-pre

v-pre 指令&#xff1a;用于阻止 Vue 解析这个标签&#xff0c;直接渲染到页面中。 语法格式&#xff1a; <div v-pre> {{ 数据 }} </div> 基础使用&#xff1a; <template><h3>静态渲染 v-pre</h3><p v-pre>静态渲染&#xff1a;{{ n…...

C语言基础概念考查备忘 - 标识符、关键字、预定义标识符、语法检查、语义检查 ... 左值、右值、对象、副作用、未定义行为、sizeof是什么等等

什么是标识符、关键字和预定义标识符&#xff1f;三者有何区别&#xff1f; 当谈论C语言中的标识符、关键字和预定义标识符时&#xff0c;让我们从每个概念的基础开始。 标识符&#xff08;Identifiers&#xff09;&#xff1a; 标识符是用来给变量、函数、类型等命名的。在…...

插件原理与开发

插件原理与开发 在 Mybatis总体执行流程 一文中简单的介绍了插件的初始化过程&#xff0c;本文将从源码的角度介绍一下mybatis的插件原理与简单开发实战。 插件原理 插件的注册和管理是通过InterceptorChain进行的&#xff0c;在创建Executor、StatementHandler、ParameterH…...

Git 分支合并时 Merge, Rebase, Squash 的使用场景

前言 Git 的分支设计大大提升了并行开发的能力&#xff0c;但相应的&#xff0c;也就要解决如何进行分支合并。毕竟分久必合&#xff0c;最终还是要把大家的工作合并起来&#xff0c;进行统一发布的。在合并时&#xff0c;通常有三种操作&#xff1a; Merge commitsRebaseSqu…...

第5节:Vue3 JavaScript 表达式

在 Vue3 中&#xff0c;JavaScript 表达式的使用方式与 Vue2 有所不同。 在 Vue3 中&#xff0c;你可以使用 v-bind 指令来绑定 JavaScript 表达式。例如&#xff1a; <template><div>{{ count }}</div> </template><script> import { ref } f…...

StarRocks 存算分离最佳实践,让降本增效更简单

StarRocks 存算分离自版本 3.0.0 开放使用&#xff0c;已经历过多个大版本迭代&#xff0c;在众多客户生产环境中得到验证。但在用户使用过程中也反馈了一些问题&#xff0c;大多源自对新能力不够熟悉导致无法达到最佳效果。因而&#xff0c;本文提供 StarRocks 存算分离最佳实…...

虚拟网络技术:bond技术

网卡bond也称为网卡捆绑&#xff0c;就是将两个或者更多的物理网卡绑定成一个虚拟网卡。 bond的作用&#xff1a; 1.提高网卡的吞吐量 2.增加网络的高可用&#xff0c;实现负载均衡。 一、bond简介 bond技术即bonding&#xff0c;能将多块物理网卡绑定到一块虚拟网卡上&…...

【Android】解决安卓中并不存在ActivityMainBinding

安卓中并不存在ActivityMainBinding这个类&#xff0c;这个类是在XML布局的最外层加入就会自动生成。但是你在最后绑定主布局时会报错获取不到根节点getRoot(). 最好的办法就是&#xff0c;删除原来的最外层节点&#xff0c;再重新添加&#xff0c;感觉是因为复制时并没有让系…...

mysql的几种索引

mysql索引的介绍可以mysql官网的词汇表中搜索&#xff1a; https://dev.mysql.com/doc/refman/8.0/en/glossary.html mysql可以在表的一列、或者多列上创建索引&#xff0c;索引的类型可以选择&#xff0c;如下&#xff1a; 普通索引&#xff08;KEY&#xff09; 普通索引可…...

R语言手册30分钟上手

文章目录 1. 环境&安装1.1. rstudio保存工作空间 2. 创建数据集2.1. 数据集概念2.2. 向量、矩阵2.3. 数据框2.3.1. 创建数据框2.3.2. 创建新变量2.3.3. 变量的重编码2.3.4. 列重命名2.3.5. 缺失值2.3.6. 日期值2.3.7. 数据框排序2.3.8. 数据框合并(合并沪深300和中证500收盘…...

前缀和例题:子矩阵的和AcWing796-Java版

//前缀和模板提,在读入数据的时候就可以先算好前缀和的大小 //计算前缀的时候用:g[i][j] g[i][j-1] g[i-1][j] - g[i-1][j-1] Integer.parseInt(init[j-1]); //计算结果的时候用:g[x2][y2] - g[x1 - 1][y2]- g[x2][y1-1] g[x1 -1][y1 - 1] "\n" //一些重复加的地…...

前端传参中带有特殊符号导致后端接收时乱码或转码失败的解决方案

文章目录 bug背景解决思路1&#xff1a;解决思路2解决思路3&#xff08;最终解决方案&#xff09;后记 bug背景 项目中采用富文本编辑器后传参引起的bug&#xff0c;起因如下&#xff1a; 数据库中存入的数据会变成这种未经转码的URL编码 解决思路1&#xff1a; 使用JSON方…...

【扩散模型】深入理解图像的表示原理:从像素到张量

【扩散模型】深入理解图像的表示原理&#xff1a;从像素到张量 在深度学习中&#xff0c;图像是重要的数据源之一&#xff0c;而图像的表示方式对于算法的理解和处理至关重要。本文将带你深入探讨图像的底层表示原理&#xff0c;从像素到张量&#xff0c;让你对图像表示有更清…...

WPS论文写作——公式和公式序号格式化

首先新建一个表格&#xff0c;表格尺寸按你的需求来确定&#xff0c;直接 插入--》表格 即可。 然后在表格对应位置填上公式&#xff08;公式要用公式编辑器&#xff09;和公式序号&#xff0c;然后可以按照单独的单元格或者整行或整列等来设置样式&#xff0c;比如居中对齐、…...

ChatGPT一周年,奥特曼官宣 OpenAI 新动作!

大家好&#xff0c;我是二狗。 今天是11月30日&#xff0c;一转眼&#xff0c;ChatGPT 发布已经一周年了&#xff01; 而就在刚刚&#xff0c;ChatGPT一周年之际。 OpenAI 正式宣布Sam Altman回归重任CEO, Mira Murati 重任CTO&#xff0c;Greg Brockman重任总裁&#xff0c;O…...

JVM 运行时内存篇

面试题&#xff1a; 讲一下为什么JVM要分为堆、方法区等&#xff1f;原理是什么&#xff1f;&#xff08;UC、智联&#xff09; JVM的分区了解吗&#xff0c;内存溢出发生在哪个位置 &#xff08;亚信、BOSS&#xff09; 简述各个版本内存区域的变化&#xff1…...

Docker安装postgres最新版

1. postgres数据库 PostgreSQL是一种开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是一种高度可扩展的、可靠的、功能丰富的数据库系统。以下是关于PostgreSQL的一些介绍&#xff1a; 开源性&#xff1a;PostgreSQL是一个开源项目&#xff0c;可以…...

浅析计算机网络安全的的防范与措施

摘 要 随着信息和通讯的高速发展使得人们对计算机的依赖逐渐增强&#xff0c;生活与工作当中计算机都担任着那个不可或缺的角色&#xff0c;已经是人们生活当中的一部分&#xff0c;充分影响着我们生活和工作中的很多关键点&#xff0c;但计算机过多地在工作和生活中使用也带来…...

多表操作、其他字段和字段参数、django与ajax(回顾)

多表操作 1 基于对象的跨表查 子查询----》执行了两句sql&#xff0c;没有连表操作 2 基于双下滑线的连表查 一次查询&#xff0c;连表操作 3 正向和反向 放在ForeignKey,OneToOneField,ManyToManyField的-related_namebooks&#xff1a;双下滑线连表查询&#xff0c;反向…...

您知道计算机是怎么分类的嘛

地表最强计算机 第 61 版全球最强大的超级计算机已经发布。名为 Top500&#xff0c;顾名思义&#xff0c;该列表列出了全球 500 台最强大的超级计算机。榜单显示&#xff0c;美国的AMD、英特尔和IBM处理器是超级计算系统的首选。在 TOP10 中&#xff0c;有四个系统使用 AMD 处理…...

[MTK]安卓8 ADB执行ota升级

需求 adb 推送update.zip进行安卓的OTA升级 环境 平台:mtk SDK:Android 8 命令方式 需要root adb root adb remount adb push update.zip /data/media/0/ adb shell uncrypt /data/media/0/update.zip /cache/recovery/block.map adb shell echo /data/media/0/update.zi…...

python-比较Excel两列数据,并分别显示差异

利用 openpyxl 模块&#xff0c;操作Excel&#xff0c;比较Excel两列数据&#xff0c;并分别显示差异 表格数据样例如下图 A&#xff0c;B两列是需要进行比较的数据&#xff08;数据源为某网站公开数据&#xff09;&#xff1b;C&#xff0c;D两列是比较结果的输出列 A&#…...

RT-DETR手把手教程:NEU-DET钢材表面缺陷检测任务 | 不同网络位置加入EMA注意力进行魔改

💡💡💡本文独家改进:本文首先复现了将EMA引入到RT-DETR中,并跟不同模块进行结合创新;1)多种Rep C3结合;2)直接作为注意力机制放在网络不同位置; NEU-DET钢材表面缺陷检测: 原始 rtdetr-r18 map0.5为0.67 rtdetr-r18-EMA_attention map0.5为0.691 rtdetr-r18-…...

WebGL笔记:矩阵缩放的数学原理和实现

矩阵缩放的数学原理 和平移一样&#xff0c;以同样的原理&#xff0c;也可以理解缩放矩阵让向量OA基于原点进行缩放 x方向上缩放&#xff1a;sxy方向上缩放&#xff1a;syz方向上缩放&#xff1a;sz 最终得到向量OB 矩阵缩放的应用 比如我要让顶点在x轴向缩放2&#xff0c;y轴…...

处理器中的TrustZone之安全状态

在这篇博客中&#xff0c;我们将讨论处理器内对TrustZone的支持。其他部分则涵盖了在内存系统中的支持&#xff0c;以及建立在处理器和内存系统支持基础上的软件情况。 3.1 安全状态 在Arm架构中&#xff0c;有两个安全状态&#xff1a;安全状态和非安全状态。这些安全状态映射…...

开发一款短剧视频小程序软件多少钱?

今年最炙手可热的互联网项目之一当属短剧小程序&#xff0c;常常受到客户的咨询&#xff0c;他们想了解开发一套短剧小程序需要多少费用。今天&#xff0c;我将详细介绍相关费用及开发细节。 小程序认证费用&#xff1a; 每年300元&#xff0c;是确保小程序正常运营所必需的认证…...

『PyTorch学习笔记』分布式深度学习训练中的数据并行(DP/DDP) VS 模型并行

分布式深度学习训练中的数据并行(DP/DDP) VS 模型并行 文章目录 一. 介绍二. 并行数据加载2.1. 加载数据步骤2.2. PyTorch 1.0 中的数据加载器(Dataloader) 三. 数据并行3.1. DP(DataParallel)的基本原理3.1.1. 从流程上理解3.1.2. 从模式角度理解3.1.3. 从操作系统角度看3.1.…...