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

盘古大模型实战

0 前言

前一段时间,在学习人工智能的同时,也去了解了一下几乎是作为人工智能在气象上应用的一大里程碑式的研究成果-华为盘古气象大模型。正是盘古大模型的出现,促使天气预报的未来发展方向多了个除天气学方法、统计学方法、数值预报方法之外的AI方法。故写一篇博客来对之前的一部分实践内容进行总结。

1 盘古大模型

1.1初识盘古

       盘古气象大模型是来自华为云的研究人员提出了一种新的高分辨率全球AI气象预报系统。盘古气象大模型是首个精度超过传统数值预报方法的AI方法,1小时-7天预测精度均高于传统数值方法(欧洲气象中心的operational IFS),同时预测速度提升10000倍,能够提供秒级的全球气象预报,包括位势、湿度、风速、温度、海平面气压等。盘古气象模型的水平空间分辨率达到0.25∘×0.25∘ ,时间分辨率为1小时,覆盖13层垂直高度,可以精准地预测细粒度气象特征。作为基础模型,盘古气象大模型还能够直接应用于多个下游场景。例如,在热带风暴预测任务中,盘古气象大模型的预测精度显著超过欧洲气象中心的高精度预报(ECMWF HRES Forecast)结果。

       盘古大模型使用的数据,包括垂直高度上13个不同气压层,每层五种气象要素(温度、湿度、位势、经度和纬度方向的风速),以及地球表面的四种气象要素(2米温度、经度和纬度方向的10米风速、海平面气压)。

       基于复杂多变的气象背景,研究者提出3D Earth-Specific Transformer。其主要思想是使用一个视觉transformer3D变种来处理复杂的不均匀的气象要素。由于气象数据分辨率很大,因而相比于常见的vision transformer方法,研究人员将网络的encoderdecoder减少到2级(8block),同时采用Swin transformer的滑窗注意力机制,以减少网络的计算量。

       同时,气象要素数据对应的经纬度网格是不均匀的,而不同的要素在不同纬度、高度的分布也是不均匀的。对这些不均匀性的建模,有利于学习气象数据背后潜藏着的复杂物理规律,如科里奥利力等。为此,研究者在每一个transformer模块中引入和纬度、高度相关的绝对位置编码来学习每一次空间运算的不规则分量。这样改动后的transformer模块,被称为3D Earth-Specific Transformer

       为了缓解迭代误差,研究者提出一个简单而有效的策略。研究人员训练了4个不同预报间隔的模型,分别为1小时间隔、3小时间隔、6小时间隔、24小时间隔。进而,研究人员使用贪心算法调用这些模型,使得预测特定时间气象状况的迭代次数最小。例如,对于24小时预测,只需要调用一次24小时间隔的模型;而对于23小时预测,则需要调用三次6小时预报,一次3小时预报和两次1小时预报。通过使用多个不同时间间隔模型捕捉不同时序关系,盘古气象大模型不仅减少了迭代误差,并且避免了由递归训练带来的训练资源消耗。

1.2相关论文与博客

1.Nature

Accurate medium-range global weather forecasting with 3D neural networks, Nature, Volume 619, Pages 533–538, 2023.

2.arXiv 预印本

Pangu-Weather: A 3D High-Resolution Model for Fast and Accurate Global Weather Forecast, arXiv preprint: 2211.02556, 2022.

盘古天气:快速准确的全球天气预报的 3D 高分辨率模型

2 模型下载

盘古的开发者团队将参考代码与需要准备的库与说明都在开源的GitHub项目有所说明

GitHub链接:

GitHub - 198808xc/Pangu-Weather: An official implementation of Pangu-Weather

在这里,我们可以用git把项目clone下来。

Git地址:https://github.com/198808xc/Pangu-Weather.git

在Git中运行以下内容:

git clone https://github.com/198808xc/Pangu-Weather.git

同时 ,盘古提供的四个时段的预测模型(3h、6h、12h、24h)的模型也可以在GitHub上下载,或点击以下链接(Git中的链接):

Please download the four pre-trained models (~1.1GB each) from Google drive or Baidu netdisk:

The 1-hour model (pangu_weather_1.onnx): Google drive/Baidu netdisk

