定制采伐机数据处理系统设计与实现
2021-04-24郭冰峰李雯静陕晨曦陈文静
张 航 郭冰峰 李雯静 李 昀 陕晨曦 陈文静
(1、北京林业大学信息学院,北京100083 2、国家林业草原林业智能信息处理工程技术研究中心,北京100083)
带有电脑控制的集成化定制采伐机是目前国际上主流的采伐作业机械,广泛应用于欧洲、美国以及日本等国家,以其高性能的特点被认为是未来森林采伐设备的发展趋势[1-2]。在采伐过程中,定制采伐机将订单使用机载的电脑控制系统输入,同时在切割木材产品时,依据订单规格进行,在这个过程中,会收获大量数据,所记录的数据项因采伐机类型、型号差异等也不尽相同[3]。随着采伐机的广泛应用,在采伐作业过程中日积月累产生了前所未有的采伐大数据。其数据量之大,以及详细程度是传统经营管理调查和遥感调查手段都无法企及的,具有很高的潜在利用价值,不仅可用于产品产量汇总,生产效率分析,还可用于分析林分优势木、提取特定地理区域的森林数据、驱动林业决策支持系统、据预测林分特征造材模拟、林分生物量计算等[4-9]。
目前国际使用的定制采伐机记录和传递数据的标准是以瑞典为主的北欧国家制定的森林数据存储和通信标准StanForD以及其升级版本StanForD2010[10]。其中,早期的设备采用的是StanForD 标准记录数据,近年来新生成的机器采用的是StanForD2010 标准记录数据。而采伐作业因雇用的设备不同,可能存在数据格式的异构。
由于前述提到的采伐机数据项的差异,以及采伐机操作的专业性要求,因此每一台设备以及每个操作员在作业过程中存在不确定性,例如由于仪器校准缺乏,操作员的技术水平、环境条件的变化和操作季节、树主干的外部形状等问题,导致了数据的误差和噪声[11],所以要开发利用不同来源的采伐机大数据,就要先对数据进行一系列诸如数据清洗、缺失数据填充等处理。因为采伐机是以收获木材和按定制规格造材为主的专业设备,所以其记录的数据不包括树高,早期的设备也不记录胸径等传统森林模型的基础变量,因此,前期有研究提出了补齐这部分缺失数据的方法和模型[12-13]。
近年来北京林业大学国家林业草原林业智能信息处理工程技术研究中心利用引智项目和澳大利亚合作研究定制采伐机大数据开发利用,设计实现的定制采伐机数据处理系统就是为这一项目的研究数据管理与处理服务的。在前期研究的基础上,利用前期研究[12-14],将原始或汇总数据文件导入、数据清洗、干形数据集生成及提取、模拟切割、采伐林分三维可视化重建等功能集成在一起,为相关后续研究提供了高效数据预处理的工具,也为其它定制采伐机数据处理提供可参考的应用实例。
1 系统目标
1.1 系统总体目标
定制采伐机数据处理系统的总体目标是实现一个为研究定制采伐机数据的科研人员提供定制采伐机数据导入、数据格式转换、数据描述统计、数据清洗、利用相应模型填补缺失数据项、生成可用于研究的干形数据集、模拟切割以及数据可视化等功能的快速数据处理系统,以满足相关研究工作对数据清洗和研究中间环节数据生成以及实验环节验证等的实际需要,减少重复性交互操作,提高工作效率。
1.2 系统用户
本系统的目标用户为科研人员与系统管理员两类。前者即普通用户,系统中的业务功能即为这类用户使用。业务功能包括数据的导入及清洗功能、生成干形数据的功能、模拟切割功能、数据文件查询及下载功能、对数据文件的权限进行管理的功能等。后者是负责系统管理与维护的用户,具有较高的整体权限,主要负责管理系统中的各类数据,并且对系统中处理过或处理中的任务进行实时监控。
1.3 系统功能和性能需求
1.3.1 系统主要功能
根据对定制采伐机数据研究人员的需求调研,定制采伐机数据处理系统的主要功能包括实现定制采伐机作业数据的上传以及现有格式转换、数据查询及分析、数据预处理、干形数据的生成、模拟切割、数据下载等。
当数据上传完成后,用户在解析上传的数据文件时,可以直接在线上完成,数据的清洗规则的相关参数设置完成后,后续研究中可用的数据集即可生成。
因为数据来源不在本地,客户数据希望可以从网上传入系统,客户提供的数据可能是汇总的作业数据,也可能是单台机器的作业数据原始文件,因此,文件导入功能需支持多种文件格式以及支持在线上传及解析。
1.3.2 系统性能要求
因为研究人员需要使用的采伐机数据会涉及数百万条记录,在清洗数据过程中要遍历十几条规则,处理响应时间要在可接受范围内尽量缩短,且考虑同一时间可能有多个任务同时进行,因此系统设计要考虑保证多线程多任务并行处理的需求,并给用户提供相应提示信息。
2 系统架构及系统设计
2.1 系统架构
采伐机数据处理系统采用三层软件体系结构,即如图1 所示,分为表示层、业务层和数据层。
数据层:数据层由数据库及文件服务器组成,其中数据库用来存储采伐机文件中的概要信息,文件服务器存储采伐机文件中的数据文件。数据库的功能主要有两个方面,其一是采伐机数据的提供,其二是提供数据的存储以及访问服务,使获得处理系统任务及用户的相关信息更便捷。上传到系统中生成的数据文件主要在文件服务器进行存储。数据层主要解决数据库连接的问题,数据访问及对数据库的操作均在数据层实现,逻辑层在操作完成后接收返回的操作结果。
业务逻辑层:主要有两个部分由业务逻辑层负责,其一是对来自显示层的请求进行接收,其二是对数据层数据的调用。主要通过服务器来实现业务逻辑层的功能。来自表示层的请求由Django 框架提供的一个接口来接收,业务层的每个功能由多个接口实现。请求被接收后,与其相对应的视图被接口调用。分析业务请求由视图控件完成,读取数据文件的信息以及用户信息由数据层通过框架自身的对象关系映射来完成。业务处理完成后,处理的结果被填入首页,反馈则通过浏览器返回给用户。
图1 软件体系
表示层:主要有两个功能由表示层负责,其一是用户与应用程序之间的交互,其二是实现系统中数据的输入、输出功能。表示层包含两部分内容,分别是客户端的浏览器,以及用户接口。在浏览器上,表示层以页面的形式显示。通过使用按钮,用户可以对浏览器进行调用。同时,根据网址上的要求,浏览器会通过发起HTTP 请求来访问指定的服务器界面。服务器会通过调用view控件,根据不同的数据请求来进行处理,最后返回结果。
通过页面与数据、数据与程序的分离,可以确保系统数据的安全性。为了达到了“高内聚、低耦合”的目标,对系统进行了分层。在表示层及业务层之中,用户界面与业务逻辑能够进行一一对应,有效降低了模块间的影响,使系统的性能被提高。三层软件体系结构具有高安全性、高效率等优点。合理的体系结构使得定制采伐机数据处理系统的维护和升级变得更加容易。
2.2 系统主要功能模块
2.2.1 数据处理模块
定制采伐机数据处理系统目标是实现采伐机不同格式数据上传、数据清洗、分析、查询、干形数据生成、模拟切割、数据下载等功能。用户上传采伐机数据后,可以线上解析采伐机数据文件,设置清洗规则参数,生成可用数据集,并进行进一步的分析。对采伐机数据进行科学管理和最大程度的共享利用。该模块具体模块内容将在第四章进行介绍。
2.2.2 后台管理模块
定制采伐机数据处理系统的后台主要功能为两部分,分别为管理用户信息及任务信息的查询。后台管理系统的界面如图2 所示。监控用户最近操作可以通过最近动作来进行,分类的表格则用于监控各个应用的数据信息。
图2 后台界面
在任务信息页面中,可以看到定制采伐机数据处理系统中执行过的任务,并且任务可以通过时间、条件、任务状态等信息来进行检索。数据表格展示了任务编号及名称、任务完成时间与状态等信息。在任务信息表条目页面可以查看任务基本信息、参数与结果等详细信息。
2.3 数据存储及数据库
定制采伐机数据处理系统采用MySQL 存储结果数据,Redis 存储运行数据。数据库存储的主要实体是用户、文件、元数据、任务信息四项,各个实体之间存在联系。通过Django 框架的对象关系映射会自动生成对应的表格。
本系统主要针对数据库的一致性、规范性以及完整性进行设计,通过这一设计来保证数据库的安全性。为保证数据格式足够准确,在数据录入时应用规范化设计。在格式的长度之内进行数据输入,输入数据的格式为UTF-8。为了保证数据库中没有重复的字段,使用了一致性设计。数据库的完整性主要包括参照完整性、自定义完整性以及值域完整性。
3 系统主要功能实现及关键技术
3.1 数据导入及数据描述校正
由于研究使用的采伐机数据主要来自数据提供方提供的采伐机作业原始数据文件以及林业公司汇总的各个采伐机的作业数据,因此系统提供了原始数据文件导入以及数据库导出数据的导入。其中原始数据文件主要包含pri 和hpr 两种文件格式,林业公司提供的采伐机数据汇总文件通常是csv 格式。因此定制采伐机数据处理系统提供数据导入功能支持pri、hpr、csv三种格式。
3.1.1 数据导入
Pri 文件是StanForD 标准定义的以文本形式进行存储的数据文件。本文利用文件流对文件进行读取字节流,对一些符号进行基本的替换处理。并将pri 文件中的木材段信息和树干信息是分开存储的,各自利用List 存储;在全部信息解析完毕后,对数据进行整合,木材段信息和树干信息通过树干编号进行对应,整合时将树干信息添加到木材段信息中。
从StanForD2010 标准开始,采用HPR 文件来存储采伐造材中的数据文件。hpr 文件以标准XML 的格式进行存储。在用XML 记录采伐相关数据时,pri 文件中每个数字表示的变量被转换成XML 中的元素。在XML 中,元素名是变量名,省略了从变量代码到变量名的映射,提高了文件本身的可读性。数据文件以XML 的形式组织,所有变量都是XML 文件中的一个元素。元素的某些描述(如单位)以属性的形式存在。在hpr 文件中,stem 信息都记录在元素
在系统中上传的csv 格式文件,则会通过Ajax 的方式传递至服务器,上传完成后,会有上传成功的提示。上传文件前,浏览器会验证文件名称。
3.1.2 数据描述校正
由于采伐机数据来自不同的厂商,而不同的操作员录入方式不同等原因,采伐机数据存在不一致的情况。为了规范上述因素导致的简写问题和录入错误,采伐机数据处理系统需要引入数据描述校正功能。
当数据输入完成后,可对数据的产品描述进行校正。校正功能中的数据表格有3 列,分别是产品的描述、产品的占比以及校正条目。在数据表格中,主要展示的是采伐数据文件产品描述列中,每种产品占全部产品的比例和校正条目。产品描述字典在校正条目中的下拉菜单中,可以直接对需要校正的产品描述字段进行选择。
3.2 数据清洗
本系统使用的采伐机数据集中,产品描述字段由安装在采伐机上的控制系统检测后录入,主要包括机器编号、树的编号、原木的编号、GPS 经纬度、胸径、日志编号、产品编号、产品描述、日志代码等内容。由于在数据中,存在着由错误的拼写、字母大小写、单词简写、数据缺失等造成错误的情况,木段编号字段存在数据缺失的情况,采伐机数据存在重复记录的情况,因此设计了系统中的数据清洗模块。以上情形均属于噪声数据,需要通过特定的清洗规则来进行标记。此外,在清洗规则中,还需结合实验需要以及林业行业中的常识来设置一些筛选规则。
3.2.1 数据清洗规则
系统中共使用了19 条清洗规则,其中主要包括标记材长比小于0.01 或材长比大于1 的树、标记一个树干超过一半木段不是规格材的树、标记全部木段长度小于0.5m 的树、标记木段编号不连续或不从1 开始的树等。
其中,针对噪声数据中由简写导致的部分,可以利用简写与全拼的对照表,在计算简写与全拼的相似度时采用Jaro-Winkler 方法[15]。这种方法增加了对文本顺序估算的权重,从而避免产生字母顺序颠倒的问题。
其中,P 为范式常值,L 为字符串长度。
3.2.2 采用并行处理策略实现数据清洗
采伐机数据的数据量较大,如果按照单线程的循环方式,处理效率低、耗时长。因此,在定制采伐机数据处理系统中,为了使处理效率低、耗时长的问题得到解决,由单线程循环方式变为多进程的方式。为了达到对系统资源的最大限度利用,将预处理任务的时间缩短,调用在Python 内置的多线程软件包,从而对用户体验进行优化。本研究为了提高程序的运行效率,选出的加速方案有Joblib 以及Multiprocessing。同时调用Joblib和Pandas,用并行运算代替原有的串行代码。所有任务分发并行运算是通过Multiprocessing 通过建立进程池实现的[16]。
当大量采伐机数据处理任务同时进行时,会造成服务器崩溃的情况;同时可能产生用时较长、资源占用比例大的情况。在系统中,通过Celery 用异步任务取代了并发任务,多任务管理的问题得到了有效的解决。为了完善任务管理框架,使用工具Celery 来调度异步任务。其中,将结果数据存储到MySQL,将运行数据存储在Redis,有很多进程来处理任务。当任务请求被服务器获取后,Redis 里就存储了任务信息。Redis 可以快速存储任务运行过程中的数据内容。根据任务队列,Celery 对进程执行任务进行实例化。进程执行的任务均需要提前进行编写。
定制采伐机数据处理系统采用了多处理技术,通过此技术可以使任务的执行效率得到有效的提升。但是,Joblib 与Celery冲突,Joblib 加速不能在Celery 中管理的任务中使用。在系统中,采用Multiprocessing 作为解决方案,使采伐机数据处理加速。任务成功后,在MySQL 数据库中对结果进行存储。异步任务、定时任务等解决方案都可以由Celery 进行提供。通过对Celery 控件的使用,在定制采伐机数据处理系统中,任务调度可以进行合理的安排。同时,对任务请求进行并行处理,为系统的任务管理提供了一种解决方案。
3.3 干形数据生成
干形是树干形状的简称,而干形数据集是用于使用削度方程来估测树木干形的数据集,主要包含树木编号、全树高、带皮直径、胸径等字段。目前的干形数据集获取主要依赖于人工测量,利用采伐机数据生成干形数据可以极大地方便干形数据的获取。
通过采伐机数据生成干形数据需要补全两部分内容,其一是观测点的位置,其二是该位置的带皮直径数据。通过全树高来确定观测点的位置。输入采伐机数据的小头直径,使用三次埃尔米特插值公式,最终得到观测点的带皮直径。通过对干形数据的特征进行分析,确定干形数据生成时需要的输入以及输出。采伐点较多,同时材长比较高的采伐记录为干形数据目标输入。为了使生成的干形数据都是优质数据,选择材长比较高的记录。为了保证有足够的数据进行插值,来拟合出精确度较高结果,选择采伐点数量较多的记录。系统通过Pandas 遍历采伐机数据中每条数据记录,向生成干形数据的流程中输入数据。带皮直径的插值通过scipy 提供的PchipInterpolator 完成,将观测点处的高度输入后,即可得到带皮直径。最终,通过Pandas输出结果数据文件。
3.4 模拟切割
模拟切割是指匹配已有采伐数据,模拟出材率最高的切割方式。模拟切割技术,可以对造材进行优化,产生新的采伐机数据。在本系统中,模拟切割通过处理干形数据生成采伐机数据,使用其中的带皮胸径、材长与最后一段小头直径匹配采伐机记录。在模拟切割后,能够利用切割点的位置,采用三次埃尔米特插值的方法得出对应位置的小头直径。最终,通过Pandas 输出结果数据文件。
模拟切割只提供选择切割干形数据集的功能,其效果与使用的数据集质量有直接关系。切割数据集效果越好,模拟切割效果越好。
3.5 数据可视化
3.5.1 统计分析可视化
系统实现了采伐机数据的描述统计以及统计可视化功能。针对双变量如地理坐标、小头直径跟长度的关系等可绘制散点图。针对数值型单变量,如木段编号、小头直径、长度、体积提供绘制柱状图和直方图功能,如图3 展示了某个作业区域切割木段数的统计结果的直方图,其横坐标是切割木段数,纵坐标是频数,从图3 可以看出,这一区域中多数树干都切割成了1 段到5 段木段(含废材),其中切割成4 段的情况最多见。
图3 切割木段数量统计
3.5.2 树干三维可视化重建
根据StanForD 标准,原始数据记录了采伐木的坐标值,本系统利用从采伐机数据中提取出来的干形数据,构建了将树干从平面数据立起来形成的3D 可视化模型,同时使用Felipe Crecente-Campo 等人构建的辐射松树冠模型将整棵树补全[17],让用户可以更加直观形象地查看采伐林分的树木情况,帮助其对数据有更进一步的了解。
本文采用Unity3D 的C#脚本程序编写实现了上述功能。同时,利用光栅化引擎WebGL 使渲染出的3D 图形在系统中进行呈现,呈现效果如图4 所示。
图4 树木三维可视化重建
4 结论
本文针对采伐机数据应用与研究现状的实际需求,分析明确系统业务流程,选择与数据处理、异步任务管理相关的技术框架设计实现了定制采伐机数据处理系统。本系统实现了采伐机数据上传、预处理、干形数据生成、模拟切割、可视化等主要功能。根据性能需求选择异步处理框架解决并发任务管理问题,极大地方便了用户处理采伐机数据,提高了用户体验。后续也可以在该系统的基础上进一步完善系统功能,如增加树木生物量计算、出材率计算等。该系统为相关研究提供了有效的工具,也可为类似系统开发提供参考。