【无损检测】基于用深度学习的工业超声B-Scan 图像中的焊缝缺陷
Automated Weld Defect Detection in Industrial Ultrasonic B-Scan Images Using Deep Learning
Abstract:
自动超声波检测(AUT)是一种无损检测(NDT)方法,广泛应用于具有重要经济意义的行业。为了确保对独有的 AUT 数据进行准确检测,专家操作员需要投入大量的精力和时间。人工智能(AI)辅助工具利用在大量实验室内 B 扫描图像(无论是增强图像还是合成图像)上训练的深度学习模型,在自动超声波判读方面表现出良好的性能,但仍需不断努力提高其准确性和适用性。要做到这一点,就必须利用超声波实验数据对其性能进行评估。在本研究中,我们介绍了一个真实世界的超声波 B 扫描图像数据集,该数据集是在石油和天然气管道的工业环缝自动检测过程中,从专有的 AUT 记录数据中生成的。我们数据集中的检测目标是检测一种常见的缺陷类型,即熔合不足(LOF)。我们使用该数据集对用于自动焊接缺陷检测的深度学习模型进行了实验性评估。我们的评估涵盖了最先进(SOTA)模型的基准性能,包括基于变压器的模型(DETR 和可变形 DETR)和 YOLOv8。它们在超声波 B-scan 图像中的探伤性能以前从未报道过。结果表明,在没有大量增强或架构定制的情况下,YOLOv8 在测试集上的 F1 得分为 0.814,优于其他模型。
Introduction:
为了提高检测过程的整体可信度和效率,研究人员越来越多地探索新技术,如优化缺陷检测激光诱导阵列[1]、在激光焊接坯件中实施计算机辅助自动检测以进行实时缺陷检测[2]等。与其他无损检测方法相比,UT 在有效检测次表层 [3] 和微小缺陷 [4] 方面具有悠久的历史。在 UT 中,放置在表面的传感器通过材料发射超声波。通过分析反射回传感器的超声波,可以检测和评估在制造、焊接或其他过程中出现的腐蚀和缺陷。;
自动超声波检测(AUT)利用安装在结构周围的自动系统,通过相控阵探头进行精确快速的检测。在相控阵技术中,阵列中的每个元件都是独立脉冲和延迟的,从而产生不同的光束角度和焦点范围可对材料进行全面检测。目前,自动光学检测需要人工操作员对获取的大量数据进行分析。自动光学检测期间,操作员的职责包括一系列任务。这些任务包括在结构周围定位检测头、进行检测、解释数据、记录结果以及决定是否接受或拒绝扫描剖面。这些错综复杂的顺序任务,再加上需要检测的大量扫描,可能会影响准确性并延长 UT 解释所需的时间。
在UT中,数据通常以A扫描、B扫描和C扫描的形式记录。B 扫描能直观显示被检测材料的更详细信息,在UT 领域引起了广泛关注。在计算机视觉领域引入 ImageNet [5] 之后,人们开始致力于利用基于深度学习的算法来应对下游任务中的挑战,尤其是在超声波 B 扫描图像的解读方面。
在[6]中,作者使用传统算法(如基于手工创建特征和统计技术的缺陷分类器)和基于机器学习的方法(包括卷积神经网络 (CNN))进行了实验,以对从激光生成的不锈钢板超声波传播成像[7,8]中获得的图像中的缺陷进行分类。在随后的工作[9]中,他们首先发布了首个公开可用的超声波检测数据集 USimgAIST [10],该数据集包含 18 块不锈钢板上的 7004 幅正常和缺陷图像,包括钻孔和狭缝缺陷。其次,他们在数据集上训练了多个 SOTA 深度 CNN,为超声波图像自动判读的深度学习模型提供基准。在 [11] 中,利用基于强化学习的神经架构搜索神经网络(RL-NAS NN)自动实现了基于 CNN 的最佳架构,用于对 USimgAIST 数据集上的缺陷进行分类。之前的所有方法尽管都提出了超声波图像判读的新理念,但都存在无法检测缺陷大小和位置的问题。
基于 SOTA CNN 的 AUT 物体检测器的首次应用是在 [12] 中实现的。他们在包含 490 幅灰度 B-scan 图像和 1562 个注释的数据集上使用重增强方法对 YOLOv3 [13] 和 SSD [14] 进行了微调。文献[16]利用另一种 SOTA 一阶段物体检测器 EfficientDet-D0 [15],使用自定义计算的锚点,在其内部数据集(包含 4147 幅人为缺陷的 B-scan 图像)上检测出了缺陷。DefectDet [17]是一种新颖的深度学习架构,它将 EfficientDet 的默认骨干替换为基于特征提取器的轻量级编码器-解码器和自定义检测头,通过将输入转移到架构中的 biFPN 块来检测具有极端长宽比的物体。尽管自动缺陷检测技术不断进步,但这些深度学习模型的可靠性在很大程度上依赖于庞大且分布合理的数据集。
生成大量超声波 B-scan 数据既耗时又昂贵。因此,许多关于超声波 B-scan 图像中缺陷分类和定位的研究通常依赖于实验室中在受控条件下检测测试样本的图像,或利用图像增强或合成数据生成等技术将有限数量的真实世界 UT 图像数据成倍增加,以提供数据需求量巨大的深度神经网络 (DNN) 进行训练。此外,为了建立一个包含各种缺陷的数据集,研究人员通常会在图像中引入人工缺陷,或故意在测试样本上制造缺陷。
在文献[18]中,作者对其几乎存在缺陷的超声波数据[19]进行了大量的数据扩增,用不同的背景创建了 10,000 大小的图像数据集。随着人工智能时代的到来,人们不再仅仅依赖于扩增,而是出现了更可靠的方法来扩展训练输入的数量。在文献[20]中,作者提出了两种基于生成-对抗的网络--DetectionGAN[21]和改进的 SPADE GAN[22],用于生成合成的 B-scan 图像,对于 UT 操作员来说,这些图像与真实图像几乎没有区别。
显然,从实验室实验中获得的数据分布可能与陆上检测的数据分布不同。对于基于深度学习的模型在超声波判读决策过程中发挥作用的应用来说,这种差异可能会带来严重的问题。在本文中,我们介绍了一个专有的 B-scan 图像数据集,该数据集是从UT 专家获取的极端条件下陆上油气管道环缝自动检测记录报告中生成的。此外,我们数据集中的缺陷类型是熔合不足(LOF),这是自动环缝焊接中常见的缺陷。我们认为,这是文献中首次利用从工业环境中捕获的具有真实缺陷(特别是 LOF)的超声波 B 扫描图像来微调深度学习算法。我们旨在研究基于 SOTA 深度学习的模型的性能,而不需要任何额外的合成数据或修改架构,以了解其在工业 B-scan 图像上的基线性能。我们在图 1 中说明了我们的工作,在图中,人类专家操作员在陆上执行自动超声波检测。检测完成后,使用采集软件采集并存储数据。随后,对检测数据进行处理,并输入基于神经网络的探伤仪,该探伤仪对数据进行分析,以识别潜在的缺陷。最后,由专业的人工操作员对结果进行审查和验证,为纠正任何遗漏或错误的检测提供关键的检查。
我们介绍了一个专有的工业超声波 B-scan 图像数据集,该数据集由人工检测人员在陆上石油和天然气环缝检测过程中进行的 AUT 检测记录生成。
除了 B 扫描数据集之外,还引入并研究了自动环缝焊接过程中通常会出现的真正缺陷,如 LOF。
我们在工业超声波 B 扫描图像上微调并评估了 SOTA 模型,如基于变压器的架构(DETR 和可变形 DETR)和 YOLOv8。
Dataset :
Dataset Description:
我们创建了一个超声波 B 扫描图像数据集,该数据集来自UT 专家利用相控阵技术的自动环缝焊缝检测系统获取的焊缝检测数据,用于检测石油和天然气管道。检测系统利用区域判别技术进行焊缝检测。在这种方法中,每个焊缝被分为几个垂直区域,每个区域都有一个特定的光束进行检测。多个光束围绕管道作单线运动。区域判别将焊缝分为三个主要区域:管帽区、管身区和管根区。管帽区和管身区分别包括填充 1 区和填充 2 区。根部区域包括热通道 2、热通道 1、LCP 和根部。图 2 表示区域判别技术中的三个区域。在我们的数据集中,焊接类型为 J 坡口,焊接缺陷类别为熔合不足(LOF),这是自动环缝焊接中最常见的缺陷。
Dataset Preparation:
我们利用UT 专家在陆上石油和天然气管道环缝焊缝检测过程中使用检测系统记录的 87 条专有焊缝检测记录创建了数据集。我们没有参与检测过程;我们只是从UT 专家提供给我们的专有焊缝检测数据中收集 B-scan 图像。每个记录的焊缝基准都包括一张 1920 × 1080 的图像,其中包含多个条形图,代表了用于 AUT 的相控阵探头的通道输出。条形图还提供了下游和上游相控阵探头的视图,以及每个通道所代表的每个焊缝区域。此外,每个记录的焊接基准都包含一个由人工操作员填写的表格,其中包括每个带状图图像上检测到的缺陷的类型、大小和位置。人工操作员还在每个相关的带状图中用边框标注了每个缺陷的确切位置。记录的数据包括原始的检测焊缝数据和解释焊缝数据。我们从焊缝检测数据集中收集了 359 张 B-scan 带状图图像。我们的 B-scan 数据集的分布包括填充 1 区、热通道 1 区和热通道 2 区。图 3 是其中一个记录的焊接数据文件中的 1920 × 1080 图像。
每个 1920 × 1080 图像包含 23 或 27 个条形图。这些条形图可以显示 A 扫描、B 扫描和 TOFD 超声波图像。在本研究中,我们主要关注条形图中的 B 扫描图像。从主图像中手动裁剪每个条形图既费时又容易造成误差。为此,我们开发了一个 Python 自动脚本。该脚本可自动从主图像中裁剪条带图。我们从主图像中收集了 359 幅 B-scan 图像。我们使用 DarkMark(https://github.com/stephanecharette/DarkMark,访问日期:2023 年 8 月 15 日,v1.8.11-1,Stéphane Charette,West Kelowna,BC,Canada)软件,根据人类操作员的解释在原始 B-scan 图像上标注缺陷。为了训练和评估深度学习模型,我们将数据集分为训练集、验证集和测试集。在表 1 中,我们详细介绍了每个集的图像数量、注释和负样本。我们的数据集共包含 229 张 B-scan 图像的 LOF 注释。图 4 展示了训练集中的 7 幅 B-scan 图像和 10 个 LOF 注释。
Dataset Properties:
本节研究的主要灵感来自 https://deci.ai/ course/profiling-computer-vision-datasets-overview(2023 年 11 月 17 日访问)。我们只使用了他们对图像分析的描述,以便根据我们的 B-scan 数据集实施这些描述。我们没有使用他们的 Python 软件包生成本文中的数据。
Image Dataset Analysis:
在本研究的这一部分,我们的目标是分析图像本身,而不考虑用于缺陷注释的边界框。我们根据图像中像素的亮度分布、宽度和高度分布以及平均值和标准偏差 (STD) 分析这些图像。首先,我们重点分析亮度分布。为了进行亮度分析,我们将每张图像从 RGB 转换到 LAB 色彩空间,并计算亮度 (L) 分量的平均值。图 5 中的核密度(KDE)图显示了三组图像的亮度分布,验证集和测试集的亮度分布与训练集图像的亮度分布基本一致。
接下来,我们检查了所有图像的尺寸分布。图 6 显示了三组图像中具有特定宽度或高度尺寸的图像数量,表明验证集和测试集中的图像分辨率都包含在测试集中。
我们为数据集计算的其他属性包括平均值(使用 https://github.com/iDataVisualizationLab/ roaddamagedetector(访问日期:2024 年 1 月 26 日)中的 "Mean pixels for normaliztion.ipynb "脚本进行像素平均值计算)和红、绿、蓝三个图像通道的像素 STD。这些属性有助于对基于深度学习的物体检测器模型进行更多定制,该模型已在 ImageNet [23] 和 COCO [24] 数据集上进行了预训练。表 2 列出了数据集中每组图像的像素平均值和 STD。
Bounding Box Analysis:
在对已实施的注释边界框进行分析时,我们根据每个缺陷的面积占整个 B 扫描图像的百分比、缺陷在每幅图像中的数量以及缺陷在数据集中的空间分布来讨论边界框的绘制。我们对训练集、验证集和测试集进行了这些分析。
为了分析每组图像中每张图像的边界框面积分布,我们计算了每张边界框的面积占 B 扫描图像总面积的百分比。图 7 显示了 LOF 缺陷在数据集中的面积分布。从图中可以看出,我们在 B-scan 图像数据集中面临着检测小缺陷的挑战。在我们的训练集中,边界框面积(锚框大小)的最小平方根和最大平方根分别接近 16 和 32。
边界框的高宽比分布(锚框比率)如图 8 所示。这表明训练集的锚框比率主要集中在分布图的中间,包括 1.2、1.4 和 1.7。
此外,我们还根据边界框在每张图像中的位置对其进行了分析。在图 9 中,缺陷分布在每组图像中的各个位置。
最后,图 10 显示了每组图像中出现的边界框数量。通过以上分析,我们了解到基于数据集,模型应在图像中检测到的最大缺陷数量。
Experimental Results:
我们选择了五个 SOTA 物体检测器,以便在我们的任务中对它们进行微调。我们的实验模型包括 RetinaNet [25]、DETR [26]、Deformable DETR [27]、YOLOv5u [28] 和 YOLOv8 [29]。这些模型主要包括基于 CNN 的物体检测器(RetinaNet、YOLOv5u 和 YOLOv8)和基于变换器的物体检测器(DETR 和 Deformable DETR)。选择这些模型的理由是:首先,我们包括了 RetinaNet 和 YOLOv5,这两个模型在在 B 扫描图像上以前的工作中已经研究过[16,17]。 此外,基于端到端变换器的物体检测器(DETR 和 Deformable DETR)以及最近基于 CNN 的架构(YOLOv8)的性能,此前研究界尚未在 B-scan 图像上进行过研究。因此,选择这些不同架构的目的是为了拓宽我们对基于深度学习的不同类型物体检测器在 UT 缺陷检测任务中的性能和影响的理解。
下面,我们将详细介绍我们在训练和评估阶段为每个模型手动设置的配置和超参数。我们手动设置的主要超参数包括学习率、网络输入图像大小以及迭代次数和历时次数。选择这些参数的理由是根据我们的图像数据集的特性进行设置。任何未明确提及的配置和超参数都与模型开发人员在预训练阶段所做的选择保持一致。我们在这一步骤中的目标是保持预训练模型时使用的大部分设置,目的是将这些模型在我们的数据集上的初步结果作为基准。所有模型都是在配备 Cuda 11.8、torrent 2.1.2 和 torchvision 0.16.2 [30] 的 Nvidia A100 40 GB GPU 上进行微调和评估的。为了提高不同超参数下结果的可重复性,我们将随机种子设置为 42,以实现更确定的随机初始化。值得注意的是,我们选择不从头开始训练这些模型,如文献[31]所讨论的那样,以避免不必要地延长训练过程而模型性能却没有显著提高,同时也因为没有足够大的数据集进行预训练。图 11 表示 B 扫描经过的流水线,用于分析潜在的缺陷。
相关文章:

【无损检测】基于用深度学习的工业超声B-Scan 图像中的焊缝缺陷
Automated Weld Defect Detection in Industrial Ultrasonic B-Scan Images Using Deep Learning Abstract: 自动超声波检测(AUT)是一种无损检测(NDT)方法,广泛应用于具有重要经济意义的行业。为了确保对独有的 AUT 数…...

iOS——GCD再学习
GCD 使用GCD好处,具体如下: GCD 可用于多核的并行运算;GCD 会自动利用更多的 CPU 内核(比如双核、四核);GCD 会自动管理线程的生命周期(创建线程、调度任务、销毁线程);…...

SVD降维
文章目录 一、SVD降维的基本原理二、SVD降维的步骤三、SVD降维的优点四、SVD降维的应用五、代码应用六、SVD降维的局限性 一、SVD降维的基本原理 SVD是线性代数中的一种技术,它将一个矩阵A分解为三个矩阵的乘积:A UΣV^T。其中,U和V是正交矩…...

剖析Cookie的工作原理及其安全风险
Cookie的工作原理主要涉及到HTTP协议中的状态管理。HTTP协议本身是无状态的,这意味着每次请求都是独立的,服务器不会保留之前的请求信息。为了在无状态的HTTP协议上实现有状态的会话,引入了Cookie机制。 1. Cookie定义 Cookie,也…...

规控面试复盘
目录 前言 一、京东方 1、CPP和C的区别是什么? 2、讲一下的ROS的话题通信 二、Momenta(泊车部门实习面试) 1、MPC的预测时间步是多少? 2、MPC的代价函数考虑的是什么? 三、九识 1、智能指针有哪些优缺点? 优点: 缺点: 2、Protobuf的数据传输效率为什么更高…...

Elastic Stack--ES集群加密及Kibana的RBAC实战
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 学习B站博主教程笔记: 最新版适合自学的ElasticStack全套视频(Elk零基础入门到精通教程)Linux运维必备—Elastic…...

【开源免费】基于SpringBoot+Vue.JS图书个性化推荐系统(JAVA毕业设计)
本文项目编号 T 015 ,文末自助获取源码 \color{red}{T015,文末自助获取源码} T015,文末自助获取源码 目录 一、系统介绍1.1 业务分析1.2 用例设计1.3 时序设计 二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究…...

STM32(F103ZET6)第十九课:FreeRtos的移植和使用
目录 需求一、FreeRtos简介二、移植FreeRtos1.复制代码2.内存空间分配和内核相关接口3.FreeRtosConfig4.添加到工程中三、任务块操作1.任务四种状态2.创建任务过程 需求 1.将FreeRtos(嵌入式实时操作系统)移植到STM32中。 2.在该系统中实现任务的创建、…...

索尼的Web3蓝图:从技术创新到现实应用的全方位布局
近年来,随着区块链技术和加密资产的迅猛发展,全球科技巨头纷纷投入其中,力图在Web3浪潮中占据一席之地。作为传统科技行业的巨头,索尼(Sony)也不甘落后,积极推动其Web3战略布局,展现出其在新兴领域的强烈野…...
探索Java中的分布式消息队列与事件总线:架构、实现与最佳实践
引言 在现代分布式系统中,消息队列和事件总线已经成为实现松耦合、高扩展性和高可用性架构的关键组件。无论是微服务架构、事件驱动架构,还是实时数据处理,消息队列和事件总线都扮演着至关重要的角色。本文将深入探讨Java中的分布式消息队列…...

HTML零基础教程(超详细)
一、什么是HTML HTML,全称超文本标记语言(HyperText Markup Language),是一种用于创建网页的标准标记语言。它通过一系列标签来定义网页的结构、内容和格式。HTML文档是由HTML元素构成的文本文件,这些元素包括标题、段…...

011.Python爬虫系列_bs4解析
我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数…...

django摄影竞赛小程序论文源码调试讲解
2系统关键技术及工具简介 系统开发过程中设计的关键技术是系统的核心,而开发工具则会影响的项目开发的进程和效率。第二部分便描述了系统的设计与实现等相关开发工具。 2.1 Python简介 Python 属于一个高层次的脚本语言,以解释性,编译性&am…...
Unity-OpenCV-Imgproc函数概览
OpenCV-Imgproc函数概览 函数名功能描述createLineSegmentDetector创建一个智能指针到 LineSegmentDetector 对象并初始化它。此算法用于检测图像中的线段。getGaussianKernel返回高斯滤波器的系数。这些系数用于平滑图像或进行高斯模糊。getDerivKernels返回计算图像空间导数的…...

水晶连连看 - 无限版软件操作说明书
水晶连连看 – 无限版游戏软件使用说明书 文章目录 水晶连连看 – 无限版游戏软件使用说明书1 引言1.1 编写目的1.2 项目名称1.3 项目背景1.4 项目开发环境 2 概述2.1 目标2.2 功能2.3 性能 3 运行环境3.1 硬件3.2 软件 4 使用说明4.1 游戏开始界面4.2 游戏设定4.2.1 游戏帮助4…...
目标检测-YOLOv3
YOLOv3介绍 YOLOv3 (You Only Look Once, Version 3) 是 YOLO 系列目标检测模型的第三个版本,相较于 YOLOv2 有了显著的改进和增强,尤其在检测速度和精度上表现优异。YOLOv3 的设计目标是在保持高速的前提下提升检测的准确性和稳定性。下面是对 YOLOv3 …...
vscode好用的快捷键整理~
vscode好用的快捷键 将当前行复制并插入到上一行 shift alt ↑将当前行复制并插入到上一行 shift alt ↓将光标复制到上一行 ctrl alt ↑将光标复制到下一行 ctrl alt ↓删除当前行 ctrl x 本身是剪切当前行,也可以作为删除当前行来用选中下一个相同的片段…...
Docker in Docker 实践 on mac
在尝试tekton构建ci pipeline是,需要在k8 pod里build image,于是研究了如何docker in docker。 1. 编写自己的dind docker image FROM docker:20.10.16-dind ENV DOCKER_HOST unix:///var/run/docker.sock 2. docker build 自己的dind docker image并…...
Flask-Session扩展,使用Redis存储会话数据
深入理解Flask-session扩展Redis Flask 应用中使用 flask-session 扩展将 session 数据存储在 Redis 中是一种高效且可扩展的方法,特别是在需要处理大量用户或需要分布式部署的应用中。以下是如何在 Flask 应用中配置 flask-session 以使用 Redis 存储 session 的步…...

urdf ( xacro ) 的 collision碰撞参数设置
目录 写在前面的话整体流程1 URDF 文件结构2 查看原始碰撞形状描述3 加入简单碰撞形状描述方法一 Meshlab 自动测量方法二 人为测量 4 加入XACRO函数简化描述 最终结果展示侧视图正视图碰撞几何体中心点设置不对出现的结果 写在前面的话 本文使用的 URDF 文件是由 solidworks …...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...

DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...