一种基于EBS及多节点并行的集群式海量遥感影像解译框架的制作方法

文档序号:39365226发布日期:2024-09-13 11:17阅读:19来源:国知局
一种基于EBS及多节点并行的集群式海量遥感影像解译框架的制作方法

本发明属于遥感影像解译领域,具体涉及一种基于ebs及多节点并行的集群式海量遥感影像解译框架


背景技术:

1、在分布式和集群化的应用开发中,涉及到大规模数据处理和任务调度的问题。为了应对这些问题,开发人员借助于一些常用的技术和工具,如redis、celery和mysql等。redis是一个内存数据存储系统,通常被用作缓存和消息代理。它具有快速访问和高度可扩展性的特点,能够有效地处理大量的短时间数据访问和存储。celery是一个分布式任务队列系统,用于处理大规模的异步任务。它能够将任务数据分发到多个工作节点,并对任务进行调度和监控,以实现高效的任务处理。mysql是一个常用的关系型数据库管理系统,广泛应用于数据持久化和存储。它提供了强大的数据管理和查询功能,并且能够与其他组件(如redis和celery)进行集成,实现数据的读写和处理。


技术实现思路

1、发明目的:随着遥感技术的发展和应用越来越广泛,卫星、无人机等飞行平台的使用也越来越多,导致了海量遥感影像数据的积累。这些数据的规模和数量不断增加,有效地管理和利用这些数据成为一个严峻的问题。特别是在海量遥感影像解译的过程中,由于遥感数据的特点,即数据容量大、数据格式复杂,并且对时间和空间分辨率的需求差异很大,单纯使用一台电脑进行处理面临着解译效率低下和gpu资源利用不充分等挑战。本发明基于并行计算、分布式处理和其他先进技术的解决方案。利用并行计算的能力,将遥感数据的处理任务分配到多个计算节点上进行并行计算,从而提高解译效率。

2、技术方案:本发明的一种基于ebs及多节点并行的集群式海量遥感影像解译框架,包括如下步骤:

3、步骤1、基础环境配置:要构建一个可靠的海量遥感影像解译框架,首先需要进行多个基础环境配置和程序部署步骤。具体包括配置ebs存储卷,创建启动多个ec2实例;redis、mysql、celery的安装和环境配置。

4、步骤2、判断任务数量,是否发送请求:以服务请求的方式向主节点root_node发送遥感影像解译请求,root_node判断redis中剩余的任务数量。提示当前还有几个任务,是否需要继续进行检测操作。

5、步骤3、任务发布:若在步骤2中,需要继续进行检测操作,则发送请求,编写应用程序代码,根据遥感影像的大小来确定需要把多少个子任务添加到redis消息队列中。具体步骤包括:判断遥感影像大小并裁剪影像、发送任务至redis消息队列、将解译参数存储至mysql数据库中。

6、步骤4、任务执行:每个ec2节点都是一个worker,它们都连接到redis服务中。当redis中还有待处理任务时,worker会领取其中的任务。通过task_id与当前project_id进行关联,worker会从mysql中获取相关的解译数据参数,以进行遥感影像解译。解译完成后,生成的结果文件将以tif格式存储到指定的输出路径中。

7、步骤5、任务监控:开启任务进度监控,定时访问节点信息请求接口,实时获取每个ec2节点的进度信息并进行展示。主要包括发送和处理请求,信息展示。

8、步骤6、任务异常处理:在使用redis和celery构建任务队列时,如果发生任务异常结束的情况,本发明可以自动重新执行任务。为此,worker进程会捕获任何意外的异常,并将任务重新发布到redis的任务队列中,以便后续重新执行。

9、步骤7、解译结果生成与浏览:在展示页面显示所有任务结束后,可以将裁剪后的影像解译结果合并为一个tif文件,并将其转换为矢量图层。然后,根据解译要求,对矢量图层进行优化和调整。具体步骤包括:合并栅格、栅格转面、面图层后处理。

10、本发明基于海量遥感影像数据的积累面临的有效地管理和利用这些数据的问题,采用并行计算、分布式处理和其他先进技术的解决方案。利用并行计算的能力,将遥感数据的处理任务分配到多个计算节点上进行并行计算,从而提高解译效率,有效地解决了使用一台电脑进行处理面临着解译效率低下和gpu资源利用不充分的问题。

