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

[CR]厚云填补_大型卫星影像去云数据集

AllClear: A Comprehensive Dataset and Benchmark for Cloud Removal in Satellite Imagery


Abstract

        卫星图像中的云对下游应用构成了重大挑战。当前云移除研究的一个主要挑战是缺乏一个全面的基准和一个足够大和多样化的训练数据集。为了解决这个问题,我们引入了最大的公共数据集——AllClear,用于云清除,其中包含23,742个全球分布的兴趣区域(roi),具有不同的土地利用模式,总共包含400万张图像。每个ROI包括2022年的完整时间捕获,包括:

  1. 来自Sentinel-2和Landsat 8/9的多光谱光学图像
  2. 来自Sentinel-1的合成孔径雷达(SAR)图像
  3. 辅助遥感产品,如云掩模和土地覆盖图

        我们通过基准性能验证了我们数据集的有效性,展示了精度指标——PSNR从28.47上升到33.87,增加30倍的数据,并对时间长度和单个模式的重要性进行了消融研究。该数据集旨在提供对地球表面的全面覆盖,并促进更好的除云结果。

1  Introduction 

        卫星图像识别可以实现环境监测、灾害响应、城市规划、作物产量预测等许多应用,但由于云层遮挡而受到严重阻碍。在任何给定时刻,大约67%的地球表面被云覆盖。无云捕获的有限可用性对于时间敏感事件(如野火控制和洪水损害评估)尤其成问题。因此,开发有效的去云技术对于在各个领域最大限度地利用遥感数据至关重要。 

        表1  公开可用的去云数据集。 

        阻碍云移除研究的一个主要挑战是缺乏全面的数据集和基准。一项关于云移除的公开可用数据集的调查(表1)揭示了几个问题:

  • 大多数现有数据集都是从一小部分地点采样的,因此地理多样性有限,这既影响了训练的有效性,也影响了评估的严谨性。
  • 许多现有的数据集过滤掉了非常多云的图像(例如,超过30%的云覆盖率),从而使训练好的模型无法处理广泛云覆盖的实际情况(图1)。
  • 一些现有的基准使用在与有云输入图像的时间差异较大的无云图像。这意味着在有云输入图像和无云图像之间可能发生了许多变化,从而在评估中引入了误差。
  • 现有的数据集包含了一组非常有限的传感器(即Sentinel-2),限制了模型可获得的信息,无法真实地去除云层。

        图1  左图:AllClear感兴趣区的地理分布;中间图:训练和测试集AllClear的土地覆盖分布;右图:整个AllClear数据集的云覆盖分布。

        为了解决这些限制并促进去云的未来研究,我们引入了迄今为止最大和最全面的数据集AllClear。为了确保充分覆盖地球下垫面的多样性,AllClear包括了23,742个分散在全球各地的不同土地覆盖种类的感兴趣区域(roi),产生了400万张多光谱图像。AllClear包括来自三颗不同卫星(即Sentinel-1,Sentinel-2和landsat -8/9)在每个ROI捕获的一年(2022年)的数据,使模型能够更好地填补缺失的信息。我们使用这个数据集来创建一个更严格的sequence-to-point基准,具有更多的时间对齐的基础真值。最后,除了大量的原始卫星图像,我们还为每个单独的图像构建了一组丰富的元数据(地理位置、时间戳、土地覆盖图、云掩膜等),以支持构建未来的模型来应对去云的挑战,实现分层评估。 

        我们评估了AllClear上现有的先进技术,发现现有的模型训练不足。在我们更大、更多样化的训练集上进行训练可以显著提高性能。我们还发现,使用全套可用传感器以及较长时间序列的模型表现得更好。总的来说,我们的贡献是:

  • 我们引入了迄今为止最大的云移除数据集,以及一个全面分层的评估基准
  • 证明更大、更多样化的训练集显著提高了模型的性能
  • 我们从经验上展示了利用多个传感器和更长的时间跨度的重要性

2  背景知识 

