張 航 郭冰峰 李雯靜 李 昀 陜晨曦 陳文靜
(1、北京林業(yè)大學信息學院,北京100083 2、國家林業(yè)草原林業(yè)智能信息處理工程技術研究中心,北京100083)
帶有電腦控制的集成化定制采伐機是目前國際上主流的采伐作業(yè)機械,廣泛應用于歐洲、美國以及日本等國家,以其高性能的特點被認為是未來森林采伐設備的發(fā)展趨勢[1-2]。在采伐過程中,定制采伐機將訂單使用機載的電腦控制系統(tǒng)輸入,同時在切割木材產(chǎn)品時,依據(jù)訂單規(guī)格進行,在這個過程中,會收獲大量數(shù)據(jù),所記錄的數(shù)據(jù)項因采伐機類型、型號差異等也不盡相同[3]。隨著采伐機的廣泛應用,在采伐作業(yè)過程中日積月累產(chǎn)生了前所未有的采伐大數(shù)據(jù)。其數(shù)據(jù)量之大,以及詳細程度是傳統(tǒng)經(jīng)營管理調(diào)查和遙感調(diào)查手段都無法企及的,具有很高的潛在利用價值,不僅可用于產(chǎn)品產(chǎn)量匯總,生產(chǎn)效率分析,還可用于分析林分優(yōu)勢木、提取特定地理區(qū)域的森林數(shù)據(jù)、驅(qū)動林業(yè)決策支持系統(tǒng)、據(jù)預測林分特征造材模擬、林分生物量計算等[4-9]。
目前國際使用的定制采伐機記錄和傳遞數(shù)據(jù)的標準是以瑞典為主的北歐國家制定的森林數(shù)據(jù)存儲和通信標準StanForD以及其升級版本StanForD2010[10]。其中,早期的設備采用的是StanForD 標準記錄數(shù)據(jù),近年來新生成的機器采用的是StanForD2010 標準記錄數(shù)據(jù)。而采伐作業(yè)因雇用的設備不同,可能存在數(shù)據(jù)格式的異構。
由于前述提到的采伐機數(shù)據(jù)項的差異,以及采伐機操作的專業(yè)性要求,因此每一臺設備以及每個操作員在作業(yè)過程中存在不確定性,例如由于儀器校準缺乏,操作員的技術水平、環(huán)境條件的變化和操作季節(jié)、樹主干的外部形狀等問題,導致了數(shù)據(jù)的誤差和噪聲[11],所以要開發(fā)利用不同來源的采伐機大數(shù)據(jù),就要先對數(shù)據(jù)進行一系列諸如數(shù)據(jù)清洗、缺失數(shù)據(jù)填充等處理。因為采伐機是以收獲木材和按定制規(guī)格造材為主的專業(yè)設備,所以其記錄的數(shù)據(jù)不包括樹高,早期的設備也不記錄胸徑等傳統(tǒng)森林模型的基礎變量,因此,前期有研究提出了補齊這部分缺失數(shù)據(jù)的方法和模型[12-13]。
近年來北京林業(yè)大學國家林業(yè)草原林業(yè)智能信息處理工程技術研究中心利用引智項目和澳大利亞合作研究定制采伐機大數(shù)據(jù)開發(fā)利用,設計實現(xiàn)的定制采伐機數(shù)據(jù)處理系統(tǒng)就是為這一項目的研究數(shù)據(jù)管理與處理服務的。在前期研究的基礎上,利用前期研究[12-14],將原始或匯總數(shù)據(jù)文件導入、數(shù)據(jù)清洗、干形數(shù)據(jù)集生成及提取、模擬切割、采伐林分三維可視化重建等功能集成在一起,為相關后續(xù)研究提供了高效數(shù)據(jù)預處理的工具,也為其它定制采伐機數(shù)據(jù)處理提供可參考的應用實例。
定制采伐機數(shù)據(jù)處理系統(tǒng)的總體目標是實現(xiàn)一個為研究定制采伐機數(shù)據(jù)的科研人員提供定制采伐機數(shù)據(jù)導入、數(shù)據(jù)格式轉換、數(shù)據(jù)描述統(tǒng)計、數(shù)據(jù)清洗、利用相應模型填補缺失數(shù)據(jù)項、生成可用于研究的干形數(shù)據(jù)集、模擬切割以及數(shù)據(jù)可視化等功能的快速數(shù)據(jù)處理系統(tǒng),以滿足相關研究工作對數(shù)據(jù)清洗和研究中間環(huán)節(jié)數(shù)據(jù)生成以及實驗環(huán)節(jié)驗證等的實際需要,減少重復性交互操作,提高工作效率。
本系統(tǒng)的目標用戶為科研人員與系統(tǒng)管理員兩類。前者即普通用戶,系統(tǒng)中的業(yè)務功能即為這類用戶使用。業(yè)務功能包括數(shù)據(jù)的導入及清洗功能、生成干形數(shù)據(jù)的功能、模擬切割功能、數(shù)據(jù)文件查詢及下載功能、對數(shù)據(jù)文件的權限進行管理的功能等。后者是負責系統(tǒng)管理與維護的用戶,具有較高的整體權限,主要負責管理系統(tǒng)中的各類數(shù)據(jù),并且對系統(tǒng)中處理過或處理中的任務進行實時監(jiān)控。
1.3.1 系統(tǒng)主要功能
根據(jù)對定制采伐機數(shù)據(jù)研究人員的需求調(diào)研,定制采伐機數(shù)據(jù)處理系統(tǒng)的主要功能包括實現(xiàn)定制采伐機作業(yè)數(shù)據(jù)的上傳以及現(xiàn)有格式轉換、數(shù)據(jù)查詢及分析、數(shù)據(jù)預處理、干形數(shù)據(jù)的生成、模擬切割、數(shù)據(jù)下載等。
當數(shù)據(jù)上傳完成后,用戶在解析上傳的數(shù)據(jù)文件時,可以直接在線上完成,數(shù)據(jù)的清洗規(guī)則的相關參數(shù)設置完成后,后續(xù)研究中可用的數(shù)據(jù)集即可生成。
因為數(shù)據(jù)來源不在本地,客戶數(shù)據(jù)希望可以從網(wǎng)上傳入系統(tǒng),客戶提供的數(shù)據(jù)可能是匯總的作業(yè)數(shù)據(jù),也可能是單臺機器的作業(yè)數(shù)據(jù)原始文件,因此,文件導入功能需支持多種文件格式以及支持在線上傳及解析。
1.3.2 系統(tǒng)性能要求
因為研究人員需要使用的采伐機數(shù)據(jù)會涉及數(shù)百萬條記錄,在清洗數(shù)據(jù)過程中要遍歷十幾條規(guī)則,處理響應時間要在可接受范圍內(nèi)盡量縮短,且考慮同一時間可能有多個任務同時進行,因此系統(tǒng)設計要考慮保證多線程多任務并行處理的需求,并給用戶提供相應提示信息。
采伐機數(shù)據(jù)處理系統(tǒng)采用三層軟件體系結構,即如圖1 所示,分為表示層、業(yè)務層和數(shù)據(jù)層。
數(shù)據(jù)層:數(shù)據(jù)層由數(shù)據(jù)庫及文件服務器組成,其中數(shù)據(jù)庫用來存儲采伐機文件中的概要信息,文件服務器存儲采伐機文件中的數(shù)據(jù)文件。數(shù)據(jù)庫的功能主要有兩個方面,其一是采伐機數(shù)據(jù)的提供,其二是提供數(shù)據(jù)的存儲以及訪問服務,使獲得處理系統(tǒng)任務及用戶的相關信息更便捷。上傳到系統(tǒng)中生成的數(shù)據(jù)文件主要在文件服務器進行存儲。數(shù)據(jù)層主要解決數(shù)據(jù)庫連接的問題,數(shù)據(jù)訪問及對數(shù)據(jù)庫的操作均在數(shù)據(jù)層實現(xiàn),邏輯層在操作完成后接收返回的操作結果。
業(yè)務邏輯層:主要有兩個部分由業(yè)務邏輯層負責,其一是對來自顯示層的請求進行接收,其二是對數(shù)據(jù)層數(shù)據(jù)的調(diào)用。主要通過服務器來實現(xiàn)業(yè)務邏輯層的功能。來自表示層的請求由Django 框架提供的一個接口來接收,業(yè)務層的每個功能由多個接口實現(xiàn)。請求被接收后,與其相對應的視圖被接口調(diào)用。分析業(yè)務請求由視圖控件完成,讀取數(shù)據(jù)文件的信息以及用戶信息由數(shù)據(jù)層通過框架自身的對象關系映射來完成。業(yè)務處理完成后,處理的結果被填入首頁,反饋則通過瀏覽器返回給用戶。
圖1 軟件體系
表示層:主要有兩個功能由表示層負責,其一是用戶與應用程序之間的交互,其二是實現(xiàn)系統(tǒng)中數(shù)據(jù)的輸入、輸出功能。表示層包含兩部分內(nèi)容,分別是客戶端的瀏覽器,以及用戶接口。在瀏覽器上,表示層以頁面的形式顯示。通過使用按鈕,用戶可以對瀏覽器進行調(diào)用。同時,根據(jù)網(wǎng)址上的要求,瀏覽器會通過發(fā)起HTTP 請求來訪問指定的服務器界面。服務器會通過調(diào)用view控件,根據(jù)不同的數(shù)據(jù)請求來進行處理,最后返回結果。
通過頁面與數(shù)據(jù)、數(shù)據(jù)與程序的分離,可以確保系統(tǒng)數(shù)據(jù)的安全性。為了達到了“高內(nèi)聚、低耦合”的目標,對系統(tǒng)進行了分層。在表示層及業(yè)務層之中,用戶界面與業(yè)務邏輯能夠進行一一對應,有效降低了模塊間的影響,使系統(tǒng)的性能被提高。三層軟件體系結構具有高安全性、高效率等優(yōu)點。合理的體系結構使得定制采伐機數(shù)據(jù)處理系統(tǒng)的維護和升級變得更加容易。
2.2.1 數(shù)據(jù)處理模塊
定制采伐機數(shù)據(jù)處理系統(tǒng)目標是實現(xiàn)采伐機不同格式數(shù)據(jù)上傳、數(shù)據(jù)清洗、分析、查詢、干形數(shù)據(jù)生成、模擬切割、數(shù)據(jù)下載等功能。用戶上傳采伐機數(shù)據(jù)后,可以線上解析采伐機數(shù)據(jù)文件,設置清洗規(guī)則參數(shù),生成可用數(shù)據(jù)集,并進行進一步的分析。對采伐機數(shù)據(jù)進行科學管理和最大程度的共享利用。該模塊具體模塊內(nèi)容將在第四章進行介紹。
2.2.2 后臺管理模塊
定制采伐機數(shù)據(jù)處理系統(tǒng)的后臺主要功能為兩部分,分別為管理用戶信息及任務信息的查詢。后臺管理系統(tǒng)的界面如圖2 所示。監(jiān)控用戶最近操作可以通過最近動作來進行,分類的表格則用于監(jiān)控各個應用的數(shù)據(jù)信息。
圖2 后臺界面
在任務信息頁面中,可以看到定制采伐機數(shù)據(jù)處理系統(tǒng)中執(zhí)行過的任務,并且任務可以通過時間、條件、任務狀態(tài)等信息來進行檢索。數(shù)據(jù)表格展示了任務編號及名稱、任務完成時間與狀態(tài)等信息。在任務信息表條目頁面可以查看任務基本信息、參數(shù)與結果等詳細信息。
定制采伐機數(shù)據(jù)處理系統(tǒng)采用MySQL 存儲結果數(shù)據(jù),Redis 存儲運行數(shù)據(jù)。數(shù)據(jù)庫存儲的主要實體是用戶、文件、元數(shù)據(jù)、任務信息四項,各個實體之間存在聯(lián)系。通過Django 框架的對象關系映射會自動生成對應的表格。
本系統(tǒng)主要針對數(shù)據(jù)庫的一致性、規(guī)范性以及完整性進行設計,通過這一設計來保證數(shù)據(jù)庫的安全性。為保證數(shù)據(jù)格式足夠準確,在數(shù)據(jù)錄入時應用規(guī)范化設計。在格式的長度之內(nèi)進行數(shù)據(jù)輸入,輸入數(shù)據(jù)的格式為UTF-8。為了保證數(shù)據(jù)庫中沒有重復的字段,使用了一致性設計。數(shù)據(jù)庫的完整性主要包括參照完整性、自定義完整性以及值域完整性。
由于研究使用的采伐機數(shù)據(jù)主要來自數(shù)據(jù)提供方提供的采伐機作業(yè)原始數(shù)據(jù)文件以及林業(yè)公司匯總的各個采伐機的作業(yè)數(shù)據(jù),因此系統(tǒng)提供了原始數(shù)據(jù)文件導入以及數(shù)據(jù)庫導出數(shù)據(jù)的導入。其中原始數(shù)據(jù)文件主要包含pri 和hpr 兩種文件格式,林業(yè)公司提供的采伐機數(shù)據(jù)匯總文件通常是csv 格式。因此定制采伐機數(shù)據(jù)處理系統(tǒng)提供數(shù)據(jù)導入功能支持pri、hpr、csv三種格式。
3.1.1 數(shù)據(jù)導入
Pri 文件是StanForD 標準定義的以文本形式進行存儲的數(shù)據(jù)文件。本文利用文件流對文件進行讀取字節(jié)流,對一些符號進行基本的替換處理。并將pri 文件中的木材段信息和樹干信息是分開存儲的,各自利用List 存儲;在全部信息解析完畢后,對數(shù)據(jù)進行整合,木材段信息和樹干信息通過樹干編號進行對應,整合時將樹干信息添加到木材段信息中。
從StanForD2010 標準開始,采用HPR 文件來存儲采伐造材中的數(shù)據(jù)文件。hpr 文件以標準XML 的格式進行存儲。在用XML 記錄采伐相關數(shù)據(jù)時,pri 文件中每個數(shù)字表示的變量被轉換成XML 中的元素。在XML 中,元素名是變量名,省略了從變量代碼到變量名的映射,提高了文件本身的可讀性。數(shù)據(jù)文件以XML 的形式組織,所有變量都是XML 文件中的一個元素。元素的某些描述(如單位)以屬性的形式存在。在hpr 文件中,stem 信息都記錄在元素
在系統(tǒng)中上傳的csv 格式文件,則會通過Ajax 的方式傳遞至服務器,上傳完成后,會有上傳成功的提示。上傳文件前,瀏覽器會驗證文件名稱。
3.1.2 數(shù)據(jù)描述校正
由于采伐機數(shù)據(jù)來自不同的廠商,而不同的操作員錄入方式不同等原因,采伐機數(shù)據(jù)存在不一致的情況。為了規(guī)范上述因素導致的簡寫問題和錄入錯誤,采伐機數(shù)據(jù)處理系統(tǒng)需要引入數(shù)據(jù)描述校正功能。
當數(shù)據(jù)輸入完成后,可對數(shù)據(jù)的產(chǎn)品描述進行校正。校正功能中的數(shù)據(jù)表格有3 列,分別是產(chǎn)品的描述、產(chǎn)品的占比以及校正條目。在數(shù)據(jù)表格中,主要展示的是采伐數(shù)據(jù)文件產(chǎn)品描述列中,每種產(chǎn)品占全部產(chǎn)品的比例和校正條目。產(chǎn)品描述字典在校正條目中的下拉菜單中,可以直接對需要校正的產(chǎn)品描述字段進行選擇。
本系統(tǒng)使用的采伐機數(shù)據(jù)集中,產(chǎn)品描述字段由安裝在采伐機上的控制系統(tǒng)檢測后錄入,主要包括機器編號、樹的編號、原木的編號、GPS 經(jīng)緯度、胸徑、日志編號、產(chǎn)品編號、產(chǎn)品描述、日志代碼等內(nèi)容。由于在數(shù)據(jù)中,存在著由錯誤的拼寫、字母大小寫、單詞簡寫、數(shù)據(jù)缺失等造成錯誤的情況,木段編號字段存在數(shù)據(jù)缺失的情況,采伐機數(shù)據(jù)存在重復記錄的情況,因此設計了系統(tǒng)中的數(shù)據(jù)清洗模塊。以上情形均屬于噪聲數(shù)據(jù),需要通過特定的清洗規(guī)則來進行標記。此外,在清洗規(guī)則中,還需結合實驗需要以及林業(yè)行業(yè)中的常識來設置一些篩選規(guī)則。
3.2.1 數(shù)據(jù)清洗規(guī)則
系統(tǒng)中共使用了19 條清洗規(guī)則,其中主要包括標記材長比小于0.01 或材長比大于1 的樹、標記一個樹干超過一半木段不是規(guī)格材的樹、標記全部木段長度小于0.5m 的樹、標記木段編號不連續(xù)或不從1 開始的樹等。
其中,針對噪聲數(shù)據(jù)中由簡寫導致的部分,可以利用簡寫與全拼的對照表,在計算簡寫與全拼的相似度時采用Jaro-Winkler 方法[15]。這種方法增加了對文本順序估算的權重,從而避免產(chǎn)生字母順序顛倒的問題。
其中,P 為范式常值,L 為字符串長度。
3.2.2 采用并行處理策略實現(xiàn)數(shù)據(jù)清洗
采伐機數(shù)據(jù)的數(shù)據(jù)量較大,如果按照單線程的循環(huán)方式,處理效率低、耗時長。因此,在定制采伐機數(shù)據(jù)處理系統(tǒng)中,為了使處理效率低、耗時長的問題得到解決,由單線程循環(huán)方式變?yōu)槎噙M程的方式。為了達到對系統(tǒng)資源的最大限度利用,將預處理任務的時間縮短,調(diào)用在Python 內(nèi)置的多線程軟件包,從而對用戶體驗進行優(yōu)化。本研究為了提高程序的運行效率,選出的加速方案有Joblib 以及Multiprocessing。同時調(diào)用Joblib和Pandas,用并行運算代替原有的串行代碼。所有任務分發(fā)并行運算是通過Multiprocessing 通過建立進程池實現(xiàn)的[16]。
當大量采伐機數(shù)據(jù)處理任務同時進行時,會造成服務器崩潰的情況;同時可能產(chǎn)生用時較長、資源占用比例大的情況。在系統(tǒng)中,通過Celery 用異步任務取代了并發(fā)任務,多任務管理的問題得到了有效的解決。為了完善任務管理框架,使用工具Celery 來調(diào)度異步任務。其中,將結果數(shù)據(jù)存儲到MySQL,將運行數(shù)據(jù)存儲在Redis,有很多進程來處理任務。當任務請求被服務器獲取后,Redis 里就存儲了任務信息。Redis 可以快速存儲任務運行過程中的數(shù)據(jù)內(nèi)容。根據(jù)任務隊列,Celery 對進程執(zhí)行任務進行實例化。進程執(zhí)行的任務均需要提前進行編寫。
定制采伐機數(shù)據(jù)處理系統(tǒng)采用了多處理技術,通過此技術可以使任務的執(zhí)行效率得到有效的提升。但是,Joblib 與Celery沖突,Joblib 加速不能在Celery 中管理的任務中使用。在系統(tǒng)中,采用Multiprocessing 作為解決方案,使采伐機數(shù)據(jù)處理加速。任務成功后,在MySQL 數(shù)據(jù)庫中對結果進行存儲。異步任務、定時任務等解決方案都可以由Celery 進行提供。通過對Celery 控件的使用,在定制采伐機數(shù)據(jù)處理系統(tǒng)中,任務調(diào)度可以進行合理的安排。同時,對任務請求進行并行處理,為系統(tǒng)的任務管理提供了一種解決方案。
干形是樹干形狀的簡稱,而干形數(shù)據(jù)集是用于使用削度方程來估測樹木干形的數(shù)據(jù)集,主要包含樹木編號、全樹高、帶皮直徑、胸徑等字段。目前的干形數(shù)據(jù)集獲取主要依賴于人工測量,利用采伐機數(shù)據(jù)生成干形數(shù)據(jù)可以極大地方便干形數(shù)據(jù)的獲取。
通過采伐機數(shù)據(jù)生成干形數(shù)據(jù)需要補全兩部分內(nèi)容,其一是觀測點的位置,其二是該位置的帶皮直徑數(shù)據(jù)。通過全樹高來確定觀測點的位置。輸入采伐機數(shù)據(jù)的小頭直徑,使用三次埃爾米特插值公式,最終得到觀測點的帶皮直徑。通過對干形數(shù)據(jù)的特征進行分析,確定干形數(shù)據(jù)生成時需要的輸入以及輸出。采伐點較多,同時材長比較高的采伐記錄為干形數(shù)據(jù)目標輸入。為了使生成的干形數(shù)據(jù)都是優(yōu)質(zhì)數(shù)據(jù),選擇材長比較高的記錄。為了保證有足夠的數(shù)據(jù)進行插值,來擬合出精確度較高結果,選擇采伐點數(shù)量較多的記錄。系統(tǒng)通過Pandas 遍歷采伐機數(shù)據(jù)中每條數(shù)據(jù)記錄,向生成干形數(shù)據(jù)的流程中輸入數(shù)據(jù)。帶皮直徑的插值通過scipy 提供的PchipInterpolator 完成,將觀測點處的高度輸入后,即可得到帶皮直徑。最終,通過Pandas輸出結果數(shù)據(jù)文件。
模擬切割是指匹配已有采伐數(shù)據(jù),模擬出材率最高的切割方式。模擬切割技術,可以對造材進行優(yōu)化,產(chǎn)生新的采伐機數(shù)據(jù)。在本系統(tǒng)中,模擬切割通過處理干形數(shù)據(jù)生成采伐機數(shù)據(jù),使用其中的帶皮胸徑、材長與最后一段小頭直徑匹配采伐機記錄。在模擬切割后,能夠利用切割點的位置,采用三次埃爾米特插值的方法得出對應位置的小頭直徑。最終,通過Pandas 輸出結果數(shù)據(jù)文件。
模擬切割只提供選擇切割干形數(shù)據(jù)集的功能,其效果與使用的數(shù)據(jù)集質(zhì)量有直接關系。切割數(shù)據(jù)集效果越好,模擬切割效果越好。
3.5.1 統(tǒng)計分析可視化
系統(tǒng)實現(xiàn)了采伐機數(shù)據(jù)的描述統(tǒng)計以及統(tǒng)計可視化功能。針對雙變量如地理坐標、小頭直徑跟長度的關系等可繪制散點圖。針對數(shù)值型單變量,如木段編號、小頭直徑、長度、體積提供繪制柱狀圖和直方圖功能,如圖3 展示了某個作業(yè)區(qū)域切割木段數(shù)的統(tǒng)計結果的直方圖,其橫坐標是切割木段數(shù),縱坐標是頻數(shù),從圖3 可以看出,這一區(qū)域中多數(shù)樹干都切割成了1 段到5 段木段(含廢材),其中切割成4 段的情況最多見。
圖3 切割木段數(shù)量統(tǒng)計
3.5.2 樹干三維可視化重建
根據(jù)StanForD 標準,原始數(shù)據(jù)記錄了采伐木的坐標值,本系統(tǒng)利用從采伐機數(shù)據(jù)中提取出來的干形數(shù)據(jù),構建了將樹干從平面數(shù)據(jù)立起來形成的3D 可視化模型,同時使用Felipe Crecente-Campo 等人構建的輻射松樹冠模型將整棵樹補全[17],讓用戶可以更加直觀形象地查看采伐林分的樹木情況,幫助其對數(shù)據(jù)有更進一步的了解。
本文采用Unity3D 的C#腳本程序編寫實現(xiàn)了上述功能。同時,利用光柵化引擎WebGL 使渲染出的3D 圖形在系統(tǒng)中進行呈現(xiàn),呈現(xiàn)效果如圖4 所示。
圖4 樹木三維可視化重建
本文針對采伐機數(shù)據(jù)應用與研究現(xiàn)狀的實際需求,分析明確系統(tǒng)業(yè)務流程,選擇與數(shù)據(jù)處理、異步任務管理相關的技術框架設計實現(xiàn)了定制采伐機數(shù)據(jù)處理系統(tǒng)。本系統(tǒng)實現(xiàn)了采伐機數(shù)據(jù)上傳、預處理、干形數(shù)據(jù)生成、模擬切割、可視化等主要功能。根據(jù)性能需求選擇異步處理框架解決并發(fā)任務管理問題,極大地方便了用戶處理采伐機數(shù)據(jù),提高了用戶體驗。后續(xù)也可以在該系統(tǒng)的基礎上進一步完善系統(tǒng)功能,如增加樹木生物量計算、出材率計算等。該系統(tǒng)為相關研究提供了有效的工具,也可為類似系統(tǒng)開發(fā)提供參考。