11、进一步的,步骤1的基础环境配置中,构建一个可靠的海量遥感影像解译框架,首先需要完成多个基础环境配置和程序部署步骤。步骤如下:

12、步骤1.1、配置ebs存储卷,创建启动多个ec2实例:第一登录aws管理控制台,进入ec2控制面板,创建存储卷,选择存储类型、容量大小和可用区等参数;第二进行ec2实例创建,在ec2控制面板中,选择“实例”,然后点击“启动实例”,在启动向导中,选择合适的ami,以作为实例使用的操作系统和软件基础镜像,选择实例类型和其他配置选项,如子网、vpc、安全组等。在“存储”部分,将之前创建的存储卷附加到实例上,并选择对应的设备名称。完成配置后,单击“启动”来创建ec2实例;第三进行在“存储卷”页面,对需要共享的ebs卷,进行“创建快照”操作,记录此快照的id;最后重复步骤之前步骤创建多个ec2实例,需要注意的是,在配置存储时,选择“使用现有的ebs卷”,选择共享的存储卷,以便该实例可以访问共享数据。

13、步骤1.2、redis、mysql、celery的安装和环境配置:将redis作为消息代理,celery作为任务队列,mysql作为请求发送参数存储库,三者协同,构建集群式系统,可以实现遥感影像数据的分布式解译和结果存储。具体包括redis安装部署、celery安装部署、mysql安装部署。首先在一台在ec2实例上安装redis服务器,假设该实例命名为root_node,编辑redis配置文件,设置所需的配置选项,如密码、端口号、最大内存限制等,启动redis服务;其次拷贝项目运行虚拟环境至ec2实例中,使用pip安装celery库,并在celery_config.py中,配置消息代理(如rabbitmq、redis)、设置任务队列、worker的个数、任务的序列化方式,执行任务结果序列化方式、指定任务接受的内容类型、redis服务的主机地址、服务端口、消息队列数据库名称以及结果存储数据库名称等,本发明使用redis作为消息代理。最后在root_node中安装mysql服务器,设置mysql的用户名、密码,并创建数据库和表,启动mysql服务,并在项目运行代码的配置文件中编写连接到mysql数据库的代码。

14、进一步的,步骤2所述的判断任务数量,是否发送请求中,发送遥感影像解译请求至root_node,root_node判断redis中所剩任务数量,提示“当前还有几个任务,是否需要继续进行检测操作”,若点击“是”,则进行下一步;反之直接结束本次请求。

15、进一步的,步骤3所述的任务发布中,根据任务中遥感影像大小确定需要添加至redis消息队列中的子任务数量,步骤如下:

16、步骤3.1、判断遥感影像大小并裁剪影像:以变化检测为例,接收到的文件夹中存在若干个子文件夹中,单个子文件夹中名称为name,存在2副前期和后期遥感影像时,假设影像名称为pre.tif、post.tif,两期影像大小一致,获取pre.tif遥感影像的宽度width和高度height,若width和height中任意一个大于指定大小maxsize,则进行影像裁剪,裁剪大小为clipsize,根据width、height、clipsize计算裁剪行数rows和列数cols,裁剪计算公式为:

17、rows = int(height/clipsize)                   (1)

18、cols = int(width/clipsize)                   (2)

19、根据裁剪公式将pre.tif、post.tif裁剪为若干个前期和后期影像,其对应的前后期影像存储在不同文件夹中,文件夹名称命名为该影像列数_行数_文件夹名称,例如第0列第1行,则为0_1_name;若小于指定大小,则不执行裁剪,将该子文件夹放置任务存储文件夹中。

20、步骤3.2、发送任务至redis消息队列:遍历步骤3.1剪裁后的文件夹,一个文件夹中的影像作为一个子任务,对该子任务进行序列化,每个子任务并配置一个task_id,将该task_id和序列化的任务提交至redis消息队列中。

21、步骤3.3、将解译参数存储至mysql数据库中:该次请求配置一个project_id(此次请求中所有的子任务公用该参数),将此次任务共有的参数、project_id、task_id存储至projectbatchdetection表中,将不同参数、project_id存储至taskbatchdetection表中,两个表通过project_id为外键关联;