2.1  现有去云数据集 

        卫星图像云去除研究的进展,促使了几个具有独特特征和独特局限性的数据集的发展。STGAN引入了两个去云数据集,并建立了使用三幅图像作为输入的多时间任务格式。然而,该数据集丢弃了所有云量超过30%的图像,导致只有3k幅图像。继STGAN之后,Huang和Wu发现STGAN中的注释可能是不正确的,并提出了四倍数量于STGAN的图像的Sen2_MTC。Sen_MTC数据集首先在全球范围内采样50个瓦片,然后将瓦片分成小块,限制采样的区域多样性。STGAN和Sen_ MTC也没有描述它们的数据处理水平(例如,1级大气顶部或2级表面反射图像),因此很难比较不同数据集上的模型。不同于STGAN和Sen2 MTC数据集。SEN12MS-CR数据集的特点是包含合成孔径雷达(SAR)图像,以增强光学图像,每个数据点有一个图像对。紧接着是SEN12MS-CR-TS ,具有多时间(每个位置多个图像)多模态配对图像。对于每个位置,将2018年的30张Sentinel-1和Sentinel-2图像进行时间对齐和配对,形成时空瓦片。然而,两种模式之间的时间差异可以大到14天,输入和目标之间的时间差异可以大到一年,从而导致评估中的误差。此外,作者构建了一个sequence-to-point的云去除任务,其中不包括该数据集中云覆盖率超过50%的图像。EarthNet2021还提供了精心整理的sentinel -2图像序列,空间分辨率为20米,波段为RGB和红外。然而,该数据排除了高云层覆盖率的时空瓦片,因此不是一个理想的云移除数据集。 

2.2  去云方法

        早期的去云工作使用条件GAN将单幅图像映射到其无云版本,在NlR通道上进行调节或SAR图像,这些早期的尝试无法推广到真实的多云图像。Singh和Komodakis以及Ebel等人通过使用循环一致性损失改进了这种设置。其他方法学习从SAR图像到其相应的多光谱波段的映射。最近,随着Transformer的出现和兴起,已经引入了多个头部关注模块用于云去除任务。Yu等将云视为图像失真,设计失真感知模块来恢复无云图像。Zou等人利用多时间输入和多尺度注意力自编码器来利用全局和局部上下文进行重建。Ebel等人也采用了多时间输入和注意力自编码器,但也提出估计预测的不确定性,这控制了风险缓解应用的重建质量。Jing,Zou等人提出利用扩散训练目标进行无云图像生成,其输入仅依赖于最优图像,不考虑SAR图像。Khanna等人提出了一种用于卫星图像的生成基础模型,但并不适合云移除任务。 

3  数据集 

3.1  感兴趣区的选择 

        我们选择roi来满足两个目标:

  • 大部分地表的覆盖
  • 土地覆盖类型的平衡采样

        这种平衡的采样特别确保了像城市这样面积较小但更受关注的地方与大片荒野一样被很好地代表。为了获得这些ROI,我们遵循两个步骤:管理ROI候选对象池,然后构建跨土地覆盖类型平衡的训练/基准子组,如图1所示。这确保基准和训练集都包含足够数量的代表各种土地覆盖类型的数据。 

        为了管理ROI池,与之前随机选择ROI的工作不同,我们使用网格采样来选择每0.1°纬度和每0.1°cos(\theta )经度的ROI,其中\theta是纬度,从90°S到90°N。这种方法背后的思想是,同样的0.1°经度在赤道上可以表示11.1公里,在67°纬度上可以表示4.35公里。这种加权为避免高纬度地区的过度采样提供了一种简单而有效的方法。通过使用GeoPandas包剔除海洋区域,我们共选择了1,087,947个roi。

        接下来,我们从池中选择roi,在考虑地球表面土地覆盖分布的自然不平衡的情况下,实现更平衡的土地覆盖使用数据集。我们利用谷歌地球引擎的动态世界产品中的土地覆盖数据。这是一个10米分辨率的土地利用/土地覆盖(LULC)数据集,包含9个类别的类别概率和标签信息:水体、树木、草地、淹水植被、作物、灌木、建筑、裸地、冰雪。具体来说,我们计算了2022年LULC的全年中位数,作为每个ROl的土地利用和土地覆盖的估计。我们迭代地从候选池中选择roi,使得所有类别(雪和冰除外)的平均土地覆盖率在基准集中大于10%,在训练集中大于5%。

        最后,为了与先前数据集训练的模型进行更公平的比较,我们采取了额外的措施来排除接近SEN12MS-CR-TS数据集的roi。具体来说,SEN12MS-TR-CS数据集中的瓦片大小为40 x 40 km²。因此,我们排除了在SEN12MS-CR-TS的roi半径50公里范围内的AllClear中的roi。

