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

两种特征提取方法与深度学习方法对比的小型金属物体分类分析研究

本文讨论了用于对包括螺丝、螺母、钥匙和硬币在内的小型金属物体进行分类的两种特征提取方法的效率:定向梯度直方图 (HOG) 和局部二进制模式 (LBP)。首先提取标记图像的所需特征并以特征矩阵的形式保存。使用三种不同的分类方法(非参数 K 最近邻算法、支持向量机和朴素贝叶斯方法),将图像分为四个不同的类别。然后,通过检查生成的混淆矩阵,比较这四个类的 HOG 和 LBP 方法的性能。这两种方法的有效性也与基于深度学习的“You Only Look Once”和更快的基于区域的卷积神经网络方法进行了比较。本文采集的图像集包括800张带标签的训练图像和180张测试图像。结果表明,使用 HOG 比使用 LBP 更有效。此外,HOG 和 LBP 的组合提供了比单独使用任何一个更好的结果。

介绍

目标分类是图像处理和机器视觉领域中最重要的问题之一 [ 1 , 2 ]。一般来说,分类方法分为参数方法和非参数方法。参数化方法寻求提取参数来描述基于训练数据分析的特定模型。创建所需模型后,可以对新样本进行分类 [ 3、4 ]。支持向量机 (SVM)和朴素贝叶斯 (NB)分类器是最重要的参数化方法[ 5、6、7、8、9]. 在参数方法中,对所有输入数据考虑单个模型。尽管将分类问题简化为寻找几个有限参数似乎是合乎逻辑的,但这种假设可能不正确,可能导致对输出的误诊。

非参数算法涉及基于合适的距离函数找到接近或相似的样本,然后进行插值以找到正确的输出。k 最近邻 ( KNN )算法是最流行的非参数方法之一[ 10、11、12]. 在非参数方法中,不需要在训练阶段计算参数;然而,算法是通过使用训练示例来对新数据进行分类来设计的。由于这些方法直接建立在数据之上,而不是估计或预测参数,因此它们通常比参数方法具有更高的准确性。特别是在训练数据的分布无法用有限数量的参数建模的情况下,使用非参数方法似乎更合乎逻辑。非参数方法(包括 KNN)的主要缺点是需要所有的训练样本才能对新样本做出决策。这会导致内存和计算成本增加,尤其是对于大型数据集。如果训练样本以简单简短的描述符形式表示,

深度学习和深度网络近年来取得了进展,并在许多应用中取得了可接受的结果,包括目标检测和识别[ 4、13、14、15、16、17、18、19 ]。与传统方法不同,这些方法不需要单独的步骤来手动提取必要的特征。

为使用深度学习 [ 16 ]进行对象检测而提出的最著名的架构之一是“You Only Look Once”(YOLO)[ 20 ]。深度学习对农业、医学、监视和监控系统等各种应用的重要性与日俱增 [ 21、22、23]. YOLO 算法于 2016 年首次推出,旨在高速准确地检测物体。这种方法为物体识别系统引入了一种新的结构。由于受到了极大的关注,已经实现了不同版本的 YOLO。YOLO 代表“你只看一次图像”。该术语指的是人类视觉系统一眼就能检测到物体的能力。因此,YOLO物体识别系统旨在提供一种类似于人类视觉系统的检测方法。YOLO 算法由一个用于特征提取的 24 层卷积神经网络 (CNN) 和两个用于预测对象概率和坐标的全连接层组成。

更快的基于区域的 CNN(更快的 R-CCN​​)[ 24 ] 是另一种最先进的基于深度学习的技术。它于 2015 年作为区域提议网络 (RPN) 引入,用于与检测网络共享全图像卷积特征,从而实现几乎无成本的区域提议。RPN 是一个全卷积网络,可同时预测每个位置的边界框和目标分数。它是基于区域的 CNN (R-CNN) [ 25 ]中使用最广泛的最新版本。

金属物体的检测和分类是机器图像和视觉处理的重要应用,尤其是在工业和商业领域 [ 26,27,28 ]。在参考。[ 26 ],提出了一种基于深度 CNN 的技术来检测金属螺钉及其表面的微缺陷。使用工业相机拍摄了不同类型的金属螺钉的图像。然后使用所提出的深度网络架构来诊断和检查螺丝的无瑕疵。实验结果表明,该技术可以达到98%的检测准确率。然而,该方法仅针对螺丝图像进行训练,并未包括其他类别的金属物体。