The 3-hour model (pangu_weather_3.onnx): Google drive/Baidu netdisk

The 6-hour model (pangu_weather_6.onnx): Google drive/Baidu netdisk

The 24-hour model (pangu_weather_24.onnx): Google drive/Baidu netdisk

3 数据下载

3.1ERA5再分析数据

ECMWF(European Centre for Medium-Range Weather Forecasts)的再分析资料ECMWF Reanalysis v5(ERA5)数据。

ERA5再分析资料的下载地址:ERA5 hourly data on pressure levels from 1940 to present (copernicus.eu)

ERA5 hourly data on single levels from 1940 to present (copernicus.eu)

3.2ECMWF集合预报数据

TIGGE 数据集(国际全球大集合)由 13 个全球 NWP 中心自 2006 年 10 月起12 的集合预报数据组成。它是 THORPEX 交互式全球大集合的一部分,是世界气象组织于 2005 年 3 月启动的一项研究计划。

本篇使用TIGGE (The International Grand Global Ensemble)提供的集合预报数据,与盘古气象大模型的预测结果进行对比验证。

数据的下载网址如下:

https://apps.ecmwf.int/datasets/data/tigge/levtype=sfc/type=fc/

4 数据处理 

在进行盘古模型的训练之前,我们首先需要知道输入数据的要求。

地表:输入数据分为4个,分别是海表面气压,10m经纬向风和2m温度

高度层:位势,比湿,温度,经纬向风

surface: 4 surface variables (MSLP, U10, V10, T2M)

upper:(Z, Q, T, U and V) 13levs

(1000hPa, 925hPa, 850hPa, 700hPa, 600hPa, 500hPa, 400hPa, 300hPa,250hPa, 200hPa, 150hPa, 100hPa and 50hPa)

721*1440 latitude*longitude

在官网选择好所需的ERA5数据之后,盘古的开发者团队在开源的GitHub项目上对数据类型有所强调,只能输入”.npy格式数据,且在输入模型时要定义为float.32格式,所以我们要对下载好的数据进行进一步的处理。

代码

代码分为两个部分,一个是处理高度层(upper)数据为npy格式,一个是处理地表数据(surface)到npy格式。

第一部分
import xarray as xr
import numpy as np
import os
df=xr.open_dataset(r"D:\Pangu-Weather-ReadyToGo\Test-Data\mslp-10mU-10mV-2mT-2024.08.00.nc")
time_list=np.array(df.valid_time)
#(MSLP, U10, V10, T2M in the exact order)
save_dir="D:\Pangu-Weather-ReadyToGo\Test-Data\surface_data"
for i in range(len(time_list)):time = time_list[i]msl = np.expand_dims(df.msl.loc[time, :, :], 0)u10 = np.expand_dims(df.u10.loc[time, :, :], 0)v10 = np.expand_dims(df.v10.loc[time, :, :], 0)t2m = np.expand_dims(df.t2m.loc[time, :, :], 0)res_array = np.concatenate([msl,u10, v10, t2m], axis=0)strname=f'mslp-10mU-10mV-2mT-{str(time)[:-16]}'+'.npy'save_path = os.path.join(save_dir, strname)np.save(save_path, res_array)print(strname,"saved successfully")
第二部分 
import xarray as xr
import numpy as np
import os
df=xr.open_dataset(r"D:\Pangu-Weather-ReadyToGo\Test-Data\Z-Q-T-U-V-13levs-2024.08.00.nc")
time_list=np.array(df.valid_time)
#(5,13,721,1440)
#(Z, Q, T, U and V in the exact order),
# 13 pressure levels (1000hPa, 925hPa, 850hPa, 700hPa, 600hPa, 500hPa,
# 400hPa, 300hPa, 250hPa, 200hPa, 150hPa, 100hPa and 50hPa in the exact order)
# print(df.pressure_level)
print(df)
save_dir=r"D:\Pangu-Weather-ReadyToGo\Test-Data\upper_data"
for i in range(len(time_list)):time = time_list[i]z = np.expand_dims(df.z.loc[time, :, :], 0)q = np.expand_dims(df.q.loc[time, :, :], 0)t = np.expand_dims(df.t.loc[time, :, :], 0)u = np.expand_dims(df.u.loc[time, :, :], 0)v = np.expand_dims(df.v.loc[time, :, :], 0)res_array = np.concatenate([z,q,t,u,v], axis=0)strname=f'z-q-t-u-v-{str(time)[:-16]}'+'.npy'save_path = os.path.join(save_dir, strname)np.save(save_path, res_array)print(strname,"saved successfully")

