《Detection of Tea Leaf Blight in Low-Resolution UAV Remote Sensing Images》论文阅读
学习资料
- 论文题目:Detection of Tea Leaf Blight in Low-Resolution UAV Remote Sensing Images(低分辨率UAV遥感图像中茶叶枯萎病的检测)
- 论文地址:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=10345618
Abstract—摘要
研究背景
从茶树低分辨率(LR)图像中准确检测茶叶枯萎病(TLB)具有挑战性,原因包括患病茶叶体积小、密度大、边缘细节模糊,图像背景复杂且 TLB 斑点颜色和纹理特征与背景相似,导致现有方法检测精度低。
研究方法
提出一种两阶段网络,包括超分辨率(SR)网络 RFBDB-GAN 和轻量级检测网络(LWDNet)。
将 RFBDB-GAN 应用于无人机图像细节恢复,引入多尺度两阶段退化方法模拟不同拍摄高度对图像的退化,在发生器和鉴别器中分别加入 RFB 密集残差块(RFBDB)和光谱归一化(SN)项以恢复纹理细节使 TLB 斑点更明显。
LWDNet 采用 SIoU 损耗和增强的轻量级 PANNet(ELPNet),以实现精确的 TLB 检测且模型小。
实验结果
RFBDB-GAN 比其他 SR 方法有明显改进,LWDNet 的模型大小为 716KB,是基线 YOLOv5s 的 5%。该方法对 LR 无人机遥感图像中的 TLB 具有更高的检测精度。
关键词
深度学习,轻量级网络,目标检测,超分辨率(SR),茶病,无人机(UAV)遥感。
1. 介绍
研究背景
- 茶在中国的重要地位以及茶叶贸易对中国的影响。
- 茶叶生长中病害会影响品质和产量,造成经济损失,因此实时监测至关重要。
- 茶叶枯萎病是茶树最常见的病害之一,介绍了其症状和危害。
现有检测方法的不足
- 传统的茶农或植保专家现场检测方法主观、耗时、费力,且检测结果不一致、错误率高。
- 茶园分布面积大且偏远,检测病害需要大量人力物力。
- 遥感技术为农作物病害检测提供了新方法,但飞机和卫星技术在空间 / 时间分辨率和观测能力方面有局限性,且成本高;地面设备覆盖范围有限,耗时长。
- 无人机遥感更经济实惠、操作快速、易于使用,但现有从无人机遥感图像中检测茶叶枯萎病的方法存在问题。
机器学习检测方法分类及相关研究
- 传统机器学习方法:依赖人工生成的特征,结合分类器进行检测,如 Marin 等、Siebring 等、Han 等、Zhou 等、Lei 等、Albetis 等、Yu 等的研究,但该方法特征表示能力不足,在目标背景复杂、图像分辨率低时效果不佳。
- 深度学习方法:比传统机器学习方法具有更强的特征描述和模型泛化能力,能降低人工干预成本,如 Ishengoma 等、Oliveira 等、Kerkech 等、Chen 等、Yu 等、Shi 等的研究,但这些方法中无人机飞行高度低、图像分辨率高、覆盖病虫害作物面积小,检测效率较低。
本研究的贡献
- 提出了一种可在单幅图像中覆盖 500m 区域的茶叶枯萎病检测方法。
- 提出了具有多尺度感受野密集残差块的 RFBDB - GAN SR 网络,用于恢复无人机遥感图像的细节。
- 提出了多尺度两阶段退化策略,解决了深度学习模型泛化性能弱和鲁棒性不足的问题。
- 提出了高效的 LWDNet 模型,实现精确的茶叶枯萎病检测,其模型大小仅为 716kB,相当于基线 YOLOv5s 大小的 5%。
2. 材料
数据采集
- 采集地点:在中国安徽合肥西南部的八镇镇茶园,西与芜湖市接壤,北与巢湖接壤。
- 采集系统:包括一架无人机和一个 48 - MP 可见光传感器。
- 图像获取:使用 128 张高空间分辨率图像(飞行高度:2 - 4m)用于网络训练,16 张低空间分辨率图像(飞行高度:12 - 14 米)进行验证 / 测试。通过滑动窗口对训练数据集进行增强,从每个 8000×6000 原始图像中得到 100 张图像(800×600),并去除过度曝光和模糊的图像,最终得到 996 张高空间分辨率的训练图像。
- 图像示例:展示了不同高度裁剪的茶叶图像,包括 4 米高度和 12 米高度拍摄的 UAV 图像,并随机选择一个补丁进行放大比较,显示了随着无人机高度的增加,图像空间分辨率降低,茶叶斑点变小、模糊、难以分辨的情况
数据预处理
- RFBDB - GAN 的数据预处理:RFBDB - GAN 作为一种 SR 网络,旨在从退化未知且复杂的 LR 茶树图像中恢复 SR 图像。现有的 SR 方法通常使用经典退化,但由于无人机射击高度不同,经典退化无法有效模拟退化过程,导致 SR 图像中细节信息不足。为了增强图像的细节信息,提出了一种多尺度两阶段退化方法,通过引入随机缩放因子代替下采样因子,并使用特定的公式合成 LR 输入。
- LWDNet 的数据预处理:LWDNet 采用了马赛克数据增强方法,避免了由于对象小、样本有限而导致的模型过拟合;此外,还采用了翻转、色彩抖动、加噪等数据增强方法,以模拟自然场景下无人机摄影的复杂环境。
3. 方法
方法部分主要介绍了用于 LR UAV 茶叶图像中 TLB 精确检测的两阶段策略
3.1. 步骤
第一步:图像预处理和训练集构建(见材料-数据预处理部分)
对低空拍摄的UAV茶叶图像进行裁剪。
对于RFBDB-GAN,进行多尺度两阶段降解以获得LR图像。(增强细节信息)
对于LWDNet,使用噪声添加、翻转、颜色抖动和马赛克操作来扩展训练集。
第二步:RFBDB - GAN 的训练
将LR图像输入到生成器中生成SR图像。然后通过鉴别器将SR图像与原始图像进行比较,确定相似度,并将判断结果反馈给生成器,以调整生成器的参数。
第三步:RFBDB - GAN 的测试
经过训练的RFBDB-GAN对12-14 m处捕获的LR测试图像进行超分辨。然后将生成的SR图像作为检测网络的验证和测试集。在专家的指导下对SR图像中的TLB进行标记。
第四步:LWDNet 的训练
将训练集和验证集的大小调整为640 ×640。提取图像特征,通过增强的轻量级PANNet(ELPNet)结构融合特征映射,通过LWDNet的检测部分检测TLB。
第五步:LWDNet 的测试
通过训练好的LWDNet对SR测试集进行测试,并将检测结果拼接成完整的大图像。
| 红色虚线表示 RFBDB - GAN 的训练过程;蓝色虚线表示 LWDNet 的训练过程;绿色实线表示测试过程。 |
3.2. RFBDB-GAN SR
目的:从 LR 无人机的茶树图像中恢复细节,提高图像分辨率。
损失函数:使用 L1 损失、感知损失和 GAN 损失联合训练。
3.2.1. 网络结构
由生成器和鉴别器组成,生成器是由 RRDB 和 RFBDB 级联而成的密集残差结构,鉴别器采用具有谱归一化(SN)正则化项的 UNet。
生成器
Block - A
由 8 个 RRDB 区块串联而成,每个区块包含 3 个 DB 模块,残差结构密集。
Block - B
- 由八个 RFBDB 块组成,每个块包含三个 RFBDB 模块。
- 将 DB 模块中的卷积结构替换为改进的 RFB 结构,每一层的输出都与后续的输入层相连,促进信息交换,避免冗余特征学习。
- 改进的 RFB 结构使用不同大小的感受野来池化不同核的多个分支,使用扩展卷积层来控制偏心,并对其进行重构以获得最终输出。目的是保留高维信息以恢复 SR 图像的细节,相应地修改 RFB 结构,删除所有批归一化(BN)层,在输出处使用 LeakyReLU 而不是 ReLU 激活函数。
鉴别器
- 使用带有 SN 项的 UNet 作为鉴别器。SN 的作用是保证鉴别器满足 Lipschitz 连续性,将判别器每层输出的权重矩阵分解为 SVD,将最大奇异值限制为 1 并归一化,使网络在优化过程中参数变化更稳定,减少梯度爆炸的可能性。
- UNet 主要结构由卷积编码单元和卷积解码单元组成,为每个像素输出真实的值,并向生成器提供详细的逐像素反馈。实验发现单独使用 UNet 模型作为鉴别器时,不能恢复细节纹理甚至可能产生不自然纹理,加入 SN 后可提高网络恢复图像细节的能力,改善恢复的纹理。
3.2.2. 算法
- 输入:HR - images 集合、迭代次数 K、批次大小 m。
- 输出:训练好的生成器 G。
- 步骤:
- 使用多尺度两阶段退化方法对 HR - images 进行降级,获得配对的 LR - images 数据集。
- 单独使用 L1 损失对生成器进行初始化训练。
- 进行 K 次迭代训练,每次迭代中:
- 从生成器中抽取图像样本,通过鉴别器判断图像真假。
- 根据 L1 损失、感知损失和 GAN 损失的组合,通过基于梯度的优化器更新鉴别器的参数。
- 采样一批 LR 图像样本,生成假图像并放入鉴别器中,再根据损失函数通过基于梯度的优化器更新生成器的参数。
3.3. LWDNet 检测
目的:构建一个轻量级检测网络(LWDNet)用于从经过超分辨率处理的图像中精确检测茶叶枯萎病(TLB)。它以 YOLOv5s 作为基准网络,旨在提高检测精度的同时,保证模型的轻量化,以适用于使用无人机(UAV)进行实时茶叶监测的场景。
特点:模型大小仅为基线网络的 5%,通过一系列设计和优化,在减少参数数量的前提下,努力提高对 TLB 的检测能力,确保在实际应用中的高效性和准确性。
3.3.1. 网络结构
由特征提取、特征融合和检测部分三部分组成。
特征提取
- 模块应用:首先将输入图像传递给 CBRM 模块,该模块主要应用 Maxpooling,其目的是降低计算复杂度,减少模型参数量,避免计算冗余。因为图像中茶叶健康部位和患病部位存在大量重复像素,通过 Maxpooling 可以初步提取一些主要特征,同时减少后续处理的数据量。
- 结构特点:采用基于 SNet_A 和 SNet_B 交替级联的结构。SNet_A 结构输出的通道数是输入通道数的两倍,但输出特征映射的大小是输入特征映射的一半,从而支持特征映射的下采样,有助于提取更抽象的特征。SNet_B 输出的通道数与输入通道数一致,输出特征图的大小与输入特征图的大小一致,用于保留一定的原始特征信息。由于特征融合部分采用特征金字塔结构且包含两个上采样过程,因此在特征提取部分使用三个 SNet_A 模块进行下采样,以适应后续的特征融合操作。
特征融合
- 结构设计:为特征融合部分设计了 ELPNet 特征金字塔结构,将浅、中、深三个层次的特征融合在一起。这种设计的目的是充分利用不同层次的特征信息,提高网络对不同尺度目标(如 TLB 病斑)的检测能力。浅层次特征通常包含更多的细节信息,深层次特征则包含更抽象的语义信息,通过融合可以更好地兼顾两者,提高检测的准确性。
- 融合过程:
- 自下而上:执行两次上采样操作,将来自特征提取部分的浅层特征图和中层特征图串联起来。特征图在上采样前进行卷积,Concat 操作后使用 DWConv 调整通道数,保证自下而上过程中输入输出通道一致。这样可以逐步恢复特征图的分辨率,并融合不同层次的特征,使得网络能够更好地学习到不同尺度的特征表示,有利于检测不同大小的 TLB 病斑。
- 自顶向下:将特征提取部分提取的中深层特征图分别进行融合。为了减少参数的数量,在自顶向下的过程中只使用 DWConv。在 Concat 操作之前,DWConv 内核的大小为 3×3,步长为 2,用于对 feature map 执行 2 倍的下采样,以降低特征图的分辨率,提取更高级的特征。Concat 操作后,DWConv 内核大小为 3×3,步长为 1,用于调整通道数,以保证输入和输出通道一致,使得融合后的特征能够更好地被后续的检测部分处理。
检测部分
- 该部分主要基于融合后的特征图进行 TLB 的检测。它利用前面提取和融合的特征信息,对图像中的目标进行分类和定位。具体的检测过程可能涉及到对特征图进行卷积、池化等操作,以生成预测的边界框和类别标签。其设计目的是准确地识别出图像中的 TLB 病斑,并确定其位置和范围。
3.3.2. 算法
- 输入:茶图像数据集 X、epochs 数量 K、批次大小 m
- 输出:训练好的 LWDNet
- 步骤:
- 数据划分:将茶图像数据集
X
随机分为训练集X_t
和验证集X_v
。这种随机划分有助于保证训练集和验证集的分布具有一定的代表性,使得模型在训练集上学习到的特征和模式能够在验证集上得到合理的评估。通过验证集的评估结果,可以了解模型的泛化能力和性能表现,以便及时调整训练策略和超参数。 - 参数初始化:初始化 LWDNet 的参数
θ_0
。这是模型训练的起点,为后续的参数更新奠定基础。初始参数的选择会对模型的训练过程和最终性能产生一定影响,通常可以采用一些随机初始化方法或者预训练模型的参数作为初始值。 - 训练循环
- 外层循环(
k = 1
到K
):- 表示整个训练过程的轮数迭代。在每一轮训练中,模型都会对训练集进行学习和参数更新,以逐步提高对 TLB 的检测能力。
- 内层循环(
x_v i ∈ x_v
):- 对于验证集中的每个样本
x_v i
:- 预测标签(步骤 6):使用当前训练的模型对验证集样本进行预测,得到预测标签
yp i
。这里的预测过程涉及到模型的前向传播,即通过特征提取、特征融合和检测部分对输入图像进行处理,最终输出预测的 TLB 相关信息。 - 比较与计算损失(步骤 7):将预测值与真实标签(ground truth values)进行比较,根据 SIoU 损失函数(公式 (4))计算损失值。SIoU 损失函数考虑了预测框和真实框之间的多个因素,如矢量夹角、距离、形状和 IoU 等,能够更全面地衡量预测结果与真实情况的差异,从而为模型的参数调整提供更准确的指导。
- 参数更新(步骤 8):根据计算得到的损失值,通过梯度下降等优化算法更新模型的参数
θ_0
到θ_k
。梯度下降算法通过计算损失函数对模型参数的梯度,沿着梯度的反方向调整参数,以减小损失值,使模型的预测结果逐渐接近真实标签。不断迭代这个过程,使得模型在训练过程中不断优化自身的参数,提高对 TLB 的检测准确性。
- 预测标签(步骤 6):使用当前训练的模型对验证集样本进行预测,得到预测标签
- 对于验证集中的每个样本
- 外层循环(
- 数据划分:将茶图像数据集
4. 实验与讨论
实验设备和框架
RFBDB-GAN SR
SR 结果评价指标:采用 PSNR、SSIM、NIQE 和 LPIPS 等图像质量定量评价指标,PSNR 和 SSIM 值越高,重建效果越好,NIQE 和 LPIPS 值越小,重建效果越好。
具体参数设置:RFBDB - GAN 的学习率为 1e - 4,Adam 优化的参数值为 β1 = 0.9 和 β2 = 0.99。
不同的 SR 网络的结果:将 RFBDB - GAN 与基于 GAN、CNN、扩散和变压器的 SR 方法进行比较,结果表明基于 cnn 的 SR 方法估计的图像往往缺乏高频细节,基于变压器的 SR 方法产生失真图像,基于扩散的 SR 方法不适合数据,基于 gan 的 SR 方法中 ESRGAN 会产生伪影,Real - ESRGAN 和 RFBDB - GAN 可生成符合人类感知的 SR 图像,且 RFBDB - GAN 恢复的图像边缘信息更丰富,茶叶边缘细节更明显。
RFBDB - GAN 的烧蚀实验:为提高模型重建能力,在鉴别器中加入 SN 项,避免恢复图像中的伪像,并引入多尺度两阶段退化方法构建训练数据。烧蚀实验结果表明,多尺度两阶段退化方法优于经典的一阶段退化方法,SN 项对各评价指标有改善作用,多尺度两阶段降解法与 SN 项结合使用时 SR 结果最佳。
LWDNet 检测
检测结果评价指标(LWDNet):采用召回率、精度、mAP 和 F1 等常用的目标检测指标,基于混淆矩阵计算,给出了混淆矩阵的示例和各指标的定义。
具体参数设置:LWDNet 的初始学习率为 1e - 2,使用 SGD 优化器,动量矩阵为 0.937,权衰减为 0.0005。
生成的 SR 图像的检测结果:使用 LWDNet 从不同 SR 网络生成的 SR 图像中检测 TLB,结果表明 RFBDB - GAN 网络对 LR UAV 茶叶图像的恢复效果最好,检测精度更高。
不同检测网络的检测结果:比较不同检测网络对 RFBDB - GAN 生成的 SR 图像中 TLB 的检测效果,LWDNet 的大小远小于现有的一些深度网络,检测精度甚至高于 SOTA 轻量级网络 YOLOv7 - tiny,但其检测结果存在漏检和误检,需要改进。
LWDNet 的烧蚀实验:对 LWDNet 不同组成部分的性能进行烧蚀实验验证,包括不同损失函数、数据增强、不同的特征提取结构以及不同的特征融合结构的实验,结果表明 SIoU 损失函数、数据增强、SNet 结构和 ELPNet 结构与 SIoU 损失函数结合使用可以提高网络的检测精度。
讨论
- 研究策略:提出的策略通过 UAV 在 12 - 14 米高度飞行拍摄 LR 图像用于 TLB 检测,采用 RFBDB - GAN 网络对 LR 茶叶图像执行 SR,并使用多尺度两阶段退化方法构建训练数据,在判别器中添加 SN 项,在生成器中添加 RFB 密集残差结构,在 LWDNet 检测网络中设计 ELPNet 结构进行检测。
- SR 对检测精度的影响:从减少模糊和混淆、提供更详细的信息以及提取更多可区分特征三个角度分析 SR 对检测精度的影响。
- 实验结果分析:SR 图像与原始图像基本一致,细节更清晰,视觉效果更好,但 RFBDB - GAN 参数多,训练耗时复杂,后续研究将集中在更轻、更有效的 SR 方法上;RFBDB - GAN 可以有效提高图像分辨率,减少漏检率;不同检测网络对 TLB 存在漏检和误检,后续工作将侧重于减少 LWDNet 的误检和漏检,提高检测精度;RFBDB - GAN 和 LWDNet 的组合比 RFBDB - GAN 和 SuperYOLO 的组合效果更好;提出的模型在人工不均匀光照的图像上取得良好性能。
5. 结论
结论部分主要总结了研究成果和意义
研究背景:茶树 LR UAV 图像中 TLB 区域模糊、背景复杂,现有检测方法难以准确检测。
提出方法:结合 RFBDB - GAN 和 LWDNet 模型,给出两阶段方法提高 TLB 检测精度。
RFBDB - GAN 的优势:采用 RFBDB 结构,提高网络对茶叶细节的恢复能力;多尺度两阶段退化方法构建训练图像对,验证了对 LR 茶叶图像恢复的有效性。
LWDNet 的特点:分别使用 ELPNet 和 SNet 结构作为网络的特征融合和特征提取部分,缩减了基线网络参数,模型大小仅为 0.7MB,参数数仅为 0.2MB。
实验结果:检测实验结果表明,与现有方法相比,本文方法可以提高 LR UAV 图像 TLB 的检测精度。
相关文章:

《Detection of Tea Leaf Blight in Low-Resolution UAV Remote Sensing Images》论文阅读
学习资料 论文题目:Detection of Tea Leaf Blight in Low-Resolution UAV Remote Sensing Images(低分辨率UAV遥感图像中茶叶枯萎病的检测)论文地址:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber10345618 Abstr…...

低代码BPA(业务流程自动化)技术探讨
一、BPA流程设计平台的特点 可视化设计工具 大多数BPA流程设计平台提供直观的拖拽式界面,用户可以通过图形化方式设计、修改及优化业务流程。这种可视化的方式不仅降低了门槛,还便于非技术人员理解和参与流程设计。集成能力 现代BPA平台通常具备与其他系…...

开闭原则(OCP)
开闭原则(OCP):Open Closed Princide:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有代码,实现一个热插拔的效果。 简言之,是为了使程序的扩展性更好,…...

Unity之 TextMeshPro 介绍
TextMeshPro 是 Unity 中用于处理文本显示的高级插件,旨在替代 Unity 内置的 UI.Text 和 TextMesh 组件。与默认的文本组件相比,TextMeshPro 提供了更高的文本渲染质量和更多的文本样式选项,同时具备强大的优化能力。 TextMeshPro 的主要特点…...

Linux套接字Socket
Linux套接字Socket 前提知识补充 为不同机器上的两个进程之间提供通信机制 主机字节序小端存储,网络字节序大端存储 特点TCPUDP连接类型面向连接无连接可靠性高低有序性保证数据包按顺序到达不保证数据包顺序流量控制有滑动窗口机制无拥塞控制有拥塞控制机制无复杂性较高较低…...
基于 Web 的工业设备监测系统:非功能性需求与标准化数据访问机制的架构设计
目录 案例 【说明】 【问题 1】(6 分) 【问题 2】(14 分) 【问题 3】(5 分) 【答案】 【问题 1】解析 【问题 2】解析 【问题 3】解析 相关推荐 案例 阅读以下关于 Web 系统架构设计的叙述,回答问题 1 至问题 3 。 【说明】 某公司拟开发一款基于 Web 的…...

【MySQL】基础入门篇
> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:理解什么是MySQL,如何安装MySQL,简单使用MySQL。 > 毒鸡汤:有些事情,总是不明白,所以我不…...

uni-app vue3封装websocket,支持微信小程序
一、创建useWebSocket.js 文件 // useWebSocket.js // 获取链接的URL前缀 import {BASE_URL } from "./request";import {ref,onMounted,onBeforeUnmount } from "vue";// 假设我们使用 uni-app 的 globalData 或 Vuex 来管理用户状态 // 这里为了简单起…...

杭州算力小镇:AI泛化解锁新机遇,探寻AI Agent 迭代新路径
人工智能技术不断迭代,重点围绕着两个事情,一是数据,二是算力。 算法的迭代推动着AI朝向多模态的方向发展,使之能够灵活应对不同领域的不同任务,模型的任务执行能力大大提升,人工智能泛化能力被推上高潮。…...

IT行业的现状与发展趋势
IT行业的现状与发展趋势 随着信息技术的迅速发展,IT行业已成为全球经济的重要支柱之一。无论是传统行业的数字化转型,还是新兴技术的快速崛起,IT行业都在不断推动社会的进步和发展。本文将探讨IT行业的现状及未来发展趋势。 IT行业的现状 …...

华为认证HCIA篇--网络通信基础
大家好呀!我是reload。今天来带大家学习一下华为认证ia篇的网络通信基础部分,偏重一些基础的认识和概念性的东西。如果对网络通信熟悉的小伙伴可以选择跳过,如果是新手或小白的话建议还是看一看,先有个印象,好为后续的…...

【linux】regulartor-fixed
作用:创建一个固定的 regulator。一般是一个 GPIO 控制了一路电,只有开(enable) \ 关(disabled)两种操作。 device-tree node io_vdd_en: regulator-JW5217DFND {compatible "regulator-fixed"…...

11年408考研真题解析-计算机网络
第一题: 解析:网络层虚电路服务和数据报服务 传输服务只有:有连接可靠和无连接不可靠两种,直接排除BC。 网络层指的是IP协议,由图二可知:运输层,网际层,网络接口层唯一有连接可靠的协…...

wireshark使用要点
目录 IP过滤 端口过滤 内容过滤 过滤udp 过滤tcp IP过滤 ip.src XXX.XXX.XXX.XXX 只显示消息源地址为XXX.XXX.XXX.XXX的信息 ip.dst XXX.XXX.XXX.XXX 只显示消息目的地址为XXX.XXX.XXX.XXX的信息 ip.addr XXX.XXX.XXX.XXX显示消息源地址为XXX.XXX.XXX.XXX࿰…...

WebGL扩展与WebGPU
目录 WebGPU扩展的探索使用实验性或未标准化的特性示例:使用纹理压缩扩展多视口渲染自定义着色器阶段可变多重采样抗锯齿...

基于小安派AiPi-Eyes-Rx的N合1触摸屏游戏
基于小安派AiPi-Eyes-Rx的N合1触摸屏游戏 目前存在的游戏: 植物大战僵尸:demos/pvz羊了个羊:demos/yang消消乐:demos/xiaoxiaole华容道:demos/huarongdao PVZ功能展示可见: 羊了个羊: 消消…...

Java List sort() 排序
sort是java.util.List接口的默认方法。 List的排序方法在Java 8中被引入。 排序方法接受比较器作为参数,并根据指定的比较器对这个列表进行排序。 default void sort(Comparator<? super E> c) 示例代码: import java.text.Collator; import …...

Vue.js 与 Flask 或 Django 后端配合
Vue.js 与 Flask 或 Django 后端配合是一种常见的全栈开发方式,用于构建动态且响应迅速的 Web 应用程序。Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架,而 Flask 和 Django 是 Python 语言的两个非常流行的 Web 框架。下面将分别介绍 Vue.js …...

抽奖拼团卷轴模式系统开发小程序源代码解析
在当今的互联网商业环境中,抽奖、拼团与卷轴模式等创新玩法被广泛应用于小程序开发中,旨在通过多样化的互动方式吸引用户参与,提升用户粘性和平台活跃度。本文将围绕“抽奖拼团卷轴模式系统开发小程序源代码”这一主题,探讨其技术…...

MySql语言操作数据库---增删改查数据库,表,数据
思维导图 SQL语言共分为四大类: 数据定义语言DDL:数据定义语言DDL用来创建数据库中的各种对象-----[库]、[表]、[视图]、[索引]、 数据操纵语言DML:(1) 插入:INSERT (2) 更新:UPDATE (3) 删除:DELETE 数据查询语言DQL:数据查询语…...

C++深入学习string类成员函数(2):容器管理
引言 C 标准库中的容器(如 std::string、std::vector、std::list 等)都提供了一系列容器管理成员函数,用于处理容器的大小、容量、清空等操作。容器管理成员函数可以分为几类,主要包括容量查询、修改容器大小、清空容器等操作。 …...

MariaDB 和 MySQL 全面对比:选择数据库需要考虑这几点
谁在使用 MySQL 和 MariaDB? MySQL 和 MariaDB 都发布了各自的用户名单。 使用 MySQL 的有 Facebook、Github、YouTube、Twitter、PayPal、诺基亚、Spotify、Netflix 等。 使用 MariaDB 的有 Redhat、DBS、Suse、Ubuntu、1&1、Ingenico 等。 功能比较…...

Python 实现图形学几何变换算法
目录 Python 实现图形学几何变换算法几何变换介绍变换矩阵Python 实现几何变换代码解释总结 Python 实现图形学几何变换算法 在计算机图形学中,几何变换是非常重要的概念。它们允许我们对对象的位置、大小、方向进行操作,比如平移、缩放、旋转、反射等。…...

接口测试|超详细面试题【附答案】
今天给姐妹们整理了一套超详细的附答案的接口测试面试题,姐妹们快学起来吧~ 接口测试的重要性,相信不用我多说了。接口测试是现在软件测试工程师一个加分项。因为很多朋友一开始做了几年的软件测试都是在做功能测试,做界面UI的测试ÿ…...

Qt网络编程——QTcpServer和QTcpSocket
文章目录 核心APITCP回显服务器TCP回显客户端 核心API QTcpServer用于监听端口和获取客户端连接 名称类型说明对标原生APIlisten(const QHostAddress&, quint16 port)方法绑定指定的地址和端口号,并开始监听bind和listennextPendingConnection()方法从系统中获…...

CentOS 7 aarch64制作openssh 9.9p1 rpm包 —— 筑梦之路
本篇文章还是基于开源项目openssh-rpms制作。 https://github.com/boypt/openssh-rpms.git 官方发行说明: OpenSSH: Release Notes 1. 修改version.env 2. 下载源码包 openssl网站改版,下载地址和之前不一样了 # 下载openssl1.1.1w源码包cd downlo…...

Flink和Spark的区别
1、设计理念不同 flink:Flink是基于事件驱动的,是面向流的处理框架, Flink基于每个事件一行一行地流式处理,是真正的流式计算. 另外他也可以基于流来模拟批进行计算实现批处理。 spark:Spark的技术理念是使用微批来模拟流的计算,…...

以太网开发基础-MAC和PHY
直接参考: 以太网基础-MAC和PHY-CSDN博客 路由器上一般有三类MAC地址 给一个范例: 00:0C:E5:4B:F2:85 这个地址就可以作为LAN MAC地址 00:0C:E5:4B:F2:86 这个地址就可以作为WAN MAC地址 00:0C:E5:4B:F2:87 这个地址就可以作为无线 MAC地址 通常,路由器…...

Java 发布jar包到maven中央仓库(2024年9月保姆级教程)
文章目录 前言一、账号准备1. 注册登录账号2. 新建命名空间3. 验证命名空间4. 生成令牌5. 为 maven 设置令牌二、GPG准备1. 下载GPG2. 发布证书2.1 新建证书2.2 发布证书到服务器2.3 验证发布三、发布jar包到中央仓库1. 编辑项目pom文件2. 打包上传3. 发布jar包4. 搜索我们的ja…...

Pandas和Seaborn可视化详解
1.Pandas绘图-单变量 概述 pandas库是Python数据分析的核心库 它不仅可以加载和转换数据,还可以做更多的事情:它还可以可视化 pandas绘图API简单易用,是pandas流行的重要原因之一 可视化小技巧: 如果是类别型 柱状 饼图 (类别相对较少 5-…...