参考文献中介绍了一种用于将硬币与纸币分开的自动移动识别系统。[ 27 ]。所提出的方法基于尺度不变的特征变换颜色描述符提取方法,并且可以在智能手机上运行。根据一组约旦常见的纸币和硬币图像审查了该方法的结果。尽管此方法在将硬币与纸币分离方面具有良好的准确性,但该问题(和方法)似乎更像是形状检测而不是对象分类。因为硬币都是圆形的,而钞票是矩形的,所以所提出的方法不能推广到检测其他物体。

参考文献中提出的方法。[ 28 ] 专注于用于各种行业,特别是汽车行业的螺丝识别系统。所提出的方法基于反向传播神经网络。实验结果表明,该系统能够以适当的精度检测生产线上的移动物体;然而,它仅限于检测两类(螺丝和螺母)。

对象分类中最关键的挑战之一是选择合适的特征提取方法 [ 13 ]。此阶段选择不当会影响分类的准确性,并导致决策失误。因此,有必要对各种特征提取方法的效率进行综合研究。一种特征提取方法可能适用于特定的分类算法,但如果用于其他分类器则可能效果不佳。因此,有必要比较几种分类算法的结果以进行详细的分析研究。鉴于上述情况,本研究的主要目的是综合比较方向梯度直方图(HOG)和局部二元模式(LBP)特征向量的性能。

本研究探讨了 HOG 和 LBP 方法在对四组金属物体(螺丝、螺母、钥匙和硬币)进行分类时的效率。为了详细研究这些特征,采用了三种不同的分类方法,即非参数 KNN 算法、SVM 和 NB 方法。使用 HOG 和 LBP 特征向量以及这两个特征向量的组合来研究每种方法的准确性。然后,将这些方法的有效性与 YOLO 和更快的 R-CNN 深度学习方法进行比较。

本研究的主要贡献包括:(1)提供了使用 HOG 和 LBP 方法对小物体进行分类的分析研究;(2) 使用三种常规方法(KNN、SVM 和NB)对HOG 和LBP 进行综合比较;(3)使用YOLO作为深度学习方法进行更详细的对比;(4) 提供多样化的金属物体图像集,可在未来的研究中用作比较不同方法的基准集。

下一节讨论所提出结构中的方法。结果和讨论部分分析了从传统技术和深度学习方法(例如 YOLO 和更快的 R-CNN)获得的结果。最后一节介绍了本研究的结论。

方法

图1显示了所提出的图像分类方法的一般结构。通过为每一个训练样本提取对应的描述符,所有的训练数据都是矩阵的形式,其中每一行代表一个样本的特征向量,每一列代表特征空间中的一个特征。训练数据被标记;因此,每个相关类在建议的算法开始时都是可用的。基于这些训练样本创建参数或非参数模型,用于预测测试图像的类别。如图1所示,特征提取涉及使用 HOG 或 LBP 方法之一,或这两种方法的组合。分类指的是上述三种方法中的一种:KNN、SVM、NB。随着新样本(测试图像)的到来,提取所需的特征,并使用创建的模型估计未知样本的标签。确定测试样本后,为每个分类模型生成一个混淆矩阵。使用混淆矩阵检查不同方法的效率。

要计算梯度的直方图,将 0-180° 之间的距离除以n 个相等的距离,表示梯度或直方图条的方向数。这些距离中的每一个都形成一个直方图通道。使用 0–180° 的范围而不是 360° 范围,因为通常需要额外的杆才能在 0–360° 的范围内提取。因此,较小的范围可以节省更多的特征提取时间。实验观察还表明,相对于 180° 范围,使用 360° 范围对改善结果的影响很小。正如参考文献中所讨论的。[ 29 ],一个九柱直方图在实验中取得了更好的效果;因此,本研究使用相同数量的柱来计算 HOG。

为了计算直方图,图像被分成几个单元格。然后每个像素根据其梯度方向为直方图通道之一投票。这些投票根据该像素中梯度的大小进行加权。这会为每个单元格生成一个直方图,用于描述像素的梯度。在某些情况下,通过连接相邻单元格的直方图来计算块(由多个单元格组成)的 HOG(图2)。

图 2