以上代码将下载的包含多个时间步的nc数据分割为逐个时间步的npy。

5 模型运行

这里以24h的预测模型为例。注意:需要写好下载的预测模型路径、数据读取路径和数据输出路径。

import os
import numpy as np
import onnx
import onnxruntime as ort
#-------------以下是数据要求-----------
'''
surface: 4 surface variables (MSLP, U10, V10, T2M in the exact order)
upper:(Z, Q, T, U and V) 13levs
(1000hPa, 925hPa, 850hPa, 700hPa, 600hPa, 500hPa, 400hPa, 300hPa,250hPa, 200hPa, 150hPa, 100hPa and 50hPa
721*1440 latitude longitude
initial fields of at 12:00UTC, 2018/09/27.
Note that ndarray (.astype(np.float32)), not in double precision.
'''
# The directory of your input and output data
input_data_dir1 = r"D:\Pangu-Weather-ReadyToGo\Test-Data\surface_data"
input_data_dir2 = r"D:\Pangu-Weather-ReadyToGo\Test-Data\upper_data"
output_data_dir = r"D:\Pangu-Weather-ReadyToGo\Test-Data\output_data"
model_24 = onnx.load("D:\Pangu-Weather-ReadyToGo\Pangu-Weather-main\models\pangu_weather_24.onnx")
file_name_surface='mslp-10mU-10mV-2mT-2024-08-06T00.npy'
file_name_surface_out='mslp-10mU-10mV-2mT-2024-08-07T00.npy'
file_name_upper="z-q-t-u-v-2024-08-06T00.npy"
file_name_upper_out='z-q-t-u-v-2024-08-07T00.npy'
# Set the behavier of onnxruntime
options = ort.SessionOptions()
options.enable_cpu_mem_arena=False
options.enable_mem_pattern = False
options.enable_mem_reuse = False
# Increase the number for faster inference and more memory consumption
options.intra_op_num_threads = 1# Set the behavier of cuda provider
cuda_provider_options = {'arena_extend_strategy':'kSameAsRequested',}# Initialize onnxruntime session for Pangu-Weather Models
ort_session_24 = ort.InferenceSession(r"D:\Pangu-Weather-ReadyToGo\Pangu-Weather-main\models\pangu_weather_24.onnx",sess_options=options, providers=[('CUDAExecutionProvider', cuda_provider_options)])# Load the upper-air numpy arrays
input = np.load(os.path.join(input_data_dir2, file_name_upper)).astype(np.float32)
# Load the surface numpy arrays
input_surface = np.load(os.path.join(input_data_dir1, file_name_surface)).astype(np.float32)
# Run the inference session
output, output_surface = ort_session_24.run(None, {'input':input, 'input_surface':input_surface})
# Save the results
np.save(os.path.join(output_data_dir, f'{file_name_upper_out}'), output)
np.save(os.path.join(output_data_dir, f'{file_name_surface_out}'), output_surface)

最后再将模型的输出数据由npy转成nc,标注上输出各个数据的变量名称,完成模型运行。 

同样的,可以使用循环的方式迭代调用盘古模型,或者以贪心算法组合调用不同预测时间步的模型,以下以24h迭代预测为例子:

# Load the upper-air numpy arrays
input = np.load(os.path.join(input_data_dir2, file_name_upper)).astype(np.float32)
# Load the surface numpy arrays
input_surface = np.load(os.path.join(input_data_dir1, file_name_surface)).astype(np.float32)
# Run the inference session
input_24, input_surface_24 = input, input_surface
for i in range(run_time):output, output_surface = ort_session_24.run(None, {'input':input_24, 'input_surface':input_surface_24})input_24, input_surface_24 = output, output_surface# Save the resultsfile_name_upper_out = f'z-q-t-u-v-2024-08-0{i+2}T00.npy'file_name_surface_out = f'mslp-10mU-10mV-2mT-2024-08-0{i+2}T00.npy'np.save(os.path.join(output_data_dir, f'{file_name_upper_out}'), output)np.save(os.path.join(output_data_dir, f'{file_name_surface_out}'), output_surface)print(f'2024-08-0{i+2}T00 run successfully')# Your can save the results here