3.2  数据准备

        AllClear包含由Google Earth Engine (GEE)平台提供的三种不同类型的开放获取卫星图像:Sentinel-2 A/B,sentinel - 1 A/B和Landsat 8/9。对于Sentinel-2,我们收集了所有13个波段的1c级正整流大气顶(TOA)反射率产品。对于Sentinel-1,我们获取了具有两个极化通道(VV和VH)的S1 Ground Range Detected (GRD) 产品。所有清晰系统的原始图像都被重新采样到10米分辨率。在所有下载过程中,我们都遵循默认的GEE预处理步骤。此外,我们还包括所有Sentinel-2图像的动态世界土地覆盖图。对于每个选定的ROI,我们的目标是在2022年以10米的空间分辨率收集所有2.56 x 2.56 km²的片。我们采用通用横墨卡托(Universal Transverse Mercator,简称UTM)坐标参考系(CRS),继Ebel、Zhao之后,将地球划分为60个带。每个跨越6度的经度,以确保最小的失真,特别是沿经度轴。由于卫星图像通常是在不一定符合UTM区域边界的大型图块中捕获的,因此在图块数据未覆盖整个ROI的地方可能会出现空白(NaN值)。在这种情况下,我们排除所有包含NaN值的图像以保持数据质量。 

数据预处理

        对于Sentinel-1,遵循Ebel等人,我们将S1的VV通道中的值削波为[-25,0],有VH通道的值削波为[-32.5,0]。对于 Sentinel-2和 Landsat8/9,我们将原始值裁剪为[0,10000]。然后将值规范化为 [0,1]的范围。

云和阴影遮罩计算

        云和阴影掩码是该数据集不可或缺的,因为它们用于通过掩盖目标图像中存在云和阴影的区域来指导评估度量计算。为了获得云掩码,我们使用了谷歌地球引擎上的S2云概率数据集。该数据集使用S2cloudless构建,S2cloudless是一种基于梯度增强算法的Sentinel-2图像自动云检测算法,在Hollstein参考数据集和LCD PixBox数据集中,对不透明云和半透明云的整体云检测精度最好。

        对于阴影掩码,理想情况下可以利用太阳方位角和云层高度来估计云的阴影,但后者的信息无法获得。因此,我们根据Google Earth Engine中的文档继续管理阴影掩码。通过计算暗像素和投影云区域来估计阴影。对于暗像素,我们使用来自Sentinel-2的场景分类图(SCL)波段值来去除水像素,因为水像素与阴影相似。然后,我们将NlR像素值的阈值设置为1e-4,以创建暗像素的地图。最后,取暗像素图与投影云区的交点,得到云阴影掩码。

3.3  基准任务设置和评估 

        为了评估,使用AllClear数据集构建了一个sequence-to-point的任务,该数据集分别具有278,613、14,215和55,317个样本的训练、验证和测试。每个实例包含三个输入图像(u1、u2、u3)、一个目标清晰图像(v)、输入云和阴影掩码、目标云和阴影掩码、时间戳以及诸如纬度、经度、太阳仰角和太阳方位角等元数据。Sentinel-2图像被认为是主要的传感器模态,而Sentinel-1和LandSat-8/9等传感器是辅助的。与以前的数据集不同,我们没有对输入图像中的云覆盖率设置阈值。我们还提供了不同阈值的云和阴影掩码选项供用户使用。

        我们解决了在以前的数据集中发现的两个时间偏差问题:源和目标图像之间的偏差(其中差异可能相隔数月)以及主传感器与辅助传感器配对的时间偏差(其中差异最多可能为两周)。为了避免时间错位问题,从四个连续的时空块中选择目标清晰图像。特别是,输入图像和目标图像的时间戳的顺序为[u1,v,u2,u3]或顺序为[u1,u2,v,u3]。这确保了目标图像不包括在捕获浑浊图像后发生的任何新的或未见过的变化。对于辅助传感器,我们选择与各自的Sentinel-2图像相差两天的辅助卫星图像。如果没有可用的辅助传感器图像匹配,则用相应的通道填充。

        请注意,我们的目标图像可能仍然有一些云(因为很难在每个时间跨度内获得无云图像)。为了在不同场景和限制度量不准确性之间达到平衡,我们将目标图像设置为云和阴影(组合)覆盖率小于10%,并在计算度量时排除多云像素。我们修改了各种基于像素的指标,只计算无云区域。我们采用了去云文献中常用的指标:平均绝对误差(MAE)、均方根误差(RMSE)、峰值信噪比(PSNR)、光谱角映射器(SAM)和结构相似指数测量(SSIM)。