灰度图像的 LBP 中的特征向量计算如下。

  • 想要的图像被分成几个块,每个块又被分成几个单元格。

  • 对单元格中的每个像素执行以下计算。

  • 每个像素都与它的八个相邻像素进行比较。在特定方向(例如,顺时针)上单独检查相邻像素。

  • 当中心像素大于相邻像素时,写入数字“0”;否则,写入数字“1”。以这种方式,通过将中心像素与其八个相邻像素进行比较来获得八位数。为方便起见,该数字通常转换为 0-255 之间的十进制数(图3)。

  • 为每个单元格计算上一步中获得的数字的直方图。此直方图有 256 个条(从 0-255),每个条显示该单元格中特定数字的重复次数。

  • 如有必要,对所需的直方图进行归一化。

  • 整个块的直方图是通过连接相邻单元格的直方图得到的。因此,如果一个块包含四个单元格,则生成的特征向量的长度为 256 × 4。

图 3

图3显示了 3 × 3 邻域中的二进制模式计算示例。二进制模式 00010011 被分配给中心像素,左侧图像中的灰度级为“5”。在完成所有块的计算后,通过使用适当的模型对生成的特征向量进行处理以对所需图像进行分类。这些分类器可用于对象分类、人脸识别、纹理分析等。

已经提出了不同类型的 LBP 算法,相对于原始算法有各种变化。最有用和广泛使用的 LBP 类型之一是统一模式,它可以显着减少特征向量的长度 [ 35 ]。这个想法源于这样一个事实,即某些二进制模式(称为统一二进制模式)的出现次数特别重要。

如果一个像素生成的二进制模式最多有两个 0-1 或 1-0 转换,则称为统一模式。例如,00010000 是具有两个转换的统一模式,0-1 和 1-0,但具有五个转换的模式 01010111 是不统一的。具有最多事件数的统一二进制模式对应于图像的基本特征,例如图像的边缘、角和重要点 [ 34 ]。

因此,均匀的图案可以被认为是识别图像主要特征的因素。所有非均匀模式都分配给一个单独的容器,每个均匀模式都有一个单独的容器。由于 58 个统一模式在 0-255 范围内,因此统一 LBP 特征向量的长度为 59;这比普通 LBP 中 256 的长度显着减少。

以这种方式,通过比较局部邻域并计算统一的 LBP 直方图,创建图像签名来表示纹理的类型。生成的签名对于属于不同类别的图像来说足够独特。因此,LBP 可用于对纹理进行分类。

KNN算法

KNN 算法是最常见的非参数分类方法之一[ 10,11,12,38 ] 。在非参数方法中,不需要在学习阶段计算参数。使用数据本身,设计了一种算法来检查新数据是否属于训练类。这些方法的优点是不需要参数估计,通常比参数方法更准确;然而,它们的主要局限是它们需要所有的训练样本来对新样本进行分类。这会增加内存和计算成本,尤其是对于大型数据集。用于对图像进行分类的 KNN 分类步骤如下。

  • 上传训练数据集和相关标签,然后选择 K 的值作为邻居数。

  • 计算测试图像和每个训练样本之间的距离。

  • 根据上一步计算的距离,训练样本按升序排序。

  • 前 K 个项目是从排序集中选择的。

  • 在上一步中检查所选项目的标签。

  • 选择最频繁标记的类作为测试样本的预测类。

图4显示了使用 KNN 算法进行二分类的示例。在这种情况下,如果k = 3,则测试样本被认为属于 B 类,因为在三个近邻中,两个邻居被标记为 B,一个邻居被标记为 A。

图 4

如果k = 6,情况会有所不同,因为在这种情况下,四个邻居被标记为 A,两个邻居被标记为 B;因此,测试样本被归为A类。分类算法的准确性可以通过将预测标签与测试样本的实际标签进行比较来验证。

基于 SVM 的分类器

SVM是目前广泛使用的分类方法之一[ 5 , 6 ]。SVM 方法目前的流行程度可以与过去十年神经网络的流行程度相提并论。SVM 基于数据的线性分类。图5显示了一个可以线性分类的数据集示例。绘制了几条线来对数据进行分类。在数据的线性划分中,试图选择具有更可靠余量的行。二次规划用于寻找最优线性分离器;这是解决有限问题的已知方法。

SVM的基本思想是,假设类别是线性可分的,得到一条具有最大边距的线来分隔类别。为了找到这样的分隔符,两条边界线平行于分隔线绘制,并且被分开使得它们与数据碰撞。最大化线性分隔符之间训练数据余量的分隔最小化泛化误差。最靠近分隔线的训练数据称为支持向量(图5)。值得注意的是,对于大于二的维度,使用术语“超平面”而不是“线”。超平面是一个几何概念,表示n维平面概念的推广。换句话说,超平面定义了后续的kn维空间中的子空间,使得k < n