运行结果

用panoply简单挑出模型的其中一个运行结果(2m温度)来看,结果如下:

6 模型结果评估

6.1 简单评估

这里以广东范围的区域平均海平面气压来进行和EC预报数据的简单对比评估,代码如下:

import numpy as np
import xarray as xr
import matplotlib.pyplot as plt
import os
import glob
from scipy import statsdf=xr.open_dataset(r"D:\Pangu-Weather-ReadyToGo\Test-Data\mslp-10mU-10mV-2mT-2024.08.00.nc")
# u10 v10 t2m msl (valid_time, latitude, longitude) float32 71MB ...
var=df.msl.loc['2024-08-02':'2024-08-07',25.5:20,109.5:117.5]
var_mean=np.mean(var,axis=(1,2))/100
print(var_mean)
time=var.valid_time
#ecmwf的预报
file_path=r"D:\Pangu-Weather-ReadyToGo\Test-Data\ECMWF_2024-08-fc.grib"
ds = xr.open_dataset(file_path,engine='cfgrib')
msl_ecmwf=ds.msl.loc['2024-08-01':'2024-08-06',25.5:20,109.5:117.5]
msl_ecmwf=np.array(np.mean(msl_ecmwf,axis=(1,2))/100)
# 设置文件夹路径
folder_path = r"D:\Pangu-Weather-ReadyToGo\Test-Data\output_nc\24h"  # 替换为你的文件夹路径# 获取以 "mslp-10mU-10mV-2mT" 开头的所有 .nc 文件
file_list = glob.glob(os.path.join(folder_path, 'mslp-10mU-10mV-2mT*.nc'))#z-q-t-u-v*.nc
# 按照文件名中的日期部分排序(假设日期部分为文件名的第20-29位)
file_list.sort(key=lambda x: x.split('-')[-1].split('.')[0])
print(file_list)
combined_data=[]
# 逐个读取文件并提取数据
for file in file_list:nc_file=xr.open_dataset(file)#v_component_of_wind_10m u_component_of_wind_10m mean_sea_level_pressuret2m = nc_file.mean_sea_level_pressure.loc[25.5:20,109.5:117.5]t2m=np.mean(t2m, axis=(0, 1))combined_data.append(t2m)
combined_data=np.array(combined_data)/100
# 计算误差的绝对值
# 计算误差的绝对值
error1 = np.abs(var_mean - combined_data)
error2 = np.abs(var_mean - msl_ecmwf)
plt.figure(figsize=[8,4])
# 设置主图风格为Nature风格
plt.rcParams.update({'font.size': 10,'axes.linewidth': 1.0,'axes.spines.top': False,'axes.spines.right': False,'xtick.major.width': 1.0,'ytick.major.width': 1.0,'legend.frameon': False,'legend.fontsize': 10
})
plt.title('Sea Level Pressure [hpa]', fontsize=12)
plt.ylim(1006, 1010)
plt.plot(time, var_mean, label='ERA5', c='k', lw=1.5)
plt.plot(time, combined_data, label='PanGu', c='red', lw=1.5)
plt.plot(time,msl_ecmwf,label='EC', c='grey', lw=1.5)
plt.legend(loc='lower right')
# 创建嵌入的误差柱状图
inset_ax = plt.gca().inset_axes([0.12, 0.15, 0.25, 0.3])  # [x, y, width, height]
inset_ax.bar(np.arange(1,7,1),error1, color='red', alpha=1)
inset_ax.bar(np.arange(1,7,1),error2, color='k', alpha=0.5)
# # 对误差进行线性回归拟合
# slope, intercept, r_value, p_value, std_err = stats.linregress(np.arange(1,7,1), error)
# fit_line = slope * np.arange(1,7,1) + intercept
# inset_ax.plot(np.arange(1,7,1),fit_line,color='blue', lw=1.5)
# 设置误差图的标题和样式
inset_ax.set_title('Absolute Error', fontsize=6)
inset_ax.tick_params(axis='both', which='major', labelsize=8)
inset_ax.spines['top'].set_visible(False)
inset_ax.spines['right'].set_visible(False)
inset_ax.spines['bottom'].set_linewidth(1.0)
inset_ax.spines['left'].set_linewidth(1.0)
plt.show()