4  实验

4.1  对AllClear测试集上的先前方法进行基准测试 

选择SoTA模型体系结构

        为了在数据集之间进行公平的比较,我们选择SoTA模型进行比较。具体来说,我们选择了在SEN12MS-CR-TS上预先训练过的最先进的模型作为基准,因为AllClear和SEN12MS-CR-TS都是大气层顶部图像,并且包含了Sentinel-2的所有波段。值得注意的是,其他以前的数据集,如STGAN和Sen2_MTC被排除在外,因为预处理方法和图像生产类型没有明确提到,这使得在AllClear数据集上直接部署以前的模型不公平,也不具有可比性。因此,我们排除了CTGAN、PMAA等模型。DiffCR使用这些数据集进行训练。相反,我们选择sequence-to-point模型UnCRtainTS模型,和sequence-to-sequence的模型U-TILISE,既在SEN12MS-TR-CS数据集上进行了预训练,也可用于我们的实验。对于这个评估,所有模型都接收三张图像作为输入。具体来说,它们同时接收沿通道维度连接的Sentinel-2和Sentinel-1图像。 

结果

        基准测试结果如表2所示。我们首先注意到,采样的基线云雾最少,拼接在数据集上表现良好。UnCRtainTS在SSIM和SAM方面的性能略好于这些采样基线。另一方面,U-TILISE模型无法达到采样基线的性能。由于U-TILISE是一个序列到序列的模型,我们采用它进行序列到点的评估,从输出序列中选择MAE得分最低的图像作为模型输出。值得注意的是,U-TlLISE的训练涉及到将采样的云掩模作为输入添加到无云图像中,并且训练它恢复原始的无云序列。以类似的方式对模型进行评估。采样云掩模与真实云的分布差异可能是导致真实场景中U-TILISE得分较低的原因。少混浊和拼接的良好性能令人感兴趣。我们推测部分原因可能是在AllClear中,输入图像和目标图像之间的时间差距较小,因此简单地对输入图像进行平均或选择可能会产生良好的结果。

        表2  在我们的AllClear基准数据集上评估了以前的SoTA模型的基准性能。表现最好的值用粗体表示,第二好的值用下划线表示。

失败案例

        为了更好地理解最先进技术的性能,我们将使用最先进模型UnCRtainTS生成的输出图像可视化,该模型是在SEN12MS-CR-TS数据集上训练的。在图2中,我们在AllClear测试用例上评估预训练模型,其中它接收三张浑浊图像作为输入。总的来说,我们观察到模型性能的三种主要失效模式:

  1. 模型不能从清晰的输入图像中提取,特别是当其他两个图像是浑浊的时候。正如作者所指出的那样,这个问题可能会出现,因为模型是专门针对云覆盖率低于50%的图像进行训练的。
  2. 即使输入的图像大部分是清晰的,该模型也经常难以恢复正确的光谱。我们假设这是由于相对较小的数据集大小,导致缺乏泛化能力。
  3. 模型往往不能推广到积雪覆盖地区。我们推测这是由于训练过程中对不同雪域的采样不足。

        图2  在SEN12MS-CR-TS云移除数据集上训练的先前SOTA模型UnCRtainTS的失败案例。

4.2  在AllClear上训练 

        接下来,我们将评估在AlClear上进行培训的好处。出于这个目的,我们使用UnCRtainTS,因为它在之前的基准测试中表现良好。为了评估AllClear和之前的SEN12MS-TR-CS数据集之间是否存在域差异,我们首先运行一个相等训练集大小的比较。我们在AllClear的子集上训练UnCRtainTS,该子集的大小与UnCRtainTS训练中使用的训练集大小相同,即10,167个数据点。为了避免额外的调优,我们还遵循了原始论文中的训练超参数。如表3所示,当两个模型在AllClear上进行评估时(即表3中底部的两行),我们观察到在两个数据集上预训练的UnCRtainTS模型在四个指标上具有可比较的结果。这表明两个数据集之间没有明显的域差异。        

        表3  在AllClear上重新训练UnCRtainTs模型的基准性能.