22、进一步的,步骤4的任务执行中,worker会领取其中的任务redis中还有待处理任务。通过task_id与当前project_id进行关联,worker会从mysql中获取相关的解译数据参数,以进行遥感影像解译。解译完成后,生成的结果文件将以tif格式存储到指定的输出路径中。为确保结果文件与处理影像的空间参考一致,该tif文件的命名将使用对应文件夹的名称,并设置相应的空间参考信息。

23、进一步的,步骤5所述的任务监控中,开启任务进度监控,定时访问节点信息请求接口,实时获取每个ec2节点的进度信息并进行展示,步骤如下:

24、步骤5.1发送和处理请求:将project_id作为参数,发送post请求,主节点在接收到请求后,首先根据project_id,进行任务关联,获取当前完成数量;其次访问每个ec2节点的日志信息文件,每个节点的日志信息文件存储在主节点logs文件夹中,读取每个节点日志信息,获取当前该节点正在处理的影像信息,处理进度,gpu和cpu利用率、显卡信息,将信息进行封装,以json形式返回。

25、步骤5.2信息展示:客户端根据返回的信息数据,进行解码,在前端对应窗口中进行展示,以便用户随时了解解译任务的完成情况和节点的运行状态。

26、进一步的,步骤6的任务异常处理中,如果发生任务异常结束的情况,worker进程会捕获任何意外的异常,并将任务重新发布到redis的任务队列中,以便后续重新执行。本发明设置了指定的等待时间wait_time,以及最大重试次数,在任务的执行过程中,如果发生异常,任务会自动进行重试,直到达到最大重试次数,提高任务的可靠性和成功率。

27、进一步的,步骤7所述的解译结果生成与浏览中,当展示页面显示任务全部结束后,将裁剪后影像的解译结果合并为一个tif文件,并转为矢量图层,根据解译要求对矢量图层进行优化调整,步骤如下:

28、步骤7.1合并栅格:首先基于gdal.open函数,获取影像高度、宽度、波段数、地理范围等信息,包合并输出路径下现有tif文件,其次根据tif文件名称,判断其所在行列,寻找相应的坐标范围信息,基于driver.create函数,创建横线范围和纵向范围大小的tif模板文件,进行横向合并,基于同样的方法在进行纵向合并,若重叠范围内,若一副影像存在非0值,另一幅在对应地区为0值,则取非0值,避免由于合并造成了漏检现象。将横向和纵向合并结果进行合并得到最终整副遥感影像解译结果tif文件命名为result.tif。

29、步骤7.2栅格转面:基于arcpy中rastertopolygon_conversion工具,将result.tif进行栅格转面操作,得到检测结果矢量图层shp文件。

30、步骤7.3面图层后处理:基于步骤7.2得出的shp文件,获取其空间参考是投影坐标系或地理坐标系,若为地理坐标系,则使用通过投影转换工具project_management将其转换为投影坐标系;使用calculatefield_management添加面积字段area,计算每个面图斑的面积值,根据计算的面积值,运用选择工具selectlayerbyattribute_management筛选出大于碎斑阈值fragment的图斑,使用makefeaturelayer_management工具创建临时图层,对该临时图层使用eliminatepolygonpart_management消除空洞,ca.smoothpolygon进行边界平滑,使用ca.simplifybuilding进行规则化操作,得到最终后处理后的shp文件,即该文件则为最终遥感解译结果。

31、有益效果:与现有技术相比,本发明具有以下优点:

32、本发明为应对在分布式和集群化的应用开发中,涉及到大规模数据处理和任务调度的问题时,开发人员借助于一些常用的技术和工具,如redis、celery和mysql等,出现了基于并行计算、分布式处理和其他先进技术的解决方案。利用并行计算的能力,将遥感数据的处理任务分配到多个计算节点上进行并行计算,从而提高解译效率。具备以下优点:①利用ebs作为存储介质,可以方便地扩展存储容量,对大规模数据集进行高效处理和解译,提高解译效率;②该框架采用多节点并行计算,可以将任务分割成多个子任务并同时处理,提高处理速度和处理能力,减少等待时间;③采用集群式架构,节点间可以相互备份和冗余,提高了系统的容错性,故障节点可以自动恢复,提高了系统的可靠性;④ebs作为存储介质,可以根据需要动态调整存储容量,保证存储空间的灵活使用,通过增加节点数量,提升解译系统的性能和处理容量。⑤不同用户可以同时访问和处理遥感影像数据,促进团队合作和信息共享。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1