结果如下:

辅助左下角的柱状图,可以初步看到PanGu的实际预测和EC的预报数据各有好坏。在前三天Pangu的误差显著偏大,在第六天时EC的预报误差变大。

6.2 官网对照

得到的数据还可以在EC的官方进行检验核对,链接如下:

ECMWF | Charts

7 参考资料

[1]GitHub - 198808xc/Pangu-Weather: An official implementation of Pangu-Weather

[2]https://zhuanlan.zhihu.com/p/582285853

[3]华为云盘古气象(Pangu-Weather)大模型调试运行之小白教程-CSDN博客 

具体代码已经在github中更新,可在以下链接查看:

GitHub - OkFine1/My-repository: Learning related updates

文中使用的测试数据可在百度网盘获取:
链接: https://pan.baidu.com/s/11wzQ-mrldYJrrfrTaRLOHQ 提取码: 6666

相关文章:

盘古大模型实战

0 前言 前一段时间,在学习人工智能的同时,也去了解了一下几乎是作为人工智能在气象上应用的一大里程碑式的研究成果-华为盘古气象大模型。正是盘古大模型的出现,促使天气预报的未来发展方向多了个除天气学方法、统计学方法、数值预报方法之外…...

Python subprocess.run 使用注意事项,避免出现list index out of range

在执行iOS UI 自动化专项测试的时候,在运行第一遍的时候遇到了这样的错误: 2024-12-04 20:22:27 ERROR conftest pytest_runtest_makereport 106 Test test_open_stream.py::TestOpenStream::test_xxx_open_stream[iPhoneX-xxx-1-250] failed with err…...

包管理器npm,cnpm,yarn和pnpm

npm (Node Package Manager) 核心技术与工作原理 依赖解析: 广度优先搜索(BFS):npm 使用 BFS 算法来解析依赖树,尽量扁平化 node_modules 目录以减少重复的依赖项。冲突处理:如果两个包需要同一个依赖的不…...

树莓派4B使用opencv读取摄像头配置指南

本文自己记录,给我们lab自己使用,其他朋友们不一定完全适配,请酌情参考。 一. 安装opecnv 我们的树莓派4B默认是armv7l架构,安装的miniconda最新的版本 Miniconda3-latest-Linux-armv7l.sh 仍然是python3.4几乎无法使用&#xff…...

Spring Boot 进阶话题:部署

部署是将应用程序从开发环境移动到可以供用户访问的生产环境的过程。Spring Boot提供了多种部署选项,包括打包为可执行jar文件,使用Docker容器化,以及部署到云平台。 打包Spring Boot应用 Spring Boot应用可以打包为包含所有依赖、类和资源…...

Python 3 和 MongoDB 的集成使用

Python 3 和 MongoDB 的集成使用 MongoDB 是一个流行的 NoSQL 数据库,以其灵活的数据模型和强大的查询功能而闻名。Python 3 作为一种广泛使用的编程语言,与 MongoDB 的集成变得日益重要。本文将介绍如何在 Python 3 环境中集成和使用 MongoDB&#xff…...

perl语言中模式匹配的左右关系

这里简单记录一下,在perl语言中,关于模式匹配的一个细节: 在进行模式匹配的时候,左边写需要查找的字符串,右侧写匹配的关键字. 两边的顺序不一样就会导致匹配结果不一样. 测试代码:…...

【漏洞复现】网动统一通信平台(ActiveUC)接口iactiveEnterMeeting存在信息泄露漏洞

🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦 @TOC 一、漏洞概述 1.1漏洞简介 漏洞名称:网动统一通信平台(ActiveUC)接口iactiveEnterMeeting存在信息泄露漏洞漏洞编号:无漏洞类型:信息泄露漏洞威胁等级:高危影…...

C++ STL 容器系列(三)list —— 编程世界的万能胶,数据结构中的百变精灵