SVM 的最佳特性之一是,在数据不可线性分离的情况下,SVM 使用非线性映射函数 Φ 将数据映射到更大的维度。这样,数据就可以在这个新的空间中线性分离。

这意味着在其原始空间中不可线性分离的样本移至称为 F 的新特征空间以创建用于分离它们的超平面。当这个超平面回到原来的空间I时,它形成了一条非线性曲线。如图6所示,输入数据不是线性可分的,没有一条线可以准确地表示两个类之间的边界。然而,通过将它们从二维空间映射到三维空间,可以创建一个超平面来分隔这两个类的边界。

注意类别

NB是一种基于概率的机器学习算法,可用于广泛的分类问题 [ 7、8、9 ]。NB 算法的常见应用包括垃圾邮件过滤、文档分类和情绪预测。

这种 NB 算法使用贝叶斯定理来产生结果,基于特征之间强独立性的假设。这意味着更改一个特征的值不会直接影响任何其他特征的值。尽管这个假设对于真实世界的数据集来说过于简单(正如算法的名称所暗示的那样),但 NB 分类器仍然在分类算法中找到了一个有价值的位置。

假设X  = ( 1 ,  2 , .. n ) 将数据样本表示为n 个独立变量的向量。计算概率P [ k | ( 1 ,  2 , .. n )],使用联合概率就足够了,并使用关于变量独立性的条件概率来简化它。

深度学习方法

YOLO 是最先进的实时目标检测系统。它使用单个神经网络来获取完整图像。该网络将图像划分为区域,并预测每个区域的边界框和概率。使用预测概率对这些边界框进行加权。

要使用YOLO算法,首先需要准备训练图像。

为 YOLO 算法准备训练集的方法不同于传统方法,例如 SVM 或 KNN。需要在每个对象周围绘制一个边界框,对应的类由用户确定。可以使用各种程序来绘制边界框并对其进行标记。在这项研究中,MAKESENSE ( Make Sense ) 程序用于标记训练图像。

以这种方式,为每个训练图像创建一个文本文件,其中每一行都写有对象的规格。第一个数字与对象的类别有关;然后写入矩形中心的坐标及其长度和宽度。文件中的行数等于图像中的对象数。图7显示了来自 MAKESENSE 程序输出的训练数据和生成文件的示例。该程序还用于为另一种深度学习方法(更快的 R-CNN)标记图像。

图 7

Faster R-CNN 是一种用于对象检测的深度卷积网络,作为用户使用的单个端到端统一网络。该网络可以在短时间内预测多个物体的位置。加州大学伯克利分校的研究人员于 2014 年开发了 R-CNN [ 25 ]。R-CNN 是一种深度卷积网络,能够检测图像中的 80 种不同类型的对象。与目标检测方法的通用管道相比,R-CNN 最重要的贡献是基于 CNN 的特征提取。

R-CNN 由三个主要模块组成。第一个模块使用选择性搜索算法生成 2000 个区域建议。在调整到固定的预定义大小后,下一个模块从每个候选区域中提取长度为 4096 的特征向量。第三个模块利用预训练的 SVM 算法将区域提议分类为对象类之一,或作为背景。R-CNN 模型有一些弱点:它是一个多阶段模型,其中每个阶段都是一个独立的部分。因此,它不能进行端到端的训练。它从磁盘上预训练的 CNN 中捕获提取的特征来训练 SVM。这需要千兆字节量级的大容量存储。R-CNN 依赖于选择性搜索算法来创建区域建议,这需要很长时间。此外,该算法不能针对检测问题进行定制。每个区域提案都在不依赖 CNN 的情况下进行特征提取,因此不适合实时运行 R-CNN。作为R-CNN模型的扩展,提出了fast R-CNN模型[24 ] 来克服其中的一些限制。

结果与讨论

在本研究中,使用 MATLAB 软件 2019 版实现了传统分类方法(SVM、KNN 和 NB)。准备了一组图像,包括 800 张训练图像和 180 张测试图像,用于分析 HOG 和 LBP 方法的效率。更具体地说,为四个类别(螺丝、螺母、钥匙和硬币)中的每一个考虑了 200 个训练图像和 45 个测试图像。

在 HOG 的情况下,每个单元格的大小为 64 × 64 像素,每个块包含 2 × 2 个单元格,方向直方图中的 bin 数量为 10,HOG 特征向量的长度为 360。对于LBP,单元格大小为64,采用长度为160的旋转不变均匀特征向量。因此,组合特征向量 (HOG-LBP) 的长度为 520。尝试在对象类型和照明条件方面提供足够的多样性。图8显示了收集的数据集中的图像示例。