使用AllClear进行缩放

        接下来我们使用AllClear提供的大型训练集来评估我们可以缩放多少UnCRtainTS。具体来说,我们在同一验证集上进行评估时,使用来自训练数据集的随机抽样来管理各种规模的数据集。表4显示了结果。我们发现,更多的训练数据明显提高了所有指标的准确性,导致PSNR提高了10%以上。图5显示,使用更大的数据集,该模型能够更好地去除云并更好地保留颜色。这表明,在过去的数据集上训练的云移除模型通常训练不足,而AllClear的大型训练集对于帮助模型更好地拟合数据非常有用。  

        表4  我们的模型在以UnCRtainTS为骨干架构的AllClear数据集上的缩放规律。

        图5  将训练数据集缩放10倍会得到更好的定性结果。

4.3  分层评价

        我们使用AllClear中可用的土地覆盖类型标签对土地覆盖类型进行分层评估(图3)。我们通常发现,水体和积雪的PSNR和SSIM指标都要差得多。水体具有瞬态波型,积雪也常常是瞬态波型,这可能解释了预测这些波型的困难。雪也可能与云混淆。 

        图3  使用AllClear数据集的不同部分训练的模型的土地覆盖分层评估:1%、3.4%、10%和100%。

        图4  在不同云和阴影覆盖水平下,通过PSNR(左列)和SSIM(右列)测量云的去除质量。上面一行表示在完整AllClear数据集上训练的模型,下面一行表示在SEN12MS-CR-TS数据集上训练的模型。

        根据过去的工作,我们还对相对于云覆盖和阴影程度的精度进行了分层评估(图5)。对于云覆盖,通常性能随云百分比下降,这是预期内的。在更大的数据集(AllClear)上进行训练,大大提高了低云和中等云量的准确性,但对全云地区则没有提高。请注意,条纹图案是由于完全浑浊的图像,在附录中解释。阴影通常不是问题,阴影百分比似乎与性能无关。 

4.4  不同时间跨度的影响

        接下来,我们将使用基准测试来查看使用3个输入图像的常见做法是否足够。我们比较了两个模型,一个使用3张图像,另一个使用在该位置捕获的所有12张图像。这两个模型都是在AllClear的10k子集上训练的。结果如表5所示,表明事实上较长的时间跨度显著提高了准确性。因此,未来的云清除技术应该考虑更长的时间跨度。

        表5  不同时间长度的影响

5  结论 

        本文介绍了AllClear,这是用于云清除研究的最广泛和最多样化的数据集。更大的训练集显著提高了最先进的性能。我们的数据集还可以对云覆盖和土地覆盖以及序列长度和传感器类型的消融进行分层评估。我们希望未来的研究可以建立在这个基准上,例如通过探索SAR和多光谱图像之间的动态,来推进云的去除。 

相关文章:

[CR]厚云填补_大型卫星影像去云数据集

AllClear: A Comprehensive Dataset and Benchmark for Cloud Removal in Satellite Imagery Abstract 卫星图像中的云对下游应用构成了重大挑战。当前云移除研究的一个主要挑战是缺乏一个全面的基准和一个足够大和多样化的训练数据集。为了解决这个问题,我们引入了…...

Langchain CharacterTextSplitter无法分割文档问题

在使用Langchain的文档分割器时,使用CharacterTextSplitter拆分文档是,发现返回的文档根本没有变化,即使设置了chunk_size,返回的大小也不符合参数设置。 CharacterTextSplitter设置了150,但是根本没有处理&#xff0…...

ros service不走是为什么

在ROS(Robot Operating System)中,如果ROS服务(Service)没有正常工作,可能有多种原因。你可以检查以下几点来排查问题: 服务是否正确启动 首先,确保服务节点已经启动并注册了相应的…...

量子计算机的原理与物理实现

量子计算机的原理与物理实现很复杂 指导性原则 首先思考制备一台量子计算机需要些什么? 需要量子比特——二能级量子系统。除了量子计算机需要满足一些物理特性,它还必须要把量子比特绘制到某种初态上,以及测量系统的输出态。 而实验上的挑战…...