STL系列学习参考: C STL系列__zwy的博客-CSDN博客https://blog.csdn.net/bite_zwy/category_12838593.html 学习C STL的三个境界,会用,明理,能扩展,STL中的所有容器都遵循这个规律,下面我们就按照这三个境…...

Java经典面试题总结(附答案)2025

点击获取PDF版 10、如何将字符串反转? 添加到StringBuilder中,然后调用reverse()。 11、String 类的常用方法都有那些? equals、length、contains、replace、split、hashcode、indexof、substring、trim、toUpperCase、toLowerCase、isEmpt…...

Stylus 浏览器扩展开发-Cursor AI辅助

项目起源 作为一个经常需要长时间盯着屏幕的开发者,我一直在寻找一个简单的方法来保护眼睛。最初的想法很简单:将网页背景色替换成护眼的豆沙绿。虽然市面上已经有类似的扩展,但我想要一个更加轻量且可定制的解决方案。 这个简单的需求逐渐…...

DAY35|动态规划Part03|LeetCode:01背包问题 二维、01背包问题 一维、416. 分割等和子集

目录 01背包理论基础(一) 基本思路 C代码 01背包理论基础(二) 基本思路 C代码 LeetCode:416. 分割等和子集 基本思路 C代码 01背包理论基础(一) 题目链接:卡码网46. 携带研究材料 文字…...

创建空向量:std::vector<int> v,刚创建时大小为0

创建一个空的std::vector<int> v会在刚创建时具有大小&#xff08;size&#xff09;为0的特点。这意味着此时向量中没有任何元素&#xff0c;而且其容量&#xff08;capacity&#xff09;也返回0&#xff0c;表明还没有为这个向量分配任何内存空间3。换句话说&#xff0c…...

VBA基础2

VBA基础2 sub过程语法对单元格进行赋值操作连续赋值不连续赋值 cells &#xff08;行&#xff0c;列&#xff09;行引用rows列引用 &#xff08;columns&#xff09;offset位移属性End属性&#xff08;指定返回&#xff09; 使用VBA编辑器需要用AltF11打开 或者VB编辑器打开 可…...

计算机网络-GRE基础实验二

前面我们学习了GRE隧道的建立以及通过静态路由指向的方式使得双方能够网络互联&#xff0c;但是通过静态路由可能比较麻烦&#xff0c;GRE支持组播、单播、广播因此可以在GRE隧道中运行动态路由协议使得网络配置更加灵活。 通过前面的动态路由协议的学习我们知道动态路由协议都…...

JSON 使用

JSON 使用 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript编程语言的一个子集,但因其文本格式清晰简洁,被广泛用于数据交换和存储。本文将详细介绍JSON的使用方法,包括其语法、数据类型、如…...

Leetcode—1539. 第 k 个缺失的正整数【简单】

2024每日刷题&#xff08;206&#xff09; Leetcode—1539. 第 k 个缺失的正整数 C实现代码 class Solution { public:int findKthPositive(vector<int>& arr, int k) {int missing 1;int cur 1;int n arr.size();int missingCnt 0;int ptr 0;for(; missingCn…...

深入浅出:PHP 控制结构与循环语句

文章目录 引言控制结构条件判断if-else 语句elseif 语句嵌套的 if 语句三元运算符 switch 语句 循环语句for 循环遍历数组使用 range() while 循环基本用法无限循环循环控制语句break 语句continue 语句do-while 循环 综合案例参考资料 引言 PHP 是一种广泛用于服务器端开发的…...

深入解析 Loss 减少方式:mean和sum的区别及其在大语言模型中的应用 (中英双语)

深入解析 Loss 减少方式&#xff1a;mean 和 sum 的区别及其在大语言模型中的应用 在训练大语言模型&#xff08;Large Language Models, LLM&#xff09;时&#xff0c;损失函数&#xff08;Loss Function&#xff09;的处理方式对模型的性能和优化过程有显著影响。本文以 re…...

c++ auto

在C中&#xff0c;auto 是一种类型推导关键字&#xff0c;它允许编译器根据初始化表达式的类型自动推导变量的类型。自 C11 标准引入以来&#xff0c;auto 使得代码更加简洁&#xff0c;并且可以减少冗长的类型声明&#xff0c;尤其是在类型名称非常复杂或难以立即确定的情况下…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...