在检测坚果时,使用 HOG 得到 34 次正确检测,但 LBP 的这个值为 36。该表还表明,使用 HOG-LBP 特征向量组合(由两个单独的特征向量的连接产生)比单独使用这些特征中的任何一个产生更好的结果。图9显示了 SVM 的接收器操作特性 (ROC) 曲线和三个不同特征向量的曲线下面积 (AUC) 值。该图表明,组合特征向量 (HOG-LBP) 比单独使用 HOG 和 LBP 取得了更好的结果。 

在实施深度学习方法时,10% 的训练图像被用作验证集。表4显示了使用 YOLO 版本 5 和更快的 R-CNN 获得的混淆矩阵。如表4所示,这两种方法的分类精度都很高。在 YOLO 中,一个 nut 没有被放置在任何一个类中。所示. YOLO 和 Faster R-CNN 等深度学习方法的优势之一是它们能够识别对象的位置并在多对象条件下对它们进行分类,即一帧中有多个对象。相比之下,在传统方法中,这种能力是不存在的,需要使用辅助算法来检测物体的位置。图12中示出了多次检测的示例。 

 值得注意的是,YOLO 和更快的 R-CNN 算法不需要单独的步骤来提取特征向量。在这方面,它们可能优于基于特征的方法,如 KNN 和 SVM。然而,与基于特征的提取方法相比,实施深度学习算法对硬件的要求更高。在本研究中,YOLO 和更快的 R-CNN 算法是使用 Google Colab 实现的。YOLO 和 Faster R-CNN 的另一个缺点是标记训练数据的方法,这使得这些算法的训练阶段比传统方法更加困难和耗时。

考察表1、2、3、4中的混淆矩阵表明,一般来说,HOG方法的特征提取性能优于LBP方法,但它们的组合特征向量(HOG- LBP)比单独使用更准确用于对小型金属物体进行分类。此外,基于 SVM 的方法比基于 KNN 和基于 NB 的方法表现更好,而基于 NB 的方法的精度低于其他方法。尽管基于 SVM 的方法不如 YOLO 和更快的 R-CNN 准确,但与深度学习方法相比,它对硬件的要求更少,训练阶段也更容易。

结论

在这项研究中,评估了两种特征提取方法(HOG 和 LBP)在对螺丝、螺母、钥匙和硬币等小金属物体进行分类时的效率。使用了三种不同的分类,包括基于 KNN、SVM 和 NB 的方法。实验表明,一般来说,HOG 优于 LBP,并且使用它们的组合特征向量(HOG-LBP)优于单独使用它们。还将这两种方法的有效性与基于深度学习的 YOLO 和 Faster R-CNN 的方法进行了比较。尽管深度学习方法不需要单独的特征提取步骤,但它们需要比传统方法更强大的平台。

传统的特征提取方法,如 HOG 和 LBP,其优势在于提取的特征向量可以用于不同的分类器,以选择更准确的分类器。然而,这些方法的缺点是它们只能对检测到的对象进行分类。换句话说,它们无法检测图像中前景物体的位置。在这种情况下,必须应用前景提取方法,然后可以使用传统方法(如HOG)为每个前景区域生成特征向量。相比之下,深度学习方法确定图像中的对象位置,并对这些对象进行分类。这是 YOLO 和 Faster R-CNN 算法最积极的地方,但它们的缺点是在训练阶段需要手动图像标注,这对于大型数据集来说既费时又费力。尽管如此,深度学习方法在各种应用中的重要性正在增加,例如农业、医学和监控系统。

在继续本研究中所做的研究时,可以检查其他纹理特征分析,例如 Gabor 滤波器。可以发展四级分类以对更大的数进行分类。此外,可以采用集成方法来考虑各种大小的对象。与其他深度学习方法的比较将更好地理解不同特征提取方法的效率。总的来说,这项研究的结果可以应用于工厂和工业车间。因此,在未来的研究中可以探索获取工业图像并在真实环境中提供所提出方法的实际实现。

相关文章:

两种特征提取方法与深度学习方法对比的小型金属物体分类分析研究

本文讨论了用于对包括螺丝、螺母、钥匙和硬币在内的小型金属物体进行分类的两种特征提取方法的效率&#xff1a;定向梯度直方图 (HOG) 和局部二进制模式 (LBP)。首先提取标记图像的所需特征并以特征矩阵的形式保存。使用三种不同的分类方法&#xff08;非参数 K 最近邻算法、支…...