SQL Server 常用关键词语法汇总

一、函数 1.1 CAST CAST ( expression AS data_type [ ( length ) ] )expression: 这是你想要转换的数据或表达式。data_type: 目标数据类型,比如 INT, VARCHAR, DATE 等等。(length): 对于某些数据类型(如 CHAR, VARCHAR, BINARY, VARBINARY&#xff…...

软件测试工程师面试整理 —— 操作系统与网络基础!

在软件测试中,了解操作系统和网络基础知识对于有效地进行测试工作至关重要。无论是在配置测试环境、调试网络问题,还是在进行性能测试和安全测试时,这些知识都是不可或缺的。 1. 操作系统基础 操作系统(Operating System, OS&am…...

网络安全防御策略:通过限制IP访问提升服务器安全性

标题:网络安全防御策略:通过限制IP访问提升服务器安全性 摘要: 在网络安全领域,服务器被入侵是一场严重的事故。一旦发生这种情况,除了立即采取措施恢复系统外,还需要加强后续的安全防护措施。本文将探讨为…...

Multiprocessing出错没有提示was skipped without notice in python

这个问题可以通过打印返回结果解决。 解决方法 比如 Pool.apply_async(csdnKuangXiaoHU, args=(p, DestFile))改成 Result = Pool.apply_async(csdnKuangXiaoHU, args=...

调整应用窗口透明度

朋友问我有没有软件透明得,一开始没理解,他给我发一个,我一看原来时调整窗口透明度得,想着python应该也可以实现,就写了一个。 效果图如下: 源码如下: import sys import ctypes from PySid…...

启智畅想集装箱号码智能识别原理,OCR识别应用

集装箱号码用途: 集装箱号码在填写托运单时是必填项,用于标识和跟踪货物运输过程中的集装箱。它有助于海关管理和物流跟踪,确保货物能够顺利通过海关检查并按时送达目的地。 集装箱号码智能识别原理: 在深入探讨集装箱号码OCR&…...

React基础知识

说明:react版本为 18.3.1 React是什么 React由Meta公司研发,是一个用于构建Web和原生交互界面的库。(开发基于浏览器的web应用和基于mac和android的移动应用)React的优势 1.相较于传统基于DOM开发的优势:组件化的开…...

Java基础:面向对象编程3

1 Java可变长参数 1.1 概述 Java 的可变长参数(Varargs)是在 Java 1.5 中引入的功能,允许方法接受任意数量的相同类型的参数。可变参数的语法是在参数类型后面加上三个点(...),例如 int... numbers。 1.…...

实验kubernetes的CPU绑定策略

CPU 管理配置 CPU 管理策略通过 kubelet 参数 --cpu-manager-policy 或 KubeletConfiguration 中的 cpuManagerPolicy 字段来指定。 支持两种策略: none:默认策略。static:允许为节点上具有某些资源特征的 Pod 赋予增强的 CPU 亲和性和独占…...

Zsh 安装与配置

目录 1 环境配置 1.1 基本工具安装 1.2 安装 oh-my-zsh 1.3 从.bashrc中迁移配置(可选) 2 主题配置 2.1 内置主题 2.2 自定义主题 2.2.1 推荐主题 3 插件安装 3.1 推荐插件 3.1.1 zsh -autosuggestions 3.1.2 zsh-syntax-highlighting 3.2 启…...

Redis可视化工具Redis Desktop Manager(附安装包)

前言 redis工具,我相信每个开发都需要,如果每次查都去client执行指令,我怕查完之后,老大就要发版咯。我之前一直用的Redis可视化工具RedisDesktopManager,总觉得差点意思,直到同事推荐了个新的&#xff0c…...

sql server删除过期备份文件脚本

一、通过脚本查看过期文件,时间可以自己设定 for /f "delims" %i in (dir /b /a-d "E:\mybak_file\*.bak" ^| findstr /i "backup" ^| findstr /v /i "no_backup") do if "%~ti" LSS "2024/09/29 16:50&qu…...

【Docker系列】Docker查看镜像架构

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

Python案例 | 测试网络的下载速度上传速度和 ping 延迟

使用了 speedtest 库来测试网络的下载速度上传速度和 ping 延迟 注意,这里需要先卸载speedtest,再安装speedtest-cli pip uninstall speedtest pip install speedtest-cli其次运行代码: # 使用了 speedtest 库来测试网络的下载速度上传速度…...

一键找回,2024四大固态硬盘数据恢复工具推荐!

虽然固态硬盘(SSD)因其读写速度快、功耗低等特点受到广泛欢迎,但它并非无懈可击,数据丢失的问题依然存在。如果你也遇到了固态硬盘数据丢失的问题,那么一下的这几款软件可以一试! 福昕数据恢复 直达链接&…...

数据结构~AVL树

文章目录 一、AVL树的概念二、AVL树的定义三、AVL树的插入四、AVL树的平衡五、AVL树的验证六、AVL树的删除七、完整代码八、总结 一、AVL树的概念 AVL树是最先发明的自平衡二叉查找树,AVL是⼀颗空树,或者具备下列性质的二叉搜索树:它的左右子…...

ffmpeg面向对象——rtsp拉流探索(1)

目录 0.avformat_open_input的rtsp流程程纯净版1.rtsp拉流流程图2.rtsp拉流对象图 标准rtsp协议的基石是tcp,本节探索下ffmpeg的rtsp拉流协议tcp的创建及rtsp协商过程。 0.avformat_open_input的rtsp流程程纯净版 ffmpeg拉流,从avformat_open_input接口…...

【启明智显分享】ZX7981PM WIFI6 5G-CPE:2.5G WAN口,2.4G/5G双频段自动调速

昨天,我们向大家展现了ZX7981PG WIFI6 5G-CPE,它强大的性能也引起了一波关注,与此同时,我们了解到部分用户对更高容量与更高速网口的需求。没关系!启明智显早就预料到了!ZX7981PM满足你的需求! …...

openresty“热部署“lua

一、前言 频繁reload 或者restart影响测试使用nginx,修改lua脚本后要实际查看效果值,使用关闭lua代码缓存,可以实现实时查看代码效果。 每次请求都会从磁盘中加载lua脚本,生产上面不要开启,影响响应速度 二、修改ngin…...

基于SpringBoot+Vue+MySQL的企业招聘管理系统

系统展示 用户前台界面 管理员后台界面 企业后台界面 系统背景 在当今数字化转型的大潮中,企业对于高效、智能化的人力资源管理系统的需求日益增长。招聘作为人力资源管理的首要环节,其效率与效果直接影响到企业的人才储备与竞争力。传统的招聘方式不仅耗…...

vue3之defineComponent

defineComponent 是 Vue 3 中提供的一个辅助函数,用于定义组件。它可以帮助你更好地利用 TypeScript 的类型推断和 IDE 的自动补全功能。defineComponent 主要用于组合式 API(Composition API)和单文件组件(SFC)。 使…...

springboot+vue家政服务管理平台

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的,前后端分离。 开发语言:Java数据库:MySQL技术:…...

python pip安装requirements.txt依赖与国内镜像

python pip安装requirements.txt依赖与国内镜像 如果网络通畅,直接pip安装依赖: pip install -r requirements.txt 如果需要国内的镜像,可以考虑使用阿里的,在后面加上: -i http://mirrors.aliyun.com/pypi/simple --…...

解决Qt的QWidget设计师编辑UI后和软件运行显示不一致

解决方法,只需要在main.cpp中加入下面一段代码 if (QT_VERSION > QT_VERSION_CHECK(5, 6, 0))QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling,true); 完整的代码如下 int main(int argc, char *argv[]) { if (QT_VERSION > QT_VERSION_C…...

交易所开发:构建安全、高效、可靠的数字资产交易平台

数字资产交易平台是加密市场中连接用户与数字货币的重要枢纽。开发一个安全、高效、可靠的交易所,不仅需要综合考虑技术架构、安全策略、用户体验等方面,还需严格遵循法规要求以确保合规性。本文总结了交易所开发的关键要素,包括其类型、核心…...

【Next.js 入门教程系列】09-优化技巧

原文链接 CSDN 的排版/样式可能有问题,去我的博客查看原文系列吧,觉得有用的话, 给我的库点个star,关注一下吧 上一篇【Next.js 入门教程系列】08-发送邮件 优化技巧 本篇包括以下内容: Optimizing imagesUsing third-party JS…...