传奇私服搭建网站的几种方法

搭建网站的几种方法&#xff1a;一些人&#xff0c;连简单的搭建网站都不会&#xff0c;还要请技术帮忙&#xff0c;真是牛B&#xff0c;这里简单介绍下几种办法一&#xff1a;2003系统下&#xff0c;直接使用IIS&#xff0c;这个太简单了&#xff0c;桌面上就有IIS&#xff0c…...

i.MX8MP平台开发分享(clock篇)- 各类clock的注册

专栏目录:专栏目录传送门 平台内核i.MX8MP5.15.71文章目录 1、关键数据结构1.1 clk_hw1.2 clk_hw_onecell_data2.一个clk的注册过程2.1 fixed clk2.2 pll14xx2.3 fixed factor2.4 mux2.5 composite2.6 gate1、关键数据结构 1.1 clk_hw clk_hw是描述一个时钟信息的最小单元。…...

java ssm计算机系统在线考试平台idea

本系统主要包括以下功能模块学生、教师、班级、考试评阅、在线考试、试题内容、考试等模块&#xff0c;通过这些模块的实现能够基本满足日常计算机系统平台的操作。 本文着重阐述了计算机系统平台的分析、设计与实现&#xff0c;首先介绍开发系统和环境配置、数据库的设计&…...

C语言(字符串函数)

这章的内容记得引用<string.h>头文件 目录 1.strlen&#xff08;&#xff09; 2.strcat() 3.strncat() 4.strcmp() 5.strncmp() 6.strcpy() 7.strncpy() 8.sprintf() 8.strchr() 9.strpbrk() 10.strrchr() 11.strstr() 1.strlen&#xff08;&#xff09; 用于统计字符串的…...

Maxwell工作流程详解

要介绍maxwell的工作原理&#xff0c;首先需要讲一下mysql主从复制的原理 mysql主从复制原理&#xff1a; 如上图&#xff0c;左边是master主节点&#xff0c;右边是slave从节点 工作流程&#xff1a; 1.往主节点mysql的数据库中写入数据&#xff0c;产生数据变化&#xff0c…...

13- EM算法与GMM高斯混合 (聚类算法) (算法)

最大期望算法(EM算法) &#xff0c;曾入选“数据挖掘十大算法”中&#xff0c;是最常见的隐变量估计方法&#xff0c;在机器学习中有极为广泛的用途&#xff0c;例如常被用来学习高斯混合模型的参数。EM算法是在概率模型中寻找参数最大似然估计或者最大后验估计的算法&#xff…...

【新】华为OD机试 - 二叉树层次遍历(Python)| 刷完获取OD招聘渠道

二叉树层次遍历 题目 有一棵二叉树 每一个节点用一个大写字母标识 最多26个节点 现有两组字母 分别表示后序遍历(左孩子指向右孩子指向父节点) 和中序遍历(左孩子指向父节点指向右孩子) 请输出层次遍历的结果 输入 输入为两个字符串 分别为二叉树的后序遍历和中序遍历结…...

工作记录------@Accessors(chain = true)引起的BUG,Excel导入时获取不到值

工作记录------Accessors(chain true)引起的BUG&#xff0c;Excel导入时获取不到值 如题所示 背景&#xff1a;在进行文件excel文件导入时&#xff0c;发现实体类获取到的属性值都为null。 框架&#xff1a;com.alibaba.excel 2.2.0的版本。 结论&#xff1a;首先说下结论 如…...

JavaEE-HTTP协议(二)

目录HTTP请求的方法GET方法POST 方法其他方法“报头”User-AgentRefererCookieHTTP响应200 OK404 Not Found403 Forbidden405 Method Not Allowed500 Internal Server Error504 Gateway Timeout302 Move temporarily301 Moved PermanentlyHTTP请求的方法 GET方法 GET 是最常用…...

代理的基本原理和多线程的基本原理

目录爬虫代理常见代理多线程并发和并行Python中的多进程和多线程爬虫时我们不到一杯茶的功夫就出现了403.打开网页一看会说您的IP访问频率太高&#xff0c;出现这种情况是因为网站采取了一些反爬虫措施&#xff0c;限制某个IP在一定时间内的请求次数&#xff0c;如果超过一定的…...

T38,数的递归

描述 输入一棵节点数为 n 二叉树&#xff0c;判断该二叉树是否是平衡二叉树。 在这里&#xff0c;我们只需要考虑其平衡性&#xff0c;不需要考虑其是不是排序二叉树 平衡二叉树&#xff08;Balanced Binary Tree&#xff09;&#xff0c;具有以下性质&#xff1a;它是一棵空…...

QT+ OpenGL 变换

文章目录QT OpenGL变换向量的运算矩阵矩阵与向量相乘代码实现QT OpenGL 本篇完整工程见gitee:QTOpenGL 对应点的tag&#xff0c;由turbolove提供技术支持&#xff0c;您可以关注博主或者私信博主。 变换 我们需要改变物体的位置 现有解决办法&#xff08;每一帧&#xff0c…...

【算法】前缀和

作者&#xff1a;指针不指南吗 专栏&#xff1a;算法篇 &#x1f43e;要学会在纸上打草稿&#xff0c;这个很重要&#x1f43e; 文章目录1.什么是前缀和&#xff1f;2.怎么求前缀和&#xff1f;3.前缀和有什么用&#xff1f;4.进阶二维:矩阵和前缀和 主打一个记公式 1.什么是前…...

《Redis实战篇》七、Redis消息队列

7.1 Redis消息队列-认识消息队列 什么是消息队列&#xff1a;字面意思就是存放消息的队列。最简单的消息队列模型包括3个角色&#xff1a; 消息队列&#xff1a;存储和管理消息&#xff0c;也被称为消息代理&#xff08;Message Broker&#xff09;生产者&#xff1a;发送消息…...

android组件化

学习流程&#xff1a;1.开源最佳实践&#xff1a;Android平台页面路由框架ARouter-阿里云开发者社区 (aliyun.com)2.中文ARouter使用API&#xff1a;https://github.com/alibaba/ARouter/blob/master/README_CN.md3.看当前文档后面的代码4.这是通俗易懂的文章&#xff1a;https…...

华为OD机试真题Python实现【特异性双端队列】真题+解题思路+代码(20222023)

🔥系列专栏 华为OD机试(Python)真题目录汇总华为OD机试(JAVA)真题目录汇总华为OD机试(C++)真题目录汇总华为OD机试(JavaScript)真题目录汇总文章目录 🔥系列专栏题目输入输出示例一输入输出解题思路核心知识点Python 代码实现代码运行结果版权说明<...

24.架构能力

文章目录24. 架构能力24.1 Competence of Individuals: Duties, Skills, and Knowledge of Architects 个人能力&#xff1a;架构师的职责、技能和知识24.2 Competence of a Software Architecture Organization 软件架构组织的能力24.3 Summary 小结24.4 For Further Reading …...

前端原生 CSS 跑马灯效果,无限轮播(横竖版本,带渐变遮罩,简单实用)

一、横版跑马灯 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wid…...

4.8 注解与自定义注解

文章目录1.概述2.注解的分类2.1 JDK注解2.2 元注解2.2.1 Target ElementType…2.2.2 Retention RetentionPolicy…3 自定义注解1.概述 在注解刚出现时&#xff0c;曾受到过好多程序员的鄙夷&#xff0c;觉得这就是多此一举的操作&#xff1b; 但随着时间的推移&#xff0c;越…...

webpack 的热更新是如何做到的?原理是什么?

Hot Module Replacement&#xff0c;简称 HMR&#xff0c;在不需要刷新整个页面的同时更新模块&#xff0c;能够提升开发的效率和体验。热更新时只会局部刷新页面上发生了变化的模块&#xff0c;同时可以保留当前页面的状态&#xff0c;比如复选框的选中状态等。 在 webpack 中…...

嵌入式ARM设计编程(一) 简单数据搬移

文章和代码已归档至【Github仓库&#xff1a;hardware-tutorial】&#xff0c;需要的朋友们自取。或者公众号【AIShareLab】回复 嵌入式 也可获取。 一、实验目的 熟悉实验开发环境&#xff0c;掌握简单ARM汇编指令的使用方法。 二、实验环境 硬件&#xff1a;PC机 软件&am…...

【Selenium】十分钟手把手带你学会WebDriver API

目录 1、定位元素【8种】 2、操作测试对象 3、添加等待 4、弹窗类型 5、浏览器的操作 6、键盘事件 7、选择框 8、上传文件 1、定位元素【8种】 元素定位是自动化测试的核心&#xff0c;想要去操作一个对象&#xff0c;第一步就是需要我们先去识别这个对象。每个对象就会…...

3DMAX高级弯曲插件使用教程

3dMax高级弯曲插件是对3dmax原生“弯曲&#xff08;Bend&#xff09;”修改器的一个增强&#xff0c;给用户更多控制弯曲修改器的参数设置&#xff0c;它让用户输入宽度&#xff0c;插件脚本将移动中心以获得正确的宽度。 主要特性&#xff1a; - 使用智能捕捉捕捉到自定义网格…...

前端面试题之性能优化大杂烩

主要内容为下面几大类&#xff1a;移动端、图片、JavaScript、css、html、页面内容、服务器、cookie。 移动端性能优化&#xff1a; 保持单个文件小于25KB 移动网站页面要求下载资源&#xff0c;如果文件过大&#xff0c;会大大减慢页面加载速度。 打包内容为分段multipart文…...

SpringBoot+Vue实现养老智慧服务平台

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏…...

tigervnc2023

sudo apt-get install tigervnc-standalone-server 配置用户 /etc/tigervnc/vncserver.users :1user1 :2user2 :3user3 全局配置 /etc/tigervnc/vncserver-config-defaults $localhost"no"; $geometry "1920x1200"; 分别进入user1 user2 user3 用户…...

智能三子棋(人机大战)—— 你会是最终赢家吗?万字讲解让你实现与自己对弈

魔王的介绍&#xff1a;&#x1f636;‍&#x1f32b;️一名双非本科大一小白。魔王的目标&#xff1a;&#x1f92f;努力赶上周围卷王的脚步。魔王的主页&#xff1a;&#x1f525;&#x1f525;&#x1f525;大魔王.&#x1f525;&#x1f525;&#x1f525; ❤️‍&#x1…...

【自制开发板】自制STM32F407开发板(含TFT 8080串口屏幕接口)

【2023 年 2 月 14 日】 许久没有更新&#xff0c;最近做了个小开发板玩了玩。更新一下吧&#xff0c;作为记录&#xff01;&#xff01; 主要是象试一下LVGL在STM32上的应用&#xff0c;所以开发板的大小都是基于屏幕大小来设计的。 分享出来&#xff0c;给大家一个板子结构…...

openvino yolov5/ssd 实时推流目标检测在html上显示

安装ffmepg并添加到环境变量中&#xff0c;流媒体使用m7s 运行效果 SSD&#xff1a;检测在10ms左右&#xff0c;yolov5在100ms左右 app.py #!/usr/local/bin/python3 # encodin: utf-8import subprocess import threading import time import cv2 import osfrom OpenVinoYoloV…...

最专业的网站建设seo优化服务公司/国外浏览器搜索引擎入口

1.1 数据结构 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系&#xff0c;并对这种结构定义相应的运算&#xff0c;而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。 例子&#xff1a;就像我们在用 计算机的文件的存储。就是树型存储。 数据结构…...

网页设计的好处/专业排名优化工具

转自 https://blog.csdn.net/u012702547/article/details/77823434 这个系列我感觉真的太好了&#xff0c;可以一步一步的了解spring cloud 的搭建以及更深层次的东西&#xff0c;对想学这门技术的朋友真的入门特别的快&#xff0c;感谢这位大哥的分享&#xff0c;我也会持续的…...

做门户网站用什么程序/链接平台

进入终端首先是这样的&#xff1a; 要输入cd /才能进入根目录&#xff1a; 然后即可通过ls查看文件了&#xff1a;...

ppt设计大赛/开封网站seo

D. Equal Binary Subsequences 一道比较妙的构造题 我们只需要成对进行考虑即可&#xff0c;每一个成对的01和10反着操作即可 void solve(){int cnt10;cin>>n;cin >> p;p" "p;n*2;vector<pii> vec;for(int i1;i<n;i2){if(p[i]!p[i1]){if(p[i]…...

燕郊做网站/小熊猫seo博客

一、产品需求分析1.1 产品背景剪映APP的出品方是深圳市脸萌科技有限公司&#xff0c;它是北京星云创迹科技有限公司的全资子公司&#xff0c;北京星云创迹科技有限公司又是字节跳动有限公司的全资子公司。如上图所示&#xff0c;可以看到字节跳动有限公司也全资控股了北京抖动青…...

免费做网站. 优帮云/轻松seo优化排名 快排

💥 项目专栏:【Pandas数据处理100例目录】Python数据分析玩转Excel表格数据 前言 大家好,我是阿光。 本专栏整理了《Pandas数据分析处理》,内包含了各种常见的数据处理,以及Pandas内置函数的使用方法,帮助我们快速便捷的处理表格数据。 正在更新中~ ✨ 🚨 我的项目…...