目錄
第一章緒論 1
1.1選題背景 1
1.2國內外研究現狀 2
1.3論文主要研究內容 3
1.4本文主要結構及章節安排 5
第二章相關技術研究 7
2.1硬件基礎 7
2.1.1采集終端 7
2.1.2數傳終端 9
2.2軟件開發 10
2.2.1Django 框架 10
2.2.2前后端分離技術 10
2.2.3數據庫選型 11
2.2.4數據序列化與反序列化 11
2.2.5數據處理及可視化 12
2.3本章小結 13
第三章儲糧害蟲智能監測信息管理平臺設計 15
3.1需求分析 15
3.1.1Web端儲糧害蟲信息管理系統需求分析 15
3.1.2移動端儲糧害蟲監測APP需求分析 16
3.1.3服務器后臺需求分析 17
3.2總體架構設計 18
3.2.1網絡架構設計 18
3.2.2軟件分層設計 20
3.3 Web端儲糧害蟲信息管理系統設計 21
3.3.1技術路線 21
3.3.2功能模塊設計 22
3.4移動端儲糧害蟲監測APP設計 25
3.4.1技術路線 25
3.4.2功能模塊設計 26
3.5服務器后臺設計 28
3.5.1數據庫設計 28
3.5.2儲糧害蟲數據采集設計 33
3.5.3蟲情分析報警設計 34
3.6本章小結 35
第四章儲糧害蟲智能監測信息管理平臺實現 37
4.1項目整體規劃 37
4.2 Web端儲糧害蟲信息管理系統實現 38
4.2.1用戶登錄 38
4.2.2權限分配 39
4.2.3數據管理 40
4.2.4設備在線升級 41
4.2.5人工采集數據上傳 42
4.2.6蟲情可視化 42
4.3移動端儲糧害蟲監測APP實現 45
4.3.1蟲情查看 45
4.3.2糧蟲圖鑒 46
4.3.3數據上傳 47
4.3.4蟲情報警 48
4.4服務器后臺實現 49
4.4.1儲糧害蟲數據采集 49
4.4.2Rest 月艮務 51
4.4.3蟲情可視化分析 53
4.4.4蟲情報警模型 57
4.5本章小結 59
第五章儲糧害蟲智能監測信息管理平臺部署與測試 61
5.1平臺部署 61
5.2服務器性能測試 62
5.3儲糧害蟲信息管理系統測試 63
5.4儲糧害蟲監測APP測試 64
5.4.1APP功能測試 64
5.4.2APP性能測試 65
5.5本章小結 66
第六章總結與展望 67
6.1論文總結 67
6.2工作展望 68
參考文獻 69
致謝 73
第一章緒論
1.1選題背景
我國是糧食生產與儲藏大國,糧食安全事關國計民生。自2015年后我國糧 食產量連續4年穩定在6.5億噸以上水平⑴,庫存容量也在6億噸以上。每年糧 庫的糧食損失為0.2%,而蟲害是造成糧食損失的重要原因。因此,我國每年都 要在糧庫的害蟲防治中投入大量的人力、財力,以確保糧食的儲藏安全【2〕。
及時獲取儲糧害蟲的發生情況對糧庫防治蟲害具有重要意義,但傳統的取樣 篩選法、誘捕檢查法操作繁瑣、檢測滯后,因人為因素造成的蟲害評估誤差較大, 難以滿足糧庫智能倉儲的建設需求。《糧食行業信息化“十三五”發展規劃》提 出要在糧食行業廣泛應用包括大數據、云計算、物聯網等新一代信息技術的總體 目標⑶。因此在國家的持續投入下,智慧糧庫的建設逐步展開,糧庫的計算機硬 件與網絡環境等基礎設施愈加完善,為智能硬件與信息系統等新技術在糧庫中的 應用提供了更加有利的條件。基于光學、聲學、電學檢測技術的儲糧害蟲信息采 集設備與儲糧害蟲監測信息系統被研發出來,通過信息化手段提高了儲糧害蟲信 息采集的效率⑷。利用圖像識別技術的儲糧害蟲信息采集系統,實現了對糧面害 蟲的采集與監測,在全國多個大型糧庫已經有了示范應用案例⑸。
本實驗室與國家糧食和物資儲備局科學研究院開展合作,研發了國內領先的 基于紅外光傳感器的探管式儲糧害蟲在線誘捕設備(Online Insect Trap Device based on Photoelectric Infrared Sensor,以下簡稱 01TD-PI)、以及基于攝像頭的探 管式儲糧害蟲在線誘捕設備(Online Insect Trap Device based on Camera,以下簡 稱OITD-C),此兩種設備作為儲糧害蟲信息采集終端,正在全國各地糧庫中推廣 應用,其可在糧堆中實現多點多層部署,能夠在儲糧害蟲在糧堆內發生的早期, 及時獲取害蟲的數量和種類信息。OITD-PI與OITD-C采集到的蟲情數據是糧庫 評估糧堆內害蟲發生情況與制定害蟲防控策略的重要依據,對科研人員構建儲糧 害蟲數據集、研究糧庫的殺蟲效果與害蟲抗藥性等也具有重要價值。
信息資源共建共享、數據互聯互通是糧庫信息化建設的重中之重[叫當前云 計算、大數據等技術迅速發展,以彈性可擴展、性能優越著稱的云存儲技術為蟲 情數據的集中存儲與管理提供了可能[7】。云服務器的多核高頻特性使其具備海量 數據的實時分析與處理能力,能有效提升蟲情數據的處理效率。智能手機在硬件 功能及軟件生態上發展迅速同,在手機端研發一款儲糧害蟲監測軟件具有較高的 實用價值,能夠幫助糧庫人員便利地開展對蟲情的監測和管理[9〕。基于信息化技
術,對采集到的儲糧害蟲數據進行有效的存儲、分析與處理,可以提高糧庫獲取 糧堆內儲糧害蟲數據的實時性與便利性,減小因人為因素導致的蟲情評估誤差, 幫助糧庫制定準確的害蟲防控策略,減少因儲糧害蟲造成的糧食損失。
因此,本文為管理跨區域分布于不同糧庫的OITD-PI與OITD-C設備,設計 并實現一種綜合性的儲糧害蟲智能監測信息管理平臺。基于云平臺與云存儲技術, 實現對所有采集終端的遠程管理與數據釆集,提高數據存儲的安全性和擴展性。 基于Web與Android開發技術搭建客戶端,同時在網頁端和手機端為用戶提供 數據服務,提高監測系統的移動性與實時性。利用數據分析與處理技術,設計蟲 情數據分析報警模型,挖掘蟲情數據的價值,提高數據的利用率。
1.2國內外研究現狀
儲糧害蟲監測系統由硬件設備和軟件系統兩部分組成。硬件設備主要包括儲 糧害蟲信息采集終端和數傳終端,它們負責蟲情數據的自動采集與上傳;軟件系 統主要是儲糧害蟲監測信息管理系統,負責蟲情數據的收集存儲和分析利用。根 據本文工作內容,著重分析儲糧害蟲監測中軟件系統的歷史與發展。
國外將信息化技術應用于糧食儲藏領域的時間相對較早。Shuman基于IBM PC平臺使用Borland C++開發了一套糧蟲數據管理軟件〔⑹,該軟件可自動獲取 并解析電子糧食探管害蟲計數器(Electronic Grain Probe Insect Counter, EGPIC)檢 測到的數據從而實現害蟲的計數,軟件還包括自我檢測、數據自動備份與恢復功 能。軟件是在DOS界面操作,具備較高的專業性,對用戶計算機素質要求較高。 加拿大OPI Systems公司使用基于紅外光電技術的探管設備進行實倉試驗爐】,設 計了一個可以將設備檢測到的害蟲數據轉化為糧倉害蟲密度的模型,并將該模型 融入其StorMax倉儲自動管理系統,能夠實現糧情的全方位監測。Ridgway等基 于個人電腦開發了儲糧害蟲檢測軟件包,該軟件驅動CCD相機使用圖像識別技 術識別小麥中麥角、鼠糞和常見害蟲,雖然檢測效率及精度較高,但其尚處于實 驗室研究階段[⑷。國外在儲糧害蟲檢測技術及蟲情分析模型方面具有優勢,但國 內外應用場景不同,因此還需針對國內糧情研發合適的監測系統。
國內的儲糧害蟲監測系統雖然起步較晚,但經過近幾年的持續研發,也取得 了一系列代表性的成果。徐建軍對糧庫糧情測蟲系統進行了研究和實現[旳,遠程 服務器通過給糧庫內的上位機發送指令,間接控制糧倉內的照相機拍攝圖片,并 將圖片發送到在遠程服務器中分割和識別,根據儲糧害蟲的種類和數量給出合適 的化學藥物類型及用量建議。羅慧采用云服務與Web技術搭建了儲糧低密度蟲 害實時監測系統[⑺,將圖像數據通過無線網絡傳送到云端,在云端使用圖像識別 技術識別害蟲,用戶在Web端可以查看識別結果。賽恩公司研發了儲糧害蟲監 測報警系統[刈,該系統能夠依據蟲情數據提供相對準確的蟲害等級評估,必要時 可以觸發聲光報警以提醒用戶。鮑舒恬研發了基于物聯網的儲糧害蟲監測系統 【19],該系統基于B/S架構設計,將數據的計算放在設備端以減小服務器壓力,服 務器負責數據的存儲與管理,實現了數據采集、存儲與統計。劉漢生研發了一套 基于陷阱式儲糧害蟲信息采集終端的儲糧害蟲監測系統⑸,用戶可以在瀏覽器控 制攝像頭,也可讓攝像頭定時拍攝粘膠板和波紋誘捕器中的害蟲,上位機可將圖 像傳輸至遠程服務器進行識別與保存。由于害蟲檢測技術與信息采集設備的限制, 當前針對糧堆內部害蟲的實時監測系統的研究成果還較少。害蟲早期是在糧堆內 部發生的,因此借助OITD-PI與OITD-C設備,搭建一套針對糧堆內部害蟲的信 息采集與數據管理系統是十分必要的。
隨著移動互聯網的發展,基于智能手機軟件的解決方案開始在糧食儲藏領域 出現。研究人員利用智能手機攜帶方便、性能優異、開發效率高的特點,開發出 了一些能夠幫助糧庫解決實際問題的手機端軟件。澳大利亞農業和食品部開發的 MyPestGuide手機軟件提供了 203種農作物害蟲的生活習性、主要危害、圖片等 詳細信息,用戶可以通過軟件將害蟲圖片與發生情況上傳到服務器,專家在后臺 査看上傳的信息并為用戶做出反饋,提出指導意見[2°】。羅強研發了基于深度學習 的糧庫蟲害實時監測報警系統0】,使用神經網絡模型識別儲糧害蟲圖像,對害蟲 種類和概率進行檢測,然后將結果返回給手機客戶端,但客戶端功能較為單一, 只能展示單張圖片的檢測結果。陶經研發了一款Android平臺下的手機APP【22], 通過手機攝像頭拍攝儲糧害蟲圖片,并將圖片和糧倉環境數據等上傳至服務器, 提高了用戶的數據采集效率,有效保存了儲糧害蟲數據。趙彬宇設計并實現了儲 糧害蟲圖像識別研究平臺【23】,可通過手機APP實現儲糧害蟲種類的識別與數據 的上傳,用戶還能通過手機端的儲糧害蟲智能圖鑒學習儲糧害蟲知識。由當前研 究進展可知,研究人員開發了多種基于智能手機的應用軟件,但將蟲情監測與智 能手機相結合的軟件還有待研究與開發。通過智能手機為糧庫提供蟲情監測等服 務,有助于糧庫管理人員更加及時便利地獲取蟲情信息,因此研究設計一款基于 智能手機的蟲情監測軟件對糧庫也具有實用價值。
1.3論文主要研究內容
本文基于云平臺搭建了儲糧害蟲智能監測信息管理平臺,設計了儲糧害蟲信 息釆集與終端設備接入方案,實現了多個糧庫的蟲情數據與終端設備的統一管理。 設計開發了移動端的儲糧害蟲監測APP,提供儲糧害蟲數據的實時監測服務。設 計了蟲情數據分析報警模型,實現了蟲情數據的可視化分析與自動分級報警。具 體包括以下幾個方面:
1.儲糧害蟲智能監測信息管理平臺的整體架構設計
實地調研糧庫網絡環境,設計儲糧害蟲數據跨區域采集的網絡架構。將平臺 劃分為Web端、移動端、云服務器端三個子系統,分析子系統功能需求,設計模 塊間的數據交互流程。基于軟件分層模塊化開發模式,把平臺抽象為表現層、數 據交互層、業務層、數據存儲層、數據庫與運行環境六層進行開發和實現。
2.Web端儲糧害蟲信息管理系統的設計與實現
調研分析糧庫需求,把系統劃分為用戶管理、綜合管理、蟲情數據服務三個 主要模塊。確定用戶角色與用戶權限,基于Django-xadmin實現了用戶信息與權 限的可視化配置。使用Echarts可視化技術,實時處理并在前端展示蟲情可視化 圖表。梳理系統子模塊業務流程,開發系統Web前端界面與后臺數據接口,實 現了儲糧害蟲數據管理、數據上傳下載、糧庫糧倉管理、蟲情數據可視化與終端 設備在線升級等功能模塊。
3.移動端儲糧害蟲監測APP的設計與實現
基于Android平臺,確立APP開發的技術路線,設計APP與服務器的JSON 數據交互流程,定義路由接口與數據格式。基于OpenGLES、Hellochart繪制采 集終端分布模型與蟲情可視化圖表。設計并實現了個人中心、蟲情查看、糧蟲圖 鑒、數據上傳四個主要模塊,為用戶提供實時查看蟲情、上傳儲糧害蟲數據、學 習儲糧害蟲知識與接收系統報警信息等功能。
4.服務器后臺的設計與實現
在云服務器基于MySQL搭建數據廳,設計數據庫表結構。選用前后端分離 的開發模式,基于Django REST framework框架開發后臺RESTful數據接口。設 計儲糧害蟲數據的采集流程,使用Protobuf定義數據的傳輸格式,賣現數據的統 一采集與存儲。使用Numpy、Matplotlib. Scipy可視化分析蟲情數據,繪制采集 終端的三維分布圖、害蟲數量三維柱狀圖與蟲情熱度圖,基于PyH模板生成蟲 情可視化分析報告。從整倉和單個采集終端兩個維度統計儲糧害蟲數據,設計蟲 情報警模型,計算蟲情等級,實現了蟲情的分級報警。
5.平臺的部署與測試
在騰訊云采用Linux+uWSGI+Nginx的方案部署儲糧害蟲智能監測信息管理 平臺。設計服務器性能測試方案,從響應時間、吞吐量兩方面測試儲糧害蟲數據 采集與存儲性能。設計功能測試用例,測試儲糧害蟲信息管理系統與儲糧害蟲監 測APP,記錄測試目標與測試結果。從內存、CPU與流量消耗三方面測試APP 性能,記錄測試結果并可視化。綜合分析平臺測試結果,確定平臺在功能和性能 上達到設計指標。
1.4本文主要結構及章節安排
根據研究內容及已完成工作情況,本文組織結構安排如下:
第一章緒論。本章首先介紹本文的選題背景,闡述了儲糧害蟲監測信息系統 的國內外研究現狀,然后介紹了論文的主要研究內容,對論文的組織結構和進行 了梳理。
第二章相關技術研究。本章針對平臺開發中所涉及的硬件基礎與軟件開發技 術進行了詳細說明。首先介紹了采集終端與數傳終端的技術原理,然后對軟件開 發的相關技術進行了分析和選型。
第三章儲糧害蟲智能監測信息管理平臺設計。本章首先分析了平臺Web端、 移動端、服務器后臺的功能需求,設計了平臺網絡架構與軟件分層架構。然后使 用流程圖、用例圖和UML圖對平臺的各個功能模塊進行了詳細的設計和說明。
第四章儲糧害蟲智能監測信息管理平臺實現。本章詳細介紹了儲糧害蟲信息 管理系統、儲糧害蟲監測APP與服務器后臺的技術實現細節與實現過程,展示 了 Web與APP的操作界面與功能實現效果。
第五章儲糧害蟲智能監測信息管理平臺部署與測試。本章首先介紹了平臺在 騰訊云的部署方案,然后對服務器、Web、APP進行了功能測試和性能測試。
第六章總結與展望。本章首先總結了論文完成的工作,然后對未來的進一步 研究進行了展望。
北京郵電大學工程碩士學位論文
第二章相關技術研究
儲糧害蟲智能監測信息管理平臺涉及軟硬件的數據交互、數據庫存儲、后臺 開發、前端開發、Android開發等多種技術的應用。本章介紹平臺開發的硬件設 備基礎,并對平臺軟件開發所涉及的技術進行研究和選型。
2.1硬件基礎
2.1.1采集終端
OITD-PI與OITD-C設備統稱為采集終端,是儲糧害蟲智能監測信息管理平 臺的蟲情數據來源。
如圖2-1所示為OITD-PI的結構圖及外形圖。
圖2-1 OITD-PI結構圖與外形圖
設備整體呈圓柱體狀,其組成由上到下依次為頂部整流罩、帶孔的誘捕段、 紅外光電模組檢測區域、底部的害蟲收集段。安裝部署時,將其垂直插入糧堆, 插入深度可根據實際情況調節。當糧堆中的害蟲經過誘捕段的孔洞爬入探管,會 以自由落體方式通過探管底部的紅外光電傳感器模組。紅外光電傳感器在不同面 積的遮擋下會產生不同的光電流信號,因此害蟲身體對紅外光的遮擋會引起光電 流信號的改變,探管底部的控制電路會將光電流信號轉化為離散的電壓信號即紅 外波形序列,然后將其保存在內部存儲器。紅外波形序列是OITD-PI設備采集到 的核心數據,通過識別算法可以根據紅外波形實現蛀蝕性與粉食性兩大類害蟲的
智能識別,如圖2-2所示。因此監測系統在分析蟲情時也按照蛀蝕性與粉食性對
糧倉害蟲數量進行統計,并對危害性較高的蛀蝕性害蟲予以重點關注。
圖2-2基于紅外波形的儲糧害蟲識別算法124]
OITD-C與OITD-PI具有相似的外觀,如圖2-3所示,主要的不同是其底部 的數據采集元件為攝像頭模組。OITD-C同樣以垂直插入糧堆的方式部署,儲糧 害蟲通過誘捕管的孔洞進入探管后,會掉落至底部的攝像頭拍攝區域。主電路板 的控制電路將啟動攝像頭拍攝,然后把光電數據轉化為RGB序列并保存至本地 存儲器。拍攝完成后,自動清理裝置打開漏斗,把害蟲落入底部的收集管,然后 關閉漏斗開始下一輪數據采集流程。
使用圖像生成算法可以把原始的RGB序列轉換為BMP圖片,RGB序列轉 換為圖片的過程計算量較大,而且轉換時還需要添加BMP文件頭、位圖信息頭 等額外信息。因此把RGB序列轉換生成圖片的過程放在計算效率更高的服務器 端進行,既可以減小采集終端的計算壓力,又能減少數據的傳輸量。服務器調用 儲糧害蟲圖像識別算法,能夠根據生成的圖片實現對害蟲種類的檢測。
糧堆溫濕度是糧庫中糧情監測的重要指標,因此OITD-PI與OITD-C底部還 安裝有溫度與濕度傳感器,除了可以采集儲糧害蟲數據,還能夠實時監測糧堆的 溫度與濕度。
2.1.2數傳終端
數傳終端是一個能夠連接管理糧倉內所有采集終端的設備,負責匯總收集糧 倉內所有采集終端采集到的儲糧害蟲數據,并將數據打包發送至服務器,服務器 通過數傳終端也能間接實現對采集終端的管理。圖2-4展示了糧庫儲糧害蟲數據 采集的設備部署方案,圖中矩形框為糧倉俯視圖,圓形標志為垂直插入糧堆的采 集終端。每個糧倉配置一個數傳終端,以間接的方式使糧倉內中分布的采集終端 接入網絡。采集終端通過485總線串聯,數傳終端定時輪詢采集終端,請求采集 終端保存的紅外光電序列和RGB序列,然后使用有線或無線的方式把數據傳輸 至服務器。
服務器
俯視圖
圖2-4硬件設備部署與通信方案
為了保證儲糧害蟲數據的實時采集,數傳終端要具備數據的快速處理與發送 能力,在性能、可靠性、擴展性上也有較高的要求。本文所述的數傳終端為 Raspberry Pi 3 Model B,其自帶基于Linux的操作系統,具有1.2GHz的主頻與 1G內存,可以滿足數據收集、處理與上傳對性能的需求〔25】;其體型小巧,同時 支持有線網絡和無線網絡的連接,因此在安裝和部署上也具有較高的靈活性。
2.2軟件開發
2.2.1 Django 框架
近年來隨著人工智能的火熱發展,Python在深度學習、大數據分析、服務端 開發等領域也開始發揮著愈加重要的作用Ml。儲糧害蟲智能監測信息管理平臺 集云服務器后臺開發、數據分析可視化、算法調用于一體,也正是Python開發 當前最契合的幾個領域,因此本文項目的開發選用Python作為主要開發語言。
Django框架是由Python開發的一個免費開源的Web框架,為開發者提供一 套功能全面、安全可靠的開發Web應用的完整體系結構。相比于Tornado、Flask 等其他基于Python的Web開發框架,Django集成功能最多,構建程序最為方便 快捷,應用也最為廣泛。儲糧害蟲智能監測信息管理平臺服務端的開發選用 Django框架,響應來自數傳終端、Web前端、手機APP的請求。
Django 采用 MTV (Model-View-Template)的架構,Model 即模型層,關注 數據的存取,該層以面向對象的形式實現對數據庫的抽象。Django內置的ORM (Object Relational Mapping,對象關系映射)組件實現了對多種數據庫的支持〔絢, 該組件將數據庫定義抽象為Python的類,通過對類的操作即可實現對數據庫的 增刪改查操作,通過ORM構建模型、激活模型、遷移模型幾個步驟即可完成模 型與數據庫的關聯,減少了原生SQL語句的使用。View即視圖層,該層主要包 含實現業務邏輯的方法與接口,通過Django內置的方法解析HTTP請求,對請 求的數據加工處理,使用URL分發器定義的地址對請求作出反饋,使用諸如 render_to_response的方法可實現對前端Templates的填充與渲染。Template即模 板層,負責Web前端界面的展示,前端頁面中嵌入Django模板語法,可以靈活 定義前端數據的展示。
2.2.2前后端分離技術
在Webl.O時代,數據服務系統的開發主要基于Web瀏覽器。當前隨著移動 互聯網的發展,服務端開始需要適配Android、iOS、Windows Phone等操作系統 的客戶端。如果按照以往每種客戶端適配一套后端服務程序的開發方式,不僅工 作量大,而且系統可維護性不好。而前后端分離正是解決多端適配的最佳解決方 案,前后端通過一套定義好的數據交互格式傳送數據,任何類型的終端設備只要 能夠解析數據即可實現相應的功能。
REST ( Representational State Transfer,表征狀態轉移)是基于 HTTP (HyperText Transfer Protocol,超文本傳輸協議)之上確定的一組架構約束條件 和原則,即通過HTTP的動詞在URI (Uniform Resource Identifier,統一資源定 位符)以資源路徑的方式來獲取資源。按照REST模式開發的網絡服務接口即可 被稱為RESTful API,使用RESTful API開發可充分利用HTTP協議本身語義, 使接口風格統一,語義明確/I。數據的收發以通用的JSON格式定義,數據描述 簡單,高效輕量,使用Python內置的模塊即可解析。
Django REST framework (以下簡稱DRF )是基于Django開發的一個第三方 輔助框架,是用于構建RESTful風格API的功能強大且靈活的工具包。DRF與 Django高度融合,可完美解決基于Django開發中前后端耦合的問題。同時DRF 可自動將RESTful風格的API在瀏覽器以可視化的形式展現,通過交互界面實 現API與前端的調試。開發完成后DRF自動生成接口文檔,在前端開發和軟件 測試時使用。
因此本文采用前后端分離技術,基于DRF框架開發服務器后臺數據接口, 同時為Web和手機APP提供服務,可以提高軟件的開發效率和可維護性。
2.2.3數據庫選型
MySQL是目前應用最為廣泛最著名的開源、免費、關系型數據庫,使用簡 單方便,對多種操作系統都有良好的支持。MySQL具有多種存儲引擎,可根據 具體業務如對事務的支持選用不同的引擎。使用結構化查詢語句(SQL)來對數 據庫進行管理,具備記錄和處理千萬量級數據的能力卩叭
Redis是一個開源的使用ANSIC開發的支持網絡、基于內存的非關系型key- value存儲系統,支持多種語言API,可用作數據庫、緩存和消息中間件。Redis 支持字符串(strings)、散列(hashs)、列表(lists)^集合(sets)等多種數據類 型,以鍵值對的形式存儲數據。Redis與關系型數據庫最大的不同是其基于內存 對數據進行讀寫,同時具有將數據持久化到硬盤的能力【3氏單線程與10多路復 用的架構使其單點讀的速度達到每秒十萬次,寫的速度達到每秒八萬次,性能強 勁。
儲糧害蟲智能監測信息管理平臺的數據存儲方案選用MySQL與Redis的組 合方式。蟲情信息、用戶信息、設備信息等對讀寫要求不高的數據,采用MySQL 作為主要的存儲方式。利用Redis的高速讀寫能力,在用戶校驗功能中用于存儲 Token,提高訪問速度與用戶體驗。
2.2.4數據序列化與反序列化
網絡中應用程序間的通信,都可以抽象為操作系統的進程與進程之間數據的 流通。網絡中只能傳輸二進制數據,因此進程之間通過網絡進行數據傳輸時,需 要通過序列化和反序列化來實現結構化數據和二進制數據的雙向轉換。
Protocol Buffers (以下簡稱Protobuf)是Google公司開發的一種輕便高效的 結構化數據存儲格式,是一種語言無關、平臺無關、易于擴展的結構化數據序列 化和反序列化方法,可用于通信協議、數據存儲等領域,提供了 Python語言的 APIP3]。與XML和JSON格式相比,Protobuf更輕量、速度更快、更便捷,只需 使用自帶的protoc編譯器編譯定義好的結構化數據,即可生成Java、Python、C++ 等多種語言可直接使用的代碼。
使用Protobuf定義數傳終端收集到的儲糧害蟲數據,可以有效壓縮數據大 小,減少數據傳送過程中的帶寬占用,還可以提高服務器的數據解析速度,因此 本文選用Protobuf作為數據的序列化與反序列化方案。
2.2.5數據處理及可視化
經過數據清洗、數據集成、數據壓縮和數據轉換的預處理步驟,通過數據建 模和可視化的方式挖掘數據背后隱藏的信息[珂,是對數據充分而有效的利用。當 前Python在數據分析領域有著完整的生態,豐富的第三方庫使Pythori可以支持 數據處理的所有過程。
Numpy是Python語言的一個擴展程序庫,它用實現編譯好的、快速的函數 提供了方便的數學和數值方法,提供了處理大型數值數組或矩陣的基本方法。幾 乎所有的科學計算和數值計算都需要將數據表示為向量或矩陣的形式,Numpy 可以使用ndany等方法處理所有這些問題oNumpy提供了數組的快速實現方法, 以及與數組相關的函數。Numpy數組相較Python內置的列表類型提供了更加高 效的存儲和數據操作,利用數組對象可實現包括矩陣乘法、向量和矩陣的轉置、 方程組求解、向量乘法和向量歸一化等眾多操作。
Pandas是在Numpy基礎上建立的程序庫,解決了 Numpy在處理結構化數 據不夠靈活的問題。Pandas的Series和DataFrame對象,為處理需要消耗大量時 間的數據清理任務提供了捷徑。Series對象是一個帶索引數據構成的一維數組, 用一種顯式定義的索引與數值關聯。Dataframe對象是一種帶行標簽和列標簽、 支持相同數據類型和缺失值的多維數組。Pandas可以通過內置的許多處理帶標 簽數據的函數實現高效的操作,還為帶各種標簽的數據提供了便利的存儲界面。
SciPy是一款方便、易于使用、專為科學和工程設計的python科學計算軟件 包,包括統計、優化、整合以及線性代數模塊,可以處理插值、積分、圖像處理、 常微分方程求解、信號處理等問題。可以用于計算Numpy矩陣,使Numpy和 Scipy協同工作,高效解決問題。
Matplotlib是建立在Numpy數組基礎上的多平臺可視化程序庫,提供類似于 MATLAB風格的交互式圖形,支持幾十種圖形顯示接口與輸出格式。Matplotlib 具有良好的操作系統兼容性和圖形顯示接口兼容性,使用戶無論在那種系統上都 可靈活定制輸出的圖形風格與結果。這種跨平臺、面面俱到的特點已經成為了 Matplotlib最強大的功能之一.
由以上分析可知,Python為數據處理提供了完善的支持,因此本文選用 Python作為儲糧害蟲數據的分析處理與可視化工具,從而也與服務器后臺的開 發語言保持了一致,提高了代碼的可維護性。
2.3本章小結
本章主要研究了儲糧害蟲智能監測信息管理平臺的硬件設備基礎與軟件開 發相關技術。首先介紹了儲糧害蟲信息采集終端與數傳終端的技術原理、性能參 數與部署方案,為軟件系統的開發打下基礎。然后闡述了前后端分離開發的特點 與優勢,分析了 Django 與 DRF 框架,介紹了 Numpy、Pandas> Scipy 與 Matplotlib 庫。
第三章儲糧害蟲智能監測信息管理平臺設計
本章節的主要任務是對儲量害蟲智能監測信息管理平臺進行全面完善的分 析與設計,從用戶需求、網絡環境、軟件架構、系統性能等方面分析,完成對平 臺整體架構的設計。分析Web與APP軟件的需求,設計軟件功能模塊與工作流 程。分析儲糧害蟲數據傳輸流程,確定數據傳輸方案,設計數據庫存儲結構。
3.1需求分析
儲糧害蟲智能監測信息管理平臺的開發工作包括Web端儲糧害蟲信息管理 系統、移動端儲糧害蟲監測APP與服務器后臺三個子系統,如圖3-1所示。子系 統間功能相互獨立,使用接口進行數據交互,符合“高內聚、低耦合”的軟件設
蟲侑掖?? Rest眼務
BEKS后臺
圖3-1儲糧害蟲智能監測信息管理平臺組成
3.1.1 Web端儲糧害蟲信息管理系統需求分析
儲糧害蟲智能監測信息管理平臺Web端的建設目標是基于PC瀏覽器開發 一個儲糧害蟲信息管理系統,為糧庫保管員提供一個可直觀管理蟲情數據與終端 設備的平臺,系統應具有如下功能。
1.用戶管理
本系統主要服務于全國各地糧庫的糧庫保管員,用戶群體固定,用戶的工作 與管理范圍具有確定性。因此每個用戶的添加都要經過管理員的審核,并為其分 配可訪問到的數據權限。因科研與或工作需要,管理員也可以對非糧庫用戶授予 相應的訪問權限,與其他研究團隊共享儲糧害蟲數據,共同參與數據的研究分析。
2.儲糧害蟲數據管理
全國各地糧庫的采集終端和數傳終端采集到的儲糧害蟲數據會發送并保存 在服務器,尤其當系統需要管理大量的糧庫、設備與儲糧害蟲數據時,更需要合 理地設計數據庫與文件系統的存儲結構。直接查看數據庫中的數據很不方便,因 此在瀏覽器界面中需要以可視化的方式,提供數據的篩選、查看、修改、刪除、 標注、下載等功能。
3.儲糧害蟲數據可視化
數據可視化是展現數據分布規律、發展趨勢的重要方式,使用三維圖、折線 圖、柱狀圖、餅圖、散點圖等把儲糧害蟲的數量、害蟲種類占比、歷史發生規律、 發展趨勢等表現岀來,能夠讓糧庫保管員更直觀地獲取糧倉蟲情,從而及時采取 防治措施。
4.人工采集數據上傳
人工抒樣和人工篩檢是糧庫檢測蟲口密度的重要方法a】,糧庫根據篩檢得 到的害蟲密度來判斷蟲糧等級。用戶在采集終端附近的抨樣與篩檢結果對判斷設 備監測效果、發現人工采集與設備采集的相關性、積累蟲情數據具有重要意義, 因此需要在系統中提供數據上傳功能,讓用戶可以把人工采集的結果上傳到系統。
5.設備管理
系統要使用戶登錄后能夠查看、修改其所管轄范圍內的糧庫、糧倉信息,可 以查看設備信息列表,獲取設備運行狀態。當設備出現故障時需要在界面中醒目 顯示,提醒用戶及時報修。在采集終端的生產階段,每臺采集終端控制模塊的代 碼都由人工手動燒寫,測試完備后進入糧倉部署到糧堆的不同深度。若后續需要 對采集終端的軟件進行更新升級、系統修復時,將其從糧堆內取出重新寫入程序 的方法是不可取的。因此需要設計采集終端的自動升級功能,使用戶無需了解設 備的技術細節,只需在瀏覽器頁面進行簡單的操作即可完成升級功能。
3.1.2移動端儲糧害蟲監測APP需求分析
為了提高儲糧害蟲監測系統的實用性與便利性,因此設計開發一個儲糧害蟲 監測APP,旨在為糧庫保管員提供一個移動端的管理手段,其應具有的功能如下。
1.儲糧害蟲數據查看與可視化
Web端的數據管理信息系統雖然能夠更詳細地展現儲糧害蟲數據,但其對計 算機的依賴限制了系統的靈活性。為了讓用戶能夠隨時隨地獲取糧倉的害蟲發生 情況,因此需要在手機端為用戶展現監測數據,同時繪制可視化圖表展現數據的 分布與規律。由于手機屏幕較小,呈現的數據量有限,因此需要讓用戶能夠按照 糧庫、糧倉、設備號進行篩選,減小數據的范圍從而更好地呈現。
2.數據采集與上傳
糧庫保管員在日常的糧食管理工作中可以充分利用智能手機輕便靈活的特 點,將手機APP作為害蟲數據采集的另一個入口。智能手機攝像頭分辨率越來 越高,拍攝害蟲的圖像也越來越清晰,因此在APP中開發害蟲的拍攝與上傳功 能,可以幫助積累儲糧害蟲圖像數據集,為儲糧害蟲識別算法的研究提供數據基 礎。另外,人工抒插采樣的結果也要可以通過手機傳送到服務器,讓用戶無論在 Web端和手機端都可以實現此功能。
3.儲糧害蟲圖鑒
智能手機已經成人們日常生活的一部分,是人們獲取信息與學習知識的重要 途徑。在手機上提供一個可以隨時隨地學習儲糧害蟲知識的智能圖鑒,可以增進 用戶對儲糧害蟲的了解,降低用戶的學習成本。圖鑒中應按蛾類、蛾類等對害蟲 分類匯總,提供害蟲的生活習性、主要危害、防治策略、分布地區等詳細信息。 由于害蟲種類較多,為了方便用戶使用,還要提供害蟲搜索查詢功能。
4.蟲情報警推送
在手機端為用戶推送蟲情分級報警信息,可以更及時地讓用戶關注糧倉中害 蟲的發生情況,提高對蟲害的反應速度,從而減少蟲害造成的糧食損失。因此, 在手機APP應設置消息中心,接收服務器推送的報警信息,然后通過聲音、震 動提醒用戶查看。
3.1.3服務器后臺需求分析
云服務器要能響應Web網站和手機APP的請求,還需要在后臺持續運行數 據采集、算法調用、數據分析、蟲情報警、數據備份等服務。
1.數據采集存儲
云服務器與數傳終端之間需要定義數據傳輸格式,設計數據交互的流程。云 服務器為數傳終端提供數據接收接口,接收并解析所有數傳終端的數據上傳請求O 云服務器數據庫要能夠存儲來自多種類型儲糧害蟲采集終端的數據,包括OITD- PI與OITD-C設備,以及后續可擴展支持的高清攝像頭圖像采集設備。數據庫支 持存儲的數據包括大氣溫濕度、糧堆溫濕度、紅外波形序列、糧面害蟲圖片、糧 堆內害蟲圖片等。
2.Rest服務
Web端與手機端軟件按照定義好的數據傳輸格式與服務器進行交互,服務器 端需要開發RESTful接口接受來自Web端與手機端軟件的HTTP請求,根據數 據處理流程實現業務邏輯,為前端軟件返回JSON格式數據。
3.蟲情分析與報警推送
終端設備采集到的數據包括害蟲種類、害蟲數量、發生時間、發生位置、糧 堆溫度、糧堆濕度等數據,為了充分利用蟲情數據,需要構建數據分析模型,根 據監測數據分析得出當前蟲情發生等級、變化趨勢、防治意見等,及時向用戶推 送報警信息,提高系統智能化程度。
4.數據備份
數據是信息系統運行的基礎,定期對數據庫進行備份是必要的。文件系統中 保存的儲糧害蟲圖片、紅外波形等數據,隨時間的積累會占用大量磁盤空間,影 響系統正常運行,因此需要使用備份腳本,定期將數據備份至本地計算機,然后 刪除服務器中非必要數據,節省服務器存儲空間。
3.2總體架構設計
3.2.1網絡架構設計
隨著計算機網絡技術的發展,我國糧庫也在由傳統線下管理向信息化、網絡 化的方向發展,中儲糧庫、省儲庫均搭建了自己的專有網絡,配備有網絡中控室。 整個糧庫位于同一個局域網,每個糧倉配有交換機,交換機通過光纖與中控室的 網絡接口相連。糧倉內的網絡設備通過網線接入交換機,手動分配子網掩碼和IP 后即可接入糧庫局域網。
由于每個糧庫的網絡安全管理限制的不同,部分糧庫的局域網與互聯網建立 了連接,用戶、設備與服務器之間的遠程交互可通過網絡實現。此時服務器可部 署在云端,為所有可接入互聯網的糧庫與用戶提供服務。部分糧庫則因安全限制 無互聯網入口,信息的交流僅限于糧庫局域網內。在這種情況下就要求本平臺部 署在糧庫機房服務器,在糧庫局域網內提供服務,但這樣會導致采集到的儲糧害 蟲數據無法有效的分享和二次利用。此時如果數傳終端不使用網線接入糧庫的局 域網,通過安裝無線網卡方式接入云端服務器,便可實現數據的統一管理與存儲。 無線網卡同樣要在糧庫的安全許可下使用,不能破壞糧庫的網絡安全與數據保密 性。
儲糧害蟲智能監測信息管理平臺致力于終端設備與蟲情數據的跨區域管理, 基于云平臺的部署方案是解決跨區域問題的基礎。但在糧庫網絡安全的限制下, 也要滿足用戶在糧庫局域網中的使用需求。因此,平臺要支持在局域網與互聯網 兩種環境下的部署和使用。基于云服務器開發的儲糧害蟲智能監測信息管理平臺, 只需修改網絡配置即可滿足局域網下的使用,因此本文著重于系統在云平臺下的 設計與實現。
如圖3-2所示為基于云服務器的儲糧害蟲智能監測信息管理平臺的網絡架 構設計。我國國家級糧食儲備庫數量約為8000個,OITD-PI與OITD-C作為儲 糧害蟲信息采集終端,將逐步在全國各地糧庫中推廣使用。一個糧庫中有多個糧 倉,每個糧倉內采集終端的安裝數量在30-100之間。每個糧倉配置一個數傳終 端,服務器通過數傳終端以糧倉為單位管理采集終端,儲糧害蟲數據的上傳與服 務器控制指令的下發均在服務器與數傳終端之間實現。當糧倉內的采集終端檢測 到害蟲時,會自動將紅外、圖像、溫濕度等數據保存至采集終端的內部存儲器。 數傳終端會定時輪詢各個采集終端,請求終端設備保存的儲糧害蟲數據。數傳終 端獲取數據后,將數據序列化處理,通過HTTP請求向云服務器發送。云服務器 接收到請求后將數據解包,調用智能識別算法識別害蟲數據,將處理得到的結構 化數據存儲至數據庫,非結構化數據存儲至文件系統。系統管理員為各地糧庫的 糧庫保管員分配系統訪問權限,然后糧庫保管員即可通過Web和手機APP與服 務器的RESTfulAPI進行數據交互。服務器端嵌入蟲情分析報警模型,定時分析 處理采集到的儲糧害蟲數據,為用戶提供蟲情可視化分析與蟲情報警服務。
mA
圖3-2儲量害蟲智能監測信息管理平臺網絡架構
322軟件分層設計
儲糧害蟲智能監測信息管理平臺采用前后端分離的開發模式,基于Django 框架開發。采用分層架構模式設計軟件系統,層與層之間根據功能及業務邏輯的 差異可抽象為表現層、數據交互層、業務層、數據存儲層、數據庫、運行環境六 層,如圖3-3所示。分層架構模式可以降低層與層之間的依賴,使系統以更松散 的方式耦合,有利于各層邏輯的復用,提高系統的可維護性。
圖3-3軟件分層架構
表現層即呈現給用戶的Web界面,基于Django-xadmin組件實現,界面風格 統一,模塊可定制化開發。數據可視化圖表的開發使用Echarts,將監測數據以圖 表或三維的形式展示給用戶。
數據交互層負責接收并解析來自Web前端、手機APP、數傳終端的網絡請 求,根據請求路由分配給相應的后臺服務來處理。用戶通過手機APP和瀏覽器 以GET、POST等方式向服務器發送AJAX請求,服務端返回JSON格式的數 據,前端將數據解析后將以設定的樣式呈現給用戶。
業務層是平臺所有數據的流入流出、分析處理的核心層次,把用戶管理、蟲 情分析、蟲情報警、算法調用、日志管理、文件處理等業務層的功能解耦拆分為 軟件模塊,通過接口對外提供服務。模塊化開發的方式可以降低軟件復雜度,提 高代碼的健壯性,也有利于后期軟件功能的擴展。
數據存儲層提供數據與模型的關系映射,使用Django自帶的ORM,以數據 對象的形式對數據庫表進行查改增刪的操作,減少原生SQL語句的使用。事務 保證數據庫操作的可靠性,數據緩存可以加快數據庫的讀寫速度。
數據庫層的關系型數據庫選用MySQL,負責存儲用戶、設備、儲糧害蟲等 數據,是數據的主要存儲位置。非關系型數據庫選用Redis,利用其基于內存的 高速特性,在用戶校驗中存儲Token,提高訪問速度。
使用Docker部署服務器,能有效避免服務器環境與開發環境不一致的問題。 硬件環境包括糧庫機房服務器和云服務器兩種,根據糧庫管理規定和用戶需求在 這兩種環境下對系統進行部署。在糧庫機房部署時,系統在糧庫的局域網環境下 為糧庫內部用戶提供服務。部署在云端時,服務于所有可接入互聯網的糧庫、設 備和用戶。
3.3 Web端儲糧害蟲信息管理系統設計
3.3.1技術路線
Web端軟件的開發技術選型如表3-1所示。開發語言選用Python,基于Django 框架開發Web服務。MySQL存儲儲糧害蟲、糧庫糧倉、用戶、設備等結構化數 據,是系統數據的主要存儲空間。Redis作為緩存數據庫,在用戶身份驗證流程 中存儲Toekn,以其基于內存的特性加快系統響應速度。
表3-1 Web開發技術選型
時需求 林選型
開發語言 Python 3.6.5
Web框架 EJjango 2.1
前后端分離方案 DRF
開發IDE Pycharm professional 2017.3
虛擬環境 X^rtualenv 15.1.0
關系型數據庫 MySQL 5.7」8
內存數據庫 Redis 3.2
前端框架 Django-xadmin
數據可視化 Echarts
在Python項目的開發過程中,通常使用pip安裝第三方包。使用virtualenv
虛擬環境工具虛擬出來一個隔離的Python環境,可以解決不同項目間包版本的 沖突。項目開發完成后,使用pip freeze命令導出requirements.txt文件,該文件 內容為Python第三方包的名稱與版本列表。項目部署時,直接在服務器虛擬環 境中運行pip install -r requriements.txt命令即可生成與開發時相同的項目運行環 境。
儲糧害蟲信息管理系統基于Django框架開發,后端服務對前端請求的處理 流程如圖3-4所示。由于采用前后端分離的開發模式,Django中的Templates即 模板層不再使用,View中間件直接處理業務邏輯,使用Response中間件直接將 結果返回給前端即可。
圖3-4 Web后臺處理流程
3.3.2功能模塊設計
基于需求分析,在軟件設計層面上將儲糧害蟲信息管理系統劃分為用戶管理、 綜合管理、蟲情數據服務三個主要模塊,每個模塊中細分為多個功能組件,如圖 3-5所示。
1.用戶管理模塊
權限分配模塊負責用戶權限的分配與管理,服務對象為系統管理員。注冊登 錄模塊使用JSON Web Token的登錄驗證方式,實現對用戶登錄的身份校驗,其 邏輯流程如圖3-6所示。信息修改模塊可以使用戶進入系統后,補充或修改個人 信息。
2.綜合管理模塊
系統管理:該模塊為系統管理員服務,提供系統日志的記錄、顯示、查找、 導出等管理功能。其中系統運行日志分為DEBUG,INFOxWARNING、ERROR、 CRITICAL五個等級,在Django的setting.py中配置logging模塊,可輸出日志 文件。用戶操作日志由Djang-xadmin生成,日志記錄可篩選和導出。
糧庫管理:用戶可查看其管轄范圍內的糧庫、糧倉信息,包括糧倉號、儲糧 種類、入庫時間、設備安裝數量、安裝類型等信息。當糧庫、糧倉的信息需要修 改時,可在系統中重新配置。
設備管理:各個糧庫的采集終端設備信息以列表的形式展現在后臺管理界面, 包括設備安裝位置、時間、型號、運行狀態、數據采集類型、設備運行日志等; 設備的遠程在線升級功能在該模塊中實現,設備在線升級流程如圖3-7所示。
圖3-7設備在線升級流程圖
3.蟲情數據服務模塊
數據可視化:此模塊基于Echarts可視化插件,為用戶提供害蟲總數量變化、 各個監測點害蟲數量變化、害蟲種類分布等數據可視化圖表。
數據管理:該模塊展示采集到的儲糧害蟲數據,能查看各地糧庫、糧倉中的 詳細害蟲數據。可根據時間、位置、設備號等條件篩選數據,篩選結果可以導出。 糧庫保管員可在數據上傳頁面上傳人工采集的害蟲數據。
報警推送:系統根據蟲情報警模型的分析結果,在前端界面推送報警信息。
3.4移動端儲糧害蟲監測APP設計
智能手機在人們日常生活中的應用越來越普遍,其中Android的市場占有量 最大,其應用軟件的開發生態也十分完善,因此儲糧害蟲監測手機APP基于 Android平臺設計。
3.4.1技術路線
APP技術選型如表3-2所示。手機客戶端開發語言選用Java,服務器后臺接 口使用Python基于DRF開發,前后端使用HTTP進行數據交互,數據格式統一 使用JSON,手機端使用JackSon解析服務端返回的數據。使用Android SDK自帶 的SQLite數據庫存儲糧蟲圖鑒的電子化數據,使用Glide加載儲糧害蟲圖片,儲 糧害蟲數據可視化選用Hellocharts插件,OpenGL ES用來繪制糧倉內設備分布 的三維模型。使用Git作為版本控制工具,在GitHub創建個人私有代碼倉庫管 理項目代碼。
表3-2 APP開發技術選型
蛛需求 技術選型
客戶端 Java jdk8
服務端 Python DRF
數據庫 SQLite數據庫
GreenDAO (ORM 框架)
網絡交互 Retrofit 框架 Rxjava框架(異步操作) JackSon 框架(json 解析)
界面設計 Material Design 設計語言 Butter Knife框架(控件綁定) Glide (圖片加載框架) Hellocharts (數據可視化) OpenGL ES 2.0 (三維建模)
版本管理 Git
手機APP與服務器的交互流程如圖3-8所示,用戶登錄后在功能界面進行 操作,APP會以GET、POST的方式向服務端RSETful接口發送請求。服務器的 監聽端口接收到請求后,根據路由調用對應的handler處理HttpRequest,然后把 處理結果封裝為JSON格式,使用HttpResponse攜帶JSON數據返回給APP。 APP解析服務器返回的JSON數據,將解析的結果顯示在功能頁面。
3.4.2功能模塊設計
儲糧害蟲監測APP是糧庫保管員及時獲取儲糧害蟲監測數據的重要途徑, 因此APP的設計要符合糧庫一線的管理需求,符合用戶使用習慣,功能劃分清 晰,界面設計合理美觀。根據需求分析將手機APP劃分為個人中心、蟲情查看、 糧蟲圖鑒、數據上傳四個主要的功能模塊,如圖3-9所示,APP四個主要功能模 塊的設計分析如下。
1.個人中心模塊
用戶通過手機號注冊賬號,系統管理員在Web端信息管理系統為用戶配置. 權限后,用戶才可使用APP相關功能。用戶消息中心收取由系統自動推送的蟲 情報警信息、管理員推送的服務信息等。報警設置模塊使用戶可以自主開啟關閉 報警功能,手動設置蟲情報警模型閾值。
2.蟲情查看模塊
蟲情查看模塊可以展示糧倉的采集終端三維分布圖,讓用戶詳細了解倉內采 集終端的具體分布。在蟲情查看界面提供數據的篩選和查看,展示糧倉的詳細蟲 情數據,并以可視化的方式展示倉內害蟲數量變化。
3.糧蟲圖鑒模塊
糧蟲圖鑒頁面展現糧庫中常見的各種儲糧害蟲的詳細信息列表,包含儲糧害 蟲高清大圖、形態特征、生活習性、主要危害、環境分布與防治策略等。用戶點 擊害蟲圖片或名稱,將展示害蟲詳情頁面。用戶在搜索欄中輸入害蟲名稱后,可 快速定位到所要查找的害蟲。
4.數據上傳模塊
服務器后臺為手機APP提供RESTful風格的數據上傳接口,用于接收處理 用戶上傳的人工采集信息。在人工采集數據上傳頁面,可以在表單中填寫害蟲圖 片、種類、數量、糧溫、糧濕等相關信息,然后提交給服務器以保存。
根據APP模塊功能,設計圖3-10所示的APP工作流程圖,用戶登錄成功 后,即可在功能界面中使用APP上述功能。
圖3-10儲糧害蟲監測APP工作流程
3.5服務器后臺設計
3.5.1數據庫設計
服務端使用MySQL存儲結構化數據,非結構化數據存儲至操作系統的文件 系統。系統采用Django自帶的ORM數據庫模型設計方案,將系統中所要用到 的數據庫表抽象為模型類,數據庫表字段抽象為類的屬性。在Django的settings 中配置與本地或遠程MySQL數據庫的連接,然后運行manage.py中的 makemigrations命令將抽象類轉化為中間數據對象,同時數據庫中記錄本次轉化 版本以備后續查看,最后運行migrate命令將中間數據對象生成為MySQL的數 據庫表。
Django自帶的QuerySet接口的ORMAPI為數據庫的查、改、增、刪操作提 供了完備的支持,Django會將Python代碼轉化為數據庫可識別的SQL語句,進 而實現對數據庫的操作。若后續需要對數據庫表進一步設計,只需要在原有代碼 基礎上更改即可。使用Python編寫數據庫的初始數據腳本,通過ORM運行腳本 能生成數據庫的初始數據。
1.用戶信息相關表設計
Django中內置了一套auth用戶認證機制,提供了完備的戶用認證解決方案, 在此基礎上二次開發即可滿足本系統需求。Django提供的AbstractUser模型,只 包含id、密碼、上次登錄時間、超級用戶狀態、職員狀態等字段,不能滿足平臺 對用戶信息的需求。通過繼承Django內置的AbstractUser類,增加手機號、工 作單位、性別、郵箱等字段,設計滿足糧庫實際管理需求的UserProfile模型。
由于用戶模型繼承自AbstractUser,因此生成的用戶信息表會自動與Django 自帶的用戶權限、用戶組、組權限、用戶操作日志等數據表形成外鍵的關聯,其 他數據庫表都是以用戶信息表為中心。用戶信息表詳細字段設計如表3-3所示。 用戶注冊時只需設置用戶名和密碼,管理員審核將用戶is_active字段置為1,用 戶被激活都才能使用系統相關服務,其他字段信息可在后期補充填寫。
表3-3用戶信息表(users_use卬rofile)
字段名 字段類型 字段長度 可否為空 字段描述
id int 11 否 用戶id,主鍵
password varchar 128 否 密碼
Iast login datetime 6 否 上次登錄時間
is superuser tinyint 1 否 是否為管理員
username varchar 50 否 用戶名
i
first name ; varchar 20 是 名
last name varchar 20 曰 疋 姓
email varchar 30 是 郵箱地址
is staff tinyint 1 是 職員狀態
is active tinyint 1 是 是否激活
datajoined datetime 6 是 加入日期
position varchar 20 是 職位
workplace varchar 50 是 工作地
mobile varchar 11 是 手機號
2.糧庫、糧倉、設備信息表設計
糧庫信息表、糧倉信息表、設備信息表按照現實中的包含關系設計,糧庫為 系統管理中的最大單位,每個糧庫中有多個糧倉,每個糧倉中安裝有多個儲糧害 蟲信息采集終端。將糧倉、糧庫、設備實體抽象為數據庫模型,其關系如圖3-11 所示。糧庫、倉庫、設備信息表的設計采用一對多的方式,以糧庫代號、糧倉編 號作為外鍵進行關聯。
oitd_depot o 11 d_wai' ehous e oitd_deviceinf o
.id id • id
, depot name id warehouse / * dev id
? address ▲ volume warehoi
B depot manager grain type » install time
,warehouse num 11 * . ¥ in time ” warehouse id
» devnum
r depotid
圖3-11糧倉、糧庫、設備關系圖
糧庫信息表主要由管理員錄入糧庫相關信息,普通用戶只具備查看權限。糧 庫信息表詳細字段信息如表3-4所示。
表3-4糧庫信息表(oitd_depot)
字段名 字段類型 字段長度 可否為空 字段描述
id int 11 否 自增主鍵
depot name varchar 50 否 糧庫名
depot code int 11 否 糧庫代號
depot address varchar 100 是 糧庫地址
depot_manager varchar 50 是 糧庫主管
warehouse num int 11 是 糧倉數量
糧倉信息表保存安裝有儲糧害蟲信息采集終端的糧倉的相關信息,其詳細字 段如表3-5所示。
表 3-5 糧倉信息表(oitd_warehouse)
字段名 字段趣 字段長度 可否為空 字段描述
id int II 否 自增主鍵
id warehouse int 11 否 糧倉號
volume int 11 是 儲糧/噸
grain type varchar 20 是 儲糧種類
in time datatime 6 是 入庫時間
dev num int 11 否 安裝設備數量
depot id int 11 否 所屬糧庫,外鍵
length int 11 否 糧倉長
width int 11 否 糧倉寬
depth int 11 否 糧堆深度
當采集終端需要安裝到某個糧倉時,在糧倉內按照精確計算過的監測節點位 置部署采集終端,部署完成后將設備編號與監測位置編號綁定,在信息管理系統 將設備id^型號、安裝時間、監測位置等信息輸入系統保存到oitd_deviceinfo表。 設備信息表詳細字段如表3-6所示。
表 3-6 設備信息表(oitd_deviceinfo)
字段名 字段類型 字段長度 可否為空 字段描述
id int 11 否 自增主鍵
dev id int 11 否 設備號
dev type varchar 10 否 設備類型
install tinie datetime 6 否 安裝時間
dev place id int 11 否 監測位置號
dev_status tinyint ] 否 設備狀態
warehouse id int 11 否 所在糧倉號,外鍵
dev x float 8 否 X軸坐標x
dev y float 8 否 Y軸坐標y
dev z float 8 否 Z軸坐標z
3.儲糧害蟲數據表設計
表3-7設備上傳的儲糧害蟲數據表(oitdjrawdata)
字段名 字段趣 字段長度 可否為空 字段描述
id int 11 否 自增主鍵
address varchar 100 否 糧庫
id warehouse int 11 否 糧倉號
id dev int 11 否 設備號
dev place id int 11 否 設備監測位置
status tinyint 1 否 設備狀態
time datetime 6 否 時間
data type int 11 是 數據類型
pre info varchar 100 是 預處理信息
pest type int 11 是 害蟲類型1:蛀蝕2:粉食
save path varchar 100 是 數據存儲路徑
grain t float 8 是 糧堆溫度
grain h float 8 是 糧堆濕度
服務器將數傳終端發送的儲糧害蟲數據存儲至oitd_rawdata表,如表3-7所 示。表中每一條數據記錄代表采集到一個儲糧害蟲,可以根據每條記錄的糧倉號、 設備號、時間等信息從不同維度分析糧庫的害蟲發生情況。
用戶在Web端和APP中上傳的儲糧害蟲數據會存儲到oitd_manual表,詳 細字段如表3-8所示,儲糧害蟲的種類與采集終端采集的害蟲種類一致,其中蛀 蝕性害蟲包括玉米象、米象與谷蠹3種,粉食性害蟲包括長角扁谷盜、土耳其扁 谷盜、銹赤扁谷盜、赤擬谷盜與雜擬谷盜鋸谷6種。
表3-8人工上傳的儲糧害蟲數據表(oitd_manual)
字段名 字段類型 字段長度 可否為空 字段描述
id int 11 否 自增主鍵
depot varchar 30 否 糧庫名
warehouse int 11 否 糧倉號
dev place id int 11 否 監測位置號
manual image varchar 100 否 圖片存儲路徑
so num int 11 是 米象數量
sz num int 11 是 玉米象數量
rd num int 11 是 谷蠹數量
cp num int 11 是 長角扁谷盜數量
ctjnum int 11 是 土耳其扁谷盜數量
cf^num int 11 是 銹赤扁谷盜數量
tch num int 11 是 赤擬谷盜數量
tc num int 11 是 雜擬谷盜數量
os num int 11 是 鋸谷盜數量
zs num int 11 否 蛀蝕性害蟲總數
fs num int 11 否 粉食性害蟲總數
time datetime 6 否 釆集時間
temperature float 8 是 糧堆溫度
humidity float 8 是 糧堆濕度
4.采集終端程序更新表設計
用戶在信息管理系統上傳的采集終端程序會保存在文件系統,與程序相關的 字段信息保存在采集終端程序更新表oitd_codeupdate,如表3-9所示,通過 file_path字段能夠在文件系統查找到程序文件位置。
表3?9釆集終端程序更新表(oitd_codeupdate)
字段名 字勢型 字段長度 可否為空 字段描述
id int 11 否 自增主鍵
depot name varchar 10 否 糧庫名
depot code int 11 否 糧庫代號
id warehouse int 11 否 糧倉號
devoid int 11 否 設備號
file path varchar 100 否 程序文件路徑
5•儲糧害蟲信息表設計
儲糧害蟲信息表設計如表3-10所示,該表是APP端的糧蟲圖鑒模塊的數據 基礎。APP本地的SQLite數據庫存在一個與服務器的oitd_pestinfb表相同的數 據表,APP可以從服務器請求數據并更新本地的數據表,從而更新糧蟲圖鑒模塊 數據的展示。oitd_pestinfo表中的feature字段按照昆蟲形態學描述害蟲的形態特 征,包括成蟲體長、體色、頭胸腹體態特征等;habit字段描述害蟲的生長過程、 生長環境等生活習性;damage字段描述害蟲危害的糧食種類;distribution字段
描述害蟲按照國家、地區描述的環境分布;pictureurl字段描述害蟲高清圖片在系 統中的存儲位置。
表3-10儲糧害蟲信息表(oitd_pestinfo)
字段名 字段類型 字段長度 可否為空 字段描述
id int 11 否 害蟲id,自增主鍵
name varchar 10 否 害蟲名稱
family varchar 10 否 害蟲科目
category varchar 10 否 害蟲分類
feature varchar 200 否 害蟲形態特征
habit varchar 200 否 害蟲生活習性
damage varchar 200 否 害蟲主要危害
distribution varchar 100 否 害蟲的環境分布情況
prevetion varchar 200 否 害蟲的防治措施
pictureurl varchar 100 否 害蟲圖片存儲路徑
importance int 11 否 害蟲危害程度等級
3.5.2儲糧害蟲數據采集設計
服務器后臺使用Python開發網絡服務,為數傳終端提供訪問接口。把為數 傳終端提供服務的URL配置在Django路由表中,當請求到來時Django可根據 路由調用相應的handler來解析請求和處理數據。數傳終端與云服務器的通信流 程如圖3-12所示:
圖3-12數傳終端與云服務器通信流程
數傳終端收到來自服務器的啟動采集命令,啟動成功后將通過crontab啟動 定時輪詢的數據采集服務,向糧倉內部署的采集終端發送請求。OITD-PI采集到 的儲糧害蟲數據為紅外光電序列,OITD-C采集到的數據為用來生成圖像的RGB 序列,這些數據都會暫存至采集終端本地存儲。當采集終端收到來自數傳終端的 輪詢指令后會把數據向上發送,數傳終端將收到的數據序列化后通過HTTP POST請求向服務器發送。
服務器數據采集接口監聽到來自數傳終端的請求后,會將HTTP請求body 中的數據反序列化,解析出紅外波和RGB數據。根據紅外波形識別出害蟲種類, 并將原始數據保存至文件系統。使用圖像生成模塊將RGB數據轉換為BMP格 式圖片保存,然后調用圖像識別算法識別圖片中害蟲。把從紅外波形和圖片中識 別出的結果與其他相關字段存入oitd_rawdata數據表。
3.5.3蟲情分析報警設計
蟲情分析報警包括蟲情可視化分析和蟲情報警模型兩部分。
1.蟲情可視化分析
使用可視化的方法分析儲糧害蟲數據,能夠更直觀地展現糧倉內的害蟲的發 生情況。數據分析的工具選用Numpy、Pandas> Scipy> Matplotlib等Python的數 據處理庫。通過ORM從數據庫查詢儲糧害蟲數據,使用Numy與Pandas把數 據轉化為易于計算的矩陣,并對數據進行清洗。然后使用Scipy中封裝的科學計 算包對數據進行插值運算,得到易于可視化的數據。通過Matplotlib把處理過的 數據繪制為可視化圖表,采用PyH把生成的圖表和數據嵌入用于生成蟲情分析 報告的HTML模板,最后使用smtplib庫基于SMTP協議,把蟲情可視化分析報 告以郵件的方式發送給糧庫用戶。
2.蟲情報警模型
基于糧油儲藏技術規范設計蟲情報警模型,模型開發完成后,將其嵌入服務 器后臺。蟲情報警模型的運行流程如圖3-13所示。蟲情報警功能可由用戶手動 開啟和關閉,當報警開啟時,用戶可以在Web和APP中手動修改模型的報警參 數。使用django-crontab定時模塊在服務器負載較小的凌晨定時運行報警模型, 從數據庫查詢各個糧庫的蟲情監測數據,執行數據處理任務,根據報警模型依次 計算當前蟲情等級。若判定當前有蟲情發生,服務器將蟲情發生時間、等級、模 型計算結果等數據存儲至數據庫,然后在Web系統和手機APP向用戶推送報警 消息。
圖3-13蟲情報警流程圖
3.6本章小結
本章首先分析Web端、移動端與服務器端的軟件功能需求,根據需求分析 設計平臺網絡架構與軟件架構。然后確立了 Web端與手機端軟件開發的技術路 線,使用流程圖、時序圖、UML圖設計軟件功能模塊。最后在云服務器端搭建 數據庫,設計數據庫表結構與儲糧害蟲數據采集存儲方案,并設計了蟲情可視化 分析方案與蟲情報警工作流程。
第四章儲糧害蟲智能監測信息管理平臺實現
本章將在平臺整體與模塊設計的基礎上,分別對儲糧害蟲信息管理系統、儲 糧害蟲監測APP、服務器后臺進行開發和實現,完成儲糧害蟲智能監測信息管理 平臺的搭建。
4.1項目整體規劃
儲糧害蟲智能監測信息管理平臺以前后端分離的模式,基于Django REST framework框架開發,使用GitHub的個人私有倉庫管理工程代碼,工程目錄結構 如圖4-1所示。
I~~n sects
I I settings.py
I I urls.py
I I wsgi.py
I I _Jnit_.py
I― itd
I I admin.py
I I adminx.py
I I apps.py
I I models.py
I I views.py
I I _init_.py
I I—pb
I I I MESSAGE OITD.proto
I I I MESSAGE^OITD_pb2.py
I I I pbBuilder.py
I k-ALGO
I— itdm
I—media
I—log
I—raspberrypi
I—static
I—xadmin
I—manage.py
I—requirements.py
圖4-1工程目錄結構
使用 django-admin startproject insects 命令創建名為 insects 的工程項目,insects 目錄下的settings.py為全局配置文件,配置數據庫的連接、時區、系統語言、 STATIC_URL與MEDIA_URL等。urls.py為一級路由配置文件,把服務器提供 訪問的所有URL添加其中。wsgi.py是服務器部署時uWSGI的配置文件,用于 配置服務器的網關接口。
Django以app的形式管理后臺功能模塊,使用python manage.py startapp oitd 命令生成針對oitd設備的功能開發目錄,其中models.py是使數據庫抽象化的數 據模型層文件,可以用來生成數據庫表。views.py為Web端和APP提供RESTful API服務,后臺的主要邏輯處理任務在此文件中實現oadminx.py用來配置django- xadmin, django-xadmin是Django自帶admin的升級版,可以定制化生成數據管 理界面。
pb是定義和編譯Protobuf文件的目錄,提供Protobuf序列化和反序列化的 調用接口。ALGO是儲糧害蟲智能識別算法目錄,包含紅外數據識別、圖像識別 等算法,提供算法調用接口。
oitd_m是移動端的工程開發目錄,負責管理Android APP的工程代碼。
media是系統文件存儲目錄,負責存儲用戶上傳的圖片、設備上傳的儲糧害 蟲原始數據、采集終端程序文件等數據。:log目錄負責存放系統日志文件,方便 代碼調試和問題排查。raspbenyji為數傳終端開發目錄,在本地開發過程中模 擬真實設備的數據上傳請求,與服務器后臺數據采集接口測試聯調。static目錄 存放靜態文件,使用pythonmanage.py collectstatic命令把HTML、CSS、圖片等 靜態文件收集到此目錄,可以加快前端頁面的響應速度。
manage.py是一種Django提供的命令行工具,允許以多種方式與所建立的 Django項目進行交互。requirements.txt文件保存的是Python項目的依賴庫,用 于生成項目運行環境。
4.2 Web端儲糧害蟲信息管理系統實現
4.2.1用戶登錄
儲糧害蟲信息管理系統主要用戶群體為各地糧庫的保管員,人員身份與數量 相對固定,因此系統采用注冊審核制,用戶注冊后需要由管理員審核通過,并在 后臺為用戶分配相應的訪問權限,之后用戶進入系統完善個人信息后才能使用系 統服務。
系統登錄界面如圖4-2所示。
請登錄
圖4-2用戶登錄界面
用戶若忘記密碼或密碼遺失,點擊登錄界面下方藍色提示即可進入圖4-3的 密碼重設頁面。用戶填入個人郵箱,系統會將用戶名及隨機生成的密碼發送給用 戶,用戶根據郵箱中提供的信息即可再次登錄,登陸成功后需要重新設置個人密 碼。
密碼重
圖4-3密碼重設與重設成功頁面
用戶登錄后的每次訪問,服務器都需要進行安全驗證。初次登陸時,服務端 以JWT的方式生成Token,把Token以user_id:Token的形式存儲在Redis緩存 系統中,設置有效期為1800秒,然后將Token返回給前端。前端每次請求時需要 在HTTP的header中攜帶Token進行訪問,服務端驗證Token通過且在過期時 間之內,則開始解析HttpRequest請求.
4.2.2權限分配
系統后臺開發中使用了 django-xadmin插件,以用戶、用戶組的方式,實現 在可視化方式下對用戶權限的配置。管理員可先按照區域、糧庫等劃分方式設置 用戶組權限,然后把用戶分配到相應的用戶組。當用戶處于某用戶組中時,可擁 有該用戶組的所有權限。
己洗換用戸權陽
SB設養安茨隼皀
+榕渋.人二#枉信息踰入
醪人三丟衽老倉逋入
臺看人二壬住匱自E+
-査晉設備三8據S
直晉號戶小短件
卿總全皚
圖4-4用戶權限配置頁面
系統管理員在用戶信息列表可查看所有用戶的詳細信息。點擊某個用戶,即 可進入該用戶的信息修改與權限配置頁面。如圖4-4為用戶權限的配置頁面。點 擊“組”右側加號標志,可以直接設置新的組權限。選中用戶權限選擇欄中的某 個權限,點擊右側的加號可將權限導入右側已選欄,編輯完成確定即可完成對用 戶權限的靈活配置。
4.2.3數據管理
用戶登錄系統后,進入圖4-5所示的儲糧害蟲信息管理系統首頁。頁面左側 為系統功能導航欄,圖中呈現的為導航欄展開后的所有功能選項。頁面右側區域 中展現的是當前用戶所管轄的糧倉三維模型,模型中球狀物體代表的是押插到糧 堆內的儲糧害蟲信息采集終端,糧庫中采集終端的部署位置與圖中相對應。點擊 圖中任意一個采集終端,頁面彈出該終端設備的編號、型號、狀態、運行時長、 監測位置等信息。
圖4-5系統首頁
圖4-6儲糧害蟲數據管理頁面
圖4-6所示為采集終端采集到的儲糧害蟲數據列表,系統管理員能看到所有
從所有糧庫采集到的儲糧害蟲數據,糧庫保管員則只能看到其所負責的糧倉的害 蟲數據。列表中每一行記錄代表采集到的一頭儲糧害蟲,記錄中包括糧庫號、倉 庫號、設備號、采集時間、蟲子種類、原始數據保存路徑等字段信息。可以對每 個字段進行范圍篩選,查看指定范圍的數據。列表中的數據都可以導出,方便數 據的共享利用。系統提供了 Execk XML、CSV、JSON四種導出格式,分別基于 Python 的 xlwt 庫、xml、csv 庫、json 庫實現。
4.2.4設備在線升級
根據本文圖3-7的設備在線升級流程,實現OITD-PI與OITD-C的在線升級 功能,使用戶只需在Web界面進行簡單的操作,即可更新采集終端的程序代碼。
用戶在圖4-7所示的采集終端程序上傳頁面,填寫糧庫名、糧庫號、設備所 在倉庫號、設備編號,然后選擇對應終端設備的程序文件并上傳,服務器收到請 求后會將相應設備信息保存至code_update表,程序文件保存到文件系統。上傳 到服務器的程序信息列表如圖4-8所示。數傳終端會定時發送設備更新請求,當 服務器檢測到有新的程序需要更新到采集終端時,會使用zipfile模塊將程序文 件打包為zip格式文件,使用FileResponse將文件返回給數傳終端。數傳終端解 析出response中zip文件,解壓后根據編號發送至對應采集終端,采集終端將自 行完成代碼的更新替換。
糧創 test
糧眸代號” 1
所在倉虞號. 02
圖4-7采集終端程序上傳頁面
圖4?8采集終端的程序信息列表
4.2.5人攻集數據上傳
人工采集的儲糧害蟲數據上傳界面如圖4-9所示,其中采集時間、采集位置、 蛀蝕性害蟲數量、粉食性害蟲數量、害蟲圖片為必填字段,害蟲細分種類的字段 為選填字段。用戶點擊上傳,前端向服務端發送POST請求,服務器將解析夠的 數據存入oitd_manual數據表。系統除了支持用戶每次單條數據的上傳外,還支 持用戶通過Excel表進行多條數據的導入。用戶上傳Excel表后,服務器后臺使 用xlwt讀取Excel中的數據并將其存入oitd manual表。將人工采集的數據與設 備采集的數據作對比分析,一方面可驗證設備采集的性能,另一方面還可以探究 設備采集數量與人工篩蟲數量之間的相關性。
在Django中為了避免CSRF攻擊,前端頁面在提交Form表單時發送AJAX 請求,需要在請求中攜帶csrf-token,服務器驗證通過才會進行數據的解析和存 儲。
圖4-9人工采集數據上傳頁面
4.2.6蟲情可視化
蟲情可視化的工具選用Echarts, Echarts是一個使用JavaScript實現的開源 可視化庫,涵蓋各行業圖表,可以流程運行在PC和移動端設備上,兼容大部分 瀏覽器。
蟲情可視化的統計數據來源為oitd_rawdata數據表,使用filter篩選出 prejnfo字段不為空的記錄,每一條記錄即對應一頭設備采集到的害蟲,根據 warehouse_id^ time、devjplace_id字段可以實現按照時間和監測位置等多種維度 統計害蟲發生情況。
如圖4-10為按天統計整倉害蟲數量的折線圖,其中橫軸為日期,縱軸害蟲
數量,三條折線分別代表害蟲總量、粉食性害蟲數量、蛀蝕性害蟲數量。用戶從 圖中能觀察到倉內害蟲每日的數量變化,由于蛀蝕性害蟲危害較大,因此用戶點 擊蛀蝕性害蟲的折線后,可僅顯示蛀蝕性害蟲變化趨勢,增強顯示效果。
圖4-10按天統計整倉害蟲數量變化
系統提供每個采集終端監測到的害蟲數量可視化圖表。用戶點擊圖4-11中 所示的監測位置編號,可查看當前監測位置的蟲情數據,圖中為1號設備監測點 采集到的儲糧害蟲數量變化趨勢。
圖4-11按監測位置統計儲糧害蟲數量變化趨勢頁面
圖4-12和4-13是按周統計整倉害蟲數量的可視化圖表,用于展現較長時間 范圍的蟲情變化。圖4-12為按周統計整倉害蟲數量的折線圖,三條曲線分別為 糧倉內每周采集到的害蟲總數量、蛀蝕性害蟲數量、粉食性害蟲數量,用于展示 害蟲數量的變化趨勢。圖4-13則是以堆積柱狀圖來展現每周蛀蝕性與粉食性害 蟲的數量占比。點擊圖表下方的圖例可以指定顯示的折線或柱狀圖,使顯示方式 更為靈活。
201^103 10: 9141? 20x9Ui>? 20191215 20191229 2Q2C&V2 2Q2OC12& 20208209 202G0223 2320G3G3
錚蛭軽雲蟲魏覆« Orfe晝•巒蟲總數
圖4?12按周統計整倉害蟲數量折線圖
圖4?13按周統計整倉糧害蟲數量柱狀圖
谷惡:1 7.S
圖4?14儲糧害蟲種類占比環形圖
圖4-14呈現的倉內儲糧害蟲的種類占比。左側環形圖表示的是米象、玉米 象、谷蠹等害蟲的細分種類占比,右側環形圖展現的則是蛀蝕性害蟲與粉食性害 蟲的占比,從環形圖中能得知倉內各類害蟲的發生情況。
圖4-15以多列柱狀圖的方式展現某個時間段內,倉內每個采集終端采集到 的儲糧害蟲數量。藍色柱表示粉食性害蟲數量,紅色柱表示蛀蝕性害蟲數量,橫 軸為采集終端的設備號。觀察此圖,通過比較不同采集終端監測點的儲糧害蟲數 量,能夠發現糧堆蟲害較為嚴重的區域。
4.3移動端儲糧害蟲監測APP實現
本機介紹APP中蟲情查看、數據上傳、糧蟲圖鑒與蟲情報警四個核心模塊 的實現效果及相關技術細節。
43.1蟲情查看
蟲情查看模塊是糧庫保管員實時獲取糧倉內儲糧害蟲發生情況的重要渠道。 圖牛16為蟲情査看相關頁面。圖(a)為首頁界面,展示當前用戶所管理糧倉的 三維模型,長方體表示糧倉類型為高大平房倉。帶有編號的綠色柱狀模型表示 OITD設備,模型中OITD的分布與在糧倉中的實際分布一致。三維模型可以放 大、縮小、旋轉,圖(b)為放大后的效果,點擊圖中采集終端標志,頁面彈出 當前設備的id、類型、安裝時間等詳細信息。圖(c)為糧倉蟲情查看頁面,用 戶選擇要查看的糧倉,篩選監測起始時間與統計周期,界面展示糧倉內害蟲總數、 蛀蝕性害蟲數量、粉食性害蟲數量的變化曲線。
糧倉三維模型的繪制使用OpenGL ES繪制,OpenGL ES是針對Android平 臺的高性能3D渲染API。繪制三維模型時,首先設置觀察位置與相機位置,根 據糧倉實際的長、寬、高,按比例使用頂點法繪制出半透明糧庫模型。然后查詢 數據庫,根據oitd_deviceinfo表中的dev_x, dev_y, dev_z確定設備位置,將繪 制好的OITD模型加載到三維立方體中。
蟲情變化折線圖的繪制使用Hellochart的LineChartView,首先需要在xml中 添加 lecho.lib.hellocharts.view.LineChartView 控件,設置表屬性。然后從 Android
SQLite數據庫查詢蟲情數據,根據時間與周期進行篩選,加載到LineChartView
顯亦o
起始時間
4.3.2糧蟲圖鑒
糧蟲圖鑒模塊為糧庫保管員提供了一個電子化的儲糧害蟲知識學習平臺。圖 4-17所示為糧蟲圖鑒相關頁面。圖(a)為儲糧害蟲信息列表頁,包含甲蟲類、 媾類、蛾類三大類146種常見儲糧害蟲,其中甲蟲類101種、蛾類12種、嫡類 33種。頁面上方為搜索框,輸入害蟲名,搜索結果如圖(b)所示。點擊圖(a) 或圖(b)中的害蟲條目,界面彈出圖(c)所示的害蟲高清大圖與詳細信息。
儲糧害蟲的電子化信息存儲在手機本地,文本信息錄入Android本地的 SQLite數據庫,圖片存儲至工程項目的assets文件夾,因此用戶在未聯網情況下 也能查看害蟲圖片和文本信息。糧蟲圖鑒模塊運行時,使用GreenDao框架從數 據庫加載害蟲文本信息,使用Glide框架根據pictureurl路徑加載害蟲圖片。
4.3.3數據上傳
數據上傳模塊使糧庫保管員可以把人工采集的儲糧害蟲數據上傳到服務保 存。APP端人工采樣數據的上傳界面如圖4-24所示。圖(a)為數據上傳主界面, 可上傳的信息包括糧倉號、設備號、采集時間,害蟲圖片、各類害蟲數量、糧堆 溫度、糧堆濕度,圖(b)為害蟲種類選擇與數量錄入界面,圖(c)為時間選擇 界面。
(a)城上傳 (b)選腳^0^3 (C)舞時間
4-18人工采樣數扌居上傳界面
使用第三方插件PictureSelector作為圖片選擇器,PictureSelector支持拍攝照 片、選擇相冊圖片、圖片預覽和圖片裁剪等功能。點擊圖4-18 (a)中間的“ + ” 時,PictureSelector啟動一個Activity,可以選擇拍攝照片,也可以在相冊中選取 圖片。訪問手機相冊與調用系統相機需要READ_EXTERNAL_STORAGE、 WRITE_EXTERNAL_STORAGE 和 CAMERA 三個權限,屬于 Android 動態權限 機制(Runtime Permissions)中的危險權限(Dangerous Permission),涉及用戶隱 私,因此需要在用戶授權下才能開啟。
4.3.4蟲情報警
蟲情報警模塊使糧庫保管員可以及時接收到蟲情報警信息,糧庫保管員也能 根據實際糧情設置蟲情報警模型的參數。圖4-19為蟲情報警相關界面,在圖(a) 中用戶可以手動開啟和關閉報警功能。服務器后臺使用默認的報警模型計算蟲情 等級,模型的參數可由用戶手動更改。在圖(b)界面中把相關參數填入數據表, 把數據發送到服務器,即可實現模型參數的手動設置。圖(c)為蟲情報警消息 列表,服務器向用戶推送害蟲監測信息和報警信息顯示在列表中,方便用戶及時 查看。報警信息的推送使用PUSH的方式,可以減少手機網絡流量、系統電量等 資源的消耗。
< 21幣很饕
抿鑒功能 '32號侖,翅俶壬情 昨頭.挙近三 茨共霍鑒釗奄蟲3;妖.誘關注’
g 5- '
、、' 3:號侖一豔蟲衞..E號設閔£送一嗟監錢到霍蟲
20頭.吾近at關注.
蟲怡零級
統計方式
每臼總數(頭) 13
三日總數Gt) 25
三日増長睪(檢) 6
一周總數(頭) 50
—周増長卑(強) 5
.提交
4.4服務器后臺實現
服務器后臺開發包括儲糧害蟲數據采集、Rest服務、蟲情分析報警三個模塊o 儲糧害蟲數據釆集模塊,實現了跨全國范圍的儲糧害蟲數據的統一采集和存儲, Rest服務模塊主要為Web和APP提供RESTful數據接口服務,蟲情分析報警為 糧庫提供蟲情的可視化分析與分級報警服務。
4.4.1儲糧害蟲數據采集
采集終端采集到紅外波形序列和RBG序列每條最大為512Bytes»根據設計 需求,每個數傳終端最多可支持100個采集終端的接入。因此數傳終端每次輪詢 后收到的數據最多為50KB。隨著OITD設備在各地糧庫安裝數量的增加,儲糧 害蟲數據的上傳與下載量也將成倍地增長。儲糧害蟲數據上傳時使用的是云服務 器的下行帶寬,云服務器的下行帶寬為100M,可以完全滿足一千個以上數傳終 端的接入。
message Record { #請求數據包定義
enum DataType { # 數據類型
INFRARED = 0; #紅外波形
IMAGE = 1;# 圖片
VIDEO = 2;# 齣
}
required string address = 1; #
required uint32 id warehouse = 2; # 糧倉號
required uint32 id dev = 3; # 設備號
required bool status = 4 [default = true]; # 設備狀態
required string time = 5; # 采集時間
required DataType data_type = 6; # 割酸型 T:圖片 P:紅外波形 V:視頻
optional bytes data raw = 7; # 原始數據
optional string prediction = 8; # 害蟲種類0:RD 1:SO 2:SZ 3:CP 4:CT 5:CF 6:OS 7:TCH 8:TC
optional float env_T = 9; # 糧堆溫度
optional float env_RH = 10; # 糧堆濕度
} "
message DATA {# Record數組
repeated Record records = 1;
)
圖4-20 Protobuf數據格式定義
數傳終端從采集終端收到的每條數據的字段信息包括糧庫號、倉庫號、設備 號、設備狀態、采集時間、數據類型、糧堆溫度與糧堆濕度,這些字段與紅外波 形和RGB序列組合成一條結構化數據。數傳終端把所有來自采集終端的數據組 合成一個結構化數組,序列化后向服務端發送。選擇Protobuf作為數據序列化與
反序列化方案,可以明顯壓縮數據大小,減少帶寬占用,縮短數據在網絡傳輸上 消耗的時間。
圖4-3為MESSAGE.proto文件中對儲糧害蟲主要數據字段的定義,其中 data_raw字段表示原始的紅外數據和RGB序列,data_type字段表示data_raw的 數據類型。address> id_warehouse> id_dev、status> time 分別表示糧庫、倉庫號、 設備號、設備狀態、采集時間,這些是發送數據時不能為空的字段。
使用protoc編譯工具編譯上述MESSAGE.proto文件,生成可以讀取和寫入 儲糧害蟲數據的MESSAGE_OITD_pb2文件。在MESSAGE_OITD_pb2中定義 DATA類的序列化與反序列化接口,依賴DATA類實現pbBuilder類,其UML圖 如圖4-21所示。
pbBuilder
-DATA
+from_pb_to_data(self, pb_data_string):「ecords +add_data_to_pb(self, ad dr, warehouse, dev, s, DType, t.
data, pre_info=,,dummy',1 env=(0, 0)):DATA
+serialize():DATA.SerializeToString()
圖4-21序列化與反序列化UML圖
pbBuilder類中add_data_to_pb()方法將所要傳輸的數據定義為Protobuf格式, 使用SerializeToStringO方法實現序列化。在fi*om_pb_to_data()中調用DATA的
ParseFromString()方法,可以實現儲糧害蟲數據的反序列化。
數據從數傳終端到達服務器后,服務器按照圖4-22所示流程對數據進行處 理。服務器開啟后將監聽Django服務端口,當監聽到有請求到來時,Django分 析HTTP請求的路由,從路由配置表中搜尋與請求相匹配的路由。若未搜尋到, 則返回404錯誤,說明數傳終端請求的URL錯誤。若請求路由正確,則將請求 分配至與之對應的視圖層handler處理。從HTTP Request的body中取出圭寸裝為 數組的儲糧害蟲數據,使用from_pb_to_data()方法進行反序列化解析,遍歷數組 中的每一條數據。如果status字段為0,說明本條數據對應的設備出現了故障, 把本條信息存入數據庫的同時更新設備信息表的設備狀態字段。若status字段 為1,則判斷raw_data字段是否為空。由于每次數傳終端輪詢后,無論采集終端 是否采集到害蟲,都會向上發送規定的字段信息,因此raw_data字段會出現空的 情況。若raw_data字段為空,則存儲其他字段即可。若raw_data字段不為空, 則根據datatype判斷數據的類型。如果為紅外序列,則將數據保存為Numpy文 件,如果為RGB序列,則調用圖像生成模型將數據生成BMP圖片,文件保存在 "/address/id_warehouse"的相對路徑中,文件名按照"設備號—時間_序號—數據 類型”的格式命名。然后調用儲糧害蟲識別模型,將害蟲種類從紅外波形和圖片 中識別出來,把識別結果與其他字段存入oitd_rawdata表。
儲糧害蟲智能監測信息管理平臺也兼容糧庫中其他類型信息采集設備的接 入,服務器與設備之間只要按照MESSAGE.proto定義數據格式,就能實現儲糧 害蟲數據的云端存儲。
4.4.2Rest月艮務
服務器后臺為Web和APP提供的RESTful數據接口配置在url.py文件中, 通過URL與handler的映射,調用views.py中的業務邏輯處理用戶請求。表4-1 列出了后臺的主要接口及其功能,按照對象類型,對服務器的RESTfbl數據接口 進行了劃分。表中“丁”表示服務器后臺是否對Web和APP可用,Web端的用 戶為系統管理員與糧庫保管員,功能上側重于管理,所需接口更為豐富。APP用 戶為糧庫保管員,側重于監測,所需接口較少,可與Web端共用一套接口。接口 的復用可以提高代碼的復用性與可維護性,后期功能擴展也更為便捷。
表4-1服務器端RESTful數據接口
對象類型 接口名 功能 Web APP
用戶 user/list 獲取用戶信息列表 V
user/detail 查看用戶詳細信息 V J
user/add 增加用戶 丨V :
user/edit 編輯用戶信息 V
user/delete 刪除用戶
depot/list 分頁獲取糧庫信息列表 \ 7
糧庫 depot/detail 查看糧庫詳細信息 j V V
depot/add 新增糧庫信息
depot./edit 編輯糧庫信息 [V
depot/delete 刪除糧庫信息 $
\ V
warehouse/list 分頁獲取糧倉信息列表 /
「糧倉 warehouse/detail 查看糧倉詳細信息 :V
warehouse/add 增加糧倉信息 丨V
warehouse/edit 編輯糧倉信息 ! v
i warehouse/delete 刪除糧倉信息 ' V
device/list 分頁獲取設備信息列表 1 V
! device/detail 查看設備詳細信息 1 V V
$ device/add 新增設備信息 V
[設備 device/edit 編輯設備信息 1 V
! device/delete 刪除設備信息 i
V
device/code/upload 上傳OITD程序文件
i device/code/list 分頁獲取OITD程序列表 V
device/code/delete 刪除01TD程序
oitd/list 分頁獲取oitd采集的數據列表 V V
oitd/detail 查看儲糧害蟲數據詳細信息 V V
儲糧害蟲 oitd/edit 編輯儲糧害蟲數據 )V
:數據 oitd/delete 刪除儲糧害蟲數據
j oitd/download 下載儲糧害蟲數據 V j
manual/upload 上傳單條儲糧害蟲數據
manual/uploads 上傳儲糧害蟲數據Excel文件 V
warning/switch 開啟關閉報警功能 V V
:蟲情報警 warning/detail 查看報警模型參數 V
waring/edit 修改報警模型參數 V
4.4.3蟲情可視化分析
OITD-PI與OITD-C作為采集終端可以在糧堆中靈活分布,但其插入糧堆部 署完成后對用戶是不可見的,尤其當采集終端部署的數量與位置較多時,會帶來 管理上的困難,使用三維模型圖可解決這一問題。
數據庫設備信息表oitd_deviceinfo中的dev_x、dev_y> dev_z字段為采集終 端的位置坐標。以東西向為長邊的高大平房倉為例,糧面的東北角頂點設為坐標 原點,糧倉由東向西的長邊為X軸,由北向南的寬邊為Y軸,糧堆深度為Z軸, 坐標示意圖如圖4-23所示。由dev_x與dev_y可以確定采集終端在其監測平面 的位置,dev_z為采集終端插入糧堆的深度,因此由dev_x、dev_y、dev_z可以 唯一確定采集終端在糧堆中的位置。
Y (糧倉寬)
dev_y...
0 >
\ : X (糧倉長)
'、I
、 I
'、: dev_z 二
Z (糧堆深度)'
4-23采集終端坐標示意圖
連接儲糧害蟲數據庫,設計SQL査詢語句,限定糧庫和糧倉號,從 oitd_warehouse 表獲取 1 ength、width 與 depth 字段,從 oitd_deviceinfo 表獲取糧 倉內所有采集終端的dev_x、dev_y、dev_z字段,使用Numpy把査詢出來的坐 標轉化為ndarray數組,然后調用Matplotlib Axes3D模塊中的scatter3D方法繪 制采集終端部署三維圖,配置圖像風格與顯示效果,結果如圖4-24所示。
三維圖按照真實糧倉大小等比例繪制,圖中采集終端的分布位置與在實際糧 倉中一致。三維圖橫軸表示糧倉的長,縱軸表示糧倉的寬,豎軸表示糧堆深度。 由圖可知,此高大平房倉長50米,寬25米,糧堆深6米。采集終端在糧堆中分 上、中、下3層部署,如圖中藍色、紅色、綠色標志所示,部署深度依次為1米、 3米、5米。當倉中采集終端位置變動,更新數據庫后,系統后臺也將實時更新 三維圖,根據采集終端新的位置坐標重新繪制。
圖4-24采集終端部署三維圖
圖4-25糧堆上層各監測點儲糧害蟲數量三維柱狀圖
圖4-26糧堆中層各監測點儲糧害蟲數量三維柱狀圖
圖4-27糧堆下層各監測點儲糧害蟲數量三維柱狀圖
研究表明,儲糧害蟲在糧堆不同深度的分布密度是不相同的m】。因此根據采 集終端的分布層次,按照糧堆上層、中層、下層三個層次進行統計。確定日期后, 從儲糧害蟲數據表oitd_rawdata查詢某一天每個采集終端采集到的害蟲總數,使 用MatplotlibAxes3D的bar3d方法繪制三維柱狀圖。如圖4-25、4-26、4-27分別 為糧堆上層、中層、下層各監測位置的儲糧害蟲數量三維柱狀圖。以圖4-25為 例,圖中藍色柱體底部坐標與圖4-24對應,表示采集終端在糧堆上層部署平面 的位置,柱體高度表示每臺采集終端每天監測到的儲糧害蟲數量,柱體越高表示 此區域的害蟲數量越多。觀察三維柱狀圖,糧庫保管員能直觀看到糧堆每層各個 位置的害蟲數量。
使用Numpy將各監測點的儲糧害蟲數量作進一步處理。
= nij (4-1)
並,旳為采集終端在糧堆監測平面的坐標,兔j為釆集終端每天采集到的儲糧 害蟲數量。
•^11 "12 …«15'
N = (%)3*5 = n21 n22 …n25 (4-2)
Ln31 n32 "■九35-
N為由n”組成的二維矩陣。
使用matplotlib的contourf方法能通過矩陣N繪制等值線圖,但由于矩陣中 的值較少,等值線會出現明顯的突刺,視覺效果較差,因此需要對二維矩陣進行 插值,以使等值線平滑過渡,本文選用的插值算法為樣條插值國]。
Scipy庫的interpolate.interp2d方法封裝了二維樣條插值算法,可調用的包括 linear (線性插值)、cubic (三次樣條插值)、quintic (五次樣條插值)三種方法, 本文選用三次樣條插值,即以分段插值的方式,把兩個相鄰的設為一個分段區 間,在分段區間中確定一個三次函數。每個分段區間中三次函數的二階導連續, 保證了函數在區間端點處的連續性,從而可以使等值線平滑過渡。插值前需要將 矩陣擴展,以滿足二維三次樣條插值對矩陣行列要求大于3的條件。插值完成 后,使用matplotlib繪制新生成的矩陣,得到圖4-28所示的蟲情熱度圖。
圖(a)、(b)、(c)為糧堆上層監測平面在不同時間的蟲情熱度圖,其觀察角 度為俯視視角。圖中橫縱坐標軸對應糧倉長與寬,色塊顏色越深代表害蟲數量越 多,具體數值對應于右側色軸。從蟲情熱度圖能夠發現糧堆中的蟲害發生位置及 危害程度,還能通過對比同一糧倉不同時間的蟲情熱度圖,發現害蟲的發展趨勢、 擴散方向等。糧庫根據蟲情熱度圖,還可以檢測使用熏蒸、氣調等方式殺蟲后的 殺蟲效果。
基于以上的蟲情可視化分析方法,使用PyH針對各地糧庫生成蟲情可視化 分析報告,把報告嵌入郵件使用smtplib自動向糧庫發送,實現步驟如下。
Stepl: imporot PyH模塊,頭例化page對象,格式化HTML標簽,生成蟲 情可視化分析的HTML模板。
Step2:使用ORMfHter查詢蟲情數據,生成三維圖和熱度圖,把數據和圖片 插入HTML模板。
Step3: import smtplib 模塊,實例化 smtpObj 對象,配置 senderreceivers 等 參數,MIMEText中插入HTML模板文本。
Step4:使用django-crontab配置定時任務,執行可視化分析腳本 insects_visualization.py,以郵件形式向糧庫發送蟲情可視化分析報告。
Step5:迭代開發,根據糧庫反饋定制化修改腳本,完善蟲情可視化分析方法, 更新PyH模板。
(a)
4.4.4蟲情報警模型
表4-2為國家糧油儲藏技術規范中定義的蟲糧等級劃分[殉,害蟲密度的測算 使用人工抒樣與篩檢方法。表4-3是探管誘捕器采集與人工篩檢的害蟲密度對照 關系,OITD-PI與OITD-C屬于探管誘捕器,因此本文參照表4-5與表4-6設計 蟲情報警模型的參數。
表4-2蟲糧等級劃分及等級指標
糧食種類 蟲糧等級 害蟲密度/(頭/kg) 主要害蟲密度/(頭/kg)
基本無蟲糧 W5 W2
原糧 一般蟲糧 6?30 3?10
嚴重蟲糧 30 >10
表4-3探管誘捕器原糧糧堆誘捕害蟲密度與篩檢害蟲密度的參照關系
篩檢/ (頭/kg) 誘捕/(頭治•天)
W5
W30 W20
>30 >20
蟲情報警模型從單個采集終端和糧倉所有釆集終端兩個維度統計儲糧害蟲 數量,把蟲情等級劃分為輕微、一般、嚴重三個等級。
如糧倉內部署有m臺采集終端,每臺第i天監測到的害蟲總數量為q。按照 單個釆集終端統計時需要計算的參數如下所示。
dn表示最近一天采集終端監測到的害蟲總數。
tn = Ei-2 ci
俎表示最近三日采集終端監測到的害蟲總數。
ta =玖專?跆 % 100%
4表示最近三日害蟲總頭數相比之前三日的增長率。
=Ei-6Ci
%表示最近一周監測到的害蟲總頭數。
=•叱呼二3。X 100%
2(-13 Ci
Wa表示最近一周監測到的害蟲總數相比前一周的增長率。
表4-4蟲情報警閾值(按單個采集終端統計)
蟲情等級L ta Wn Wa
輕微 2 5 3 10 2
一般 5 12 6 20 5
嚴重 9 20 8 40 12
如表4-7為按照單個采集終端統計的蟲情報警閾值表,表中為各個蟲情等級 的報警下限,所有值均為模型預設值,用戶可根據糧庫糧情,在儲糧害蟲信息管 理系統和儲糧害蟲監測APP中自行設置每個參數值大小o以日數量的計算為例, 依次計算最近一天倉內每個設備監測到的害蟲數量,當少于2頭時,判定當前為 正常情況;當大于2頭小于5頭時,判定當前為輕微蟲情;當大于5頭小于9頭 時,判定當前為一般蟲情;當大于9頭時,判定當前為嚴重蟲情。其他參數與上 述日數量的計算方法相同,依次計算表中各個參數,任一參數的計算結果達到閾 值設定范圍即判斷當前有蟲害發生,蟲害等級取各項參數計算后達到的最高級別。
表4-8為夏季按照整倉統計儲糧害蟲數量所設計的報警模型。表中各個參數 的含義與計算方法與上文相同,只是害蟲數量的計算為倉內所有釆集終端監測數 量的總和,系統根據模型對整個糧倉的蟲情等級進行計算判定。
表4-5蟲情報警閾值(按整倉統計)
蟲情等級L dn tn ta Wn %
輕微 10 25 6 50 5
一般 30 60 10 90 8
嚴重 50 100 18 150 12
基于以上蟲情報警模型的設計,開發蟲情報警模塊insects_waring.py,將其 嵌入服務器后臺定時執行,實現蟲情的分級報警,主要實現步驟如下:
Stepl:配置 insects_waming.py 的定時執行計劃,使用 python manage.py crontab add命令添加定時任務.
Step2:確定糧庫糧倉,ORM filter查詢整倉和單個采集終端的儲糧害蟲數據, 計算蟲情等級 L=MAX(dn、tn、ta、wn、wa)。
Step3:把蟲情信息寫入數據庫,推送報警信息。
Step4:登錄Web端儲糧害蟲信息管理系統,消息中心頁面顯示報警信息列表。
Step5:登錄儲糧害蟲監測APP, APP從SQLite數據庫拉取報警信息并在消 息中心顯示。
4.5本章小結
本章詳細介紹了儲糧害蟲智能監測信息管理平臺中Web、APP與服務器后 臺的具體實現。首先介紹了項目工程結構整體規劃,然后展示了 Web與APP的 實現效果,介紹了實現方法;最后詳細闡述了服務器后臺的儲糧害蟲信息采集、 Rest服務與蟲情分析報警模塊的技術實現細節。
第五章儲糧害蟲智能監測信息管理平臺部署與測試
在軟件開發完成后,設計測試用例進行完備的測試,是軟件開發周期中必要 的環節。本章介紹儲糧害蟲智能監測信息管理平臺在騰訊云的部署方案,然后設 計測試方案分別對Web、APP和服務器進行測試。
5.1平臺部暑
在騰訊云購買云服務器,部署儲糧害蟲智能監測信息管理平臺,云服務器配 置參數如表5-1所示。服務器操作系統Ubuntu是Linux的發行版之一,具有完 善的軟件生態支持。云服務器配置有公網IP,為各地糧庫的數傳終端提供接入條 件。在前期采集終端安裝數量和儲糧害蟲數據量不大的情況下,選用表中配置即 可滿足需求。在后期系統壓力增大時,云服務器也能夠快速擴容。
表5-1云服務器配置
服務器 配置參數
操作系統 Ubuntu Server 18.04.1 LTS 64 位
CPU Intel Xeon E5 2.4GHz
內存 DDR4 16G
系統盤 高性能云硬盤50G
網絡 公網 IP 5Mbps
云硬盤 1000G
服務器后臺的部署框架如圖5-1所示。在Ubuntu服務器使用Nginx接收來 自數傳終端、Web和APP的HTTP請求,使用Nginx代理圖片、js、css文件等 靜態資源以提高服務器的響應速度[創。uWSG作為橋梁連接Nginx與Django, 使Django后臺能夠識別并處理來自Nginx的請求。
圖5-1服務器部署架構
5.2服務器性能測試
服務端的負載主要來自于分布于各區域糧庫的數傳終端的數據上傳請求,后 期隨著設備部署數量的增多負載也會加大,因此有必要事先對服務器進行壓力測 試,測試工具選用LoadRunner,把測試結果導出后繪制成可視化圖表。
響應時間與吞吐量是衡量服務器性能的重要指標。響應時間指數傳終端的請 求從發岀到收到服務器響應的時間,吞吐量指服務器在單位時間內處理請求的數 量。性能測試方案中,模擬100?1000個數傳終端向服務器發送數據上傳請求, 數據包大小為2%9WNW16)B,測試服務器的響應時間與吞吐量。
響應時間的測試結果如圖5-2所示,可以看出服務器在大部分情況下能在3 秒內完成對數傳終端請求的處理,數據解析與存儲的速度在數傳終端可接受范圍 之內。吞吐量的測試結果如圖5-3所示,可以看出服務器在應對500個以上數傳 終端的請求時依然具備較好的性能,可以滿足未來大量糧庫接入的需要。
圖5-2響應時間測試結果
圖5-3吞吐量測試結果
5.3儲糧害蟲信息管理系統測試
設計測試用例,對儲糧害蟲信息管理系統進行功能用例,測試用戶管理、數 據管理、綜合管理模塊,如表5-2、5-3與5-4所示。由系統所要達到的測試目標 與測試結果分析可知,系統達到了預期的設計效果。
表5-2用戶管理模塊測試用例
測試內容 測試目標 測試結果
使用正確賬號密碼
登錄 跳轉至主界面,展示糧倉中設備分布三維圖 登錄成功,展示
首頁
使用錯誤賬號密碼
登錄 提示用戶名密碼錯誤,登錄失敗 登錄失敗
忘記密碼 為用戶發送密碼郵件 收到密碼郵件
添加用戶 管理員添加糧庫保管員用戶 用戶添加成功
權限配置 管理員為糧庫保管員分配數據訪問權限 權限分配成功
個人信息修改 用戶在個人信息詳情頁修改個人信息 信息修改成功
退出登錄 返回登錄界面,刪除用戶緩存 退出成功
表5-3數據管理模塊測試用例
測試內容 測試目標 測試結果
查看設備采集數據 分頁顯示儲糧害蟲數據列表 列表顯示正常
查看每條數據詳情 進入數據詳情頁,展示數據所有字段信息 展示成功
根據字段篩選數據 展示篩選后的儲糧害蟲數據列表 篩選后成功展示
導出儲糧害蟲數據 選擇導出格式,能夠導出CSV、EXCEL、JSON
三種格式的數據 數據導出成功
蟲情數據可視化 解析服務器返回的JSON數據,從多個維度 展示蟲情可視化圖表 圖表成功繪制并 展示
查看設備采集數據 分頁顯示儲糧害蟲數據列表 列表顯示正常
查看每條數據詳情 進入數據詳情頁,展示數據所有字段信息 展示成功
根據字段篩選數據 展示篩選后的儲糧害蟲數據列表 篩選后成功展示
上傳儲糧害蟲數據 在數據上傳頁面,填寫數據字段,上傳圖片 數據上傳成功
查看人工上傳數據 分頁展示用戶上傳的儲糧害蟲數據列表 列表顯示正常
修改人工上傳數據 展示數據詳情,用戶可修改數據字段 數據修改成功
表5-4綜合管理模塊測試用例
測試內容 測試目標 測試結果
查看設備信息 分頁展示設備信息列表 列表顯示正常
查看設備詳情 進入設備詳情頁,展示所有字段信息 信息展示成功
修改設備信息 在詳情頁點擊修改,可修改設備信息 信息修改成功
設備在線升級 進入程序上傳頁面,上傳程序文件,釆 集終端程序自動升級成功 釆集終端完成升級
查看糧庫信息 展示管轄范圍內的糧庫信息列表 列表顯示正常
修改糧庫信息 進入糧庫信息修改頁面,修改字段 成功修改糧庫信息
查看糧倉信息 展示管轄范圍內的糧倉信息列表 列表顯示正常
修改糧倉信息 進入糧倉信息修改頁面,修改字段 成功修改糧倉信息
查看日志 按照時間順序列出日志信息 日志列表顯示成功
開啟蟲情報警 消息中心收到報警信息 顯示報警信息
5.4儲糧害由監測APP測試
5.4.1 APP功能測試
根據表5-5設計的測試用例對APP的個人中心、蟲情查看、糧蟲圖鑒、數據 上傳模塊分別進行測試,根據系統實際達到的效果,確定儲糧害蟲監測APP完 成了所有功能需求。
表5-5儲糧害蟲監測APP測試用例
功能模塊 測試內容 測試目標 測試結果
個人中心 使用正確賬號密 碼登錄 進入APP主界面 用戶登錄成功
使用錯誤賬號密 碼登錄 提示用戶名密碼錯誤,登錄 失敗 登錄失敗
查看消息中心 展示消息中心消息列表 列表展示正常
修改用戶信息 進入用戶信息修改界面,修 改字段信息 用戶信息修改成功
退出登錄 返回登錄界面 退出成功
蟲情查看 查看設備分布三 維圖 可旋轉、放大、點擊三維模擬 圖 模型繪制成功,成功響 應點擊、縮事件
查看設備信息 點擊設備,查看設備詳情 響應點擊事件
查看蟲情數據 展示蟲情數據列表, 列表展示正常
根據字段篩選數 展示篩選后的儲糧害蟲數據 通過下拉和點擊事件
據 列表 成功顯示篩選結果
查看某個設備的 監測信息 展示設備監測到的儲糧害蟲 數據列表 信息顯示成功
數據可視化 展示蟲情可視化圖表 成功顯示害蟲數量變 化折線圖
糧蟲圖鑒 查看糧蟲圖鑒 展示所有儲糧害蟲信息列表 成功使用listview展 儲糧害蟲列表
搜索儲糧害蟲 展示搜索到的結果 搜索結果顯示正確
查看儲糧害蟲詳 細信息 展示儲糧害蟲的詳細信息, 展亦高清大圖 信息展示成功
數據上傳 拍攝儲糧害蟲圖 片 調用攝像頭啟動拍攝 授予權限,成功拍攝圖 片
上傳圖片 選擇文件上傳 圖片成功添加
上傳人工釆集數 據 進入人工采集數據上傳界 面,上傳儲糧害蟲數據和圖 片 數據上傳成功
蟲情報警 開啟報警 點擊報警開關 成功開啟報警
設置報警模型參 數 在報警參數設置界面手動填 寫報警模型參數 參數設置成功
查看報警信息 顯示報警信息列表 成功顯示消息列表
5.4.2 APP性能測試
APP的性能測試的工具選用Emmagge軟件,Emmagge是一款開源的用于測 試Android軟件的性能測試工具,主要用于監測單個AndroidAPP的CPU、內存 占用、流量消耗、電量消耗等性能狀態的變化,可以自定義軟件監測的頻率以及 性能的實時顯示。
在Android手機中安裝Emmagge并開啟監測,然后操作使用儲糧害蟲監測 APP的各項功能,測試時間持續半個小時。Emmagge會自動生成CSV格式的性 能統計文件,并保存在特定的文件目錄中。CSV格式的文件可以通過EXCEL打 開,使用EXCEL的繪圖功能把測試結果繪制成易于觀察的可視化圖表,如下所 zj\ O
圖5-4為APP占用內存比統計圖,由圖可知APP在使用過程中的內存占用 一直保持較低水平,從而不會造成手機的卡頓。觀察圖5-5可知APP在使用時 占用CPU的比率也較低,不會過多消耗手機資源,可以節省手機電量。由圖5- 6可知APP的流量消耗很少,在無操作的情況下幾乎沒有流量損耗。綜上測試結 果,APP符合輕量化的設計要求,在所有設計功能都具備的情況下,也不會給手 機帶來額外的運行壓力。
圖5-5 APP占用CPU率統計圖
圖5-6 APP流量消耗統計圖
5.5本章小結
本章介紹了儲糧害蟲智能監測信息管理平臺在騰訊云的部署方案,并對服務 器進行了性能測試,設計測試用例完成了對儲糧害蟲信息管理系統和儲糧害蟲監 測APP的測試,確定平臺各項功能均達到預定要求,可以上線運行。
第六章總結與展望
6.1論文總結
儲糧害蟲智能監測可以在糧庫的害蟲防治工作中發揮重要的作用,通過信息 化、智能化的手段采集并管理儲糧害蟲數據,幫助糧庫及時發現蟲害,使用數據 分析處理技術減小蟲害發生情況的評估誤差。本文著重對儲糧害蟲監測系統的軟 件部分,即儲糧害蟲監測信息管理系統進行了研究,基于兩款新型儲糧害蟲信息 采集終端OITD-PI與OITD-C,設計實現了儲糧害蟲智能監測信息管理平臺,該 平臺包括Web端儲糧害蟲信息管理系統、移動端儲糧害蟲監測APP,服務器后 臺三個部分,實現了儲糧害蟲數據與終端設備的統一管理,通過數據可視化的方 式充分利用蟲情數據為用戶提供服務,通過蟲情分析報警模型及時讓用戶得知糧 倉蟲害發生情況。
本文完成的主要工作如下:
1.研究分析了國內外儲糧害蟲信息管理系統的發展及現狀,發現系統存在 的問題并提出改進的方向,提出了基于云平臺搭建儲糧害蟲智能監測信息管理平 臺的解決方案。對平臺搭建的硬件基礎采集終端和數傳終端進行了研究,研究了 基于Python的后臺開發、數據處理相關技術,確定了系統的技術選型。
2.調研糧庫對信息系統的實際需求,根據糧庫的網絡環境設計平臺的網絡 架構。基于模塊化開發的思想將平臺劃分為Web端、移動端、服務器端三個部 分,設計系統的軟件分層架構,完成了儲糧害蟲智能監測信息管理平臺的總體設 計。
3.設計實現了 Web端的儲糧害蟲信息管理系統。根據實際調研分析了糧庫 對信息系統的設計需求,將系統劃分為用戶管理、綜合管理、蟲情數據服務三個 主要模塊,每個模塊下細分小的功能模塊,實現了功能的解耦。依據設計完成了 系統的開發,展示了系統的實現效果。
4.設計實現了儲糧害蟲監測APPo分析了糧庫用戶當前在移動端設備上的 實際需求,設計APP并將其劃分為個人中心、蟲情查看、糧蟲圖鑒、數據上傳 四個主要功能模塊,按照設計最終實現了所有功能,解決了用戶查看蟲情不方便 的問題,為用戶提供了一個學習儲糧害蟲知識的渠道。
5.設計實現了儲糧害蟲數據的跨區域采集與存儲。使用Protobuf設計儲糧 害蟲數據的傳輸格式,設計數據從采集終端到數傳終端再到服務器的數據傳輸流 程,在服務端開發數據采集接口,實現了數據的傳輸與存儲。
6.設計實現了蟲情分析報警模型。使用Python數據處理庫處理儲糧害蟲數 據,使用設備分布三維圖展示采集終端位置分布,使用三維柱狀圖展現糧堆截面 各個采集終端監測到的儲糧害蟲數量,使用蟲情熱度圖展現糧堆截面儲糧害蟲的 發生區域及發展趨勢,生成蟲情可視化分析報告。設計蟲情報警模型的各個參數 閾值,基于模型計算儲糧害蟲數據,為用戶提供蟲情報警服務。
7.設計測試用例對儲糧害蟲信息管理系統和儲糧害蟲監測APP進行測試, 確認系統達到預期效果,并將系統在服務器部署上線提供服務。
6.2工作展望
現階段,儲糧害蟲智能監測信息管理平臺各部分的開發工作均已完成,各項 功能運行正常,基本滿足用戶的使用需求,但仍有一些需要進一步研究和探索的 地方,主要有以下幾個方面:
1.優化儲糧害蟲數據的采集與存儲,隨著采集終端部署數量的增加,儲糧害 蟲采集的數據量也會提升,對系統并發性和穩定性的要求也會提高,因此需要優 化儲糧害蟲數據的傳輸格式,使數據更為緊湊,解析速度更快。在服務端,使用 多進程、多線程、異步10的方式提升系統對高并發訪問的處理能力。
2.增強儲糧害蟲數據可視化功能。系統當前數據可視化圖表類型還不夠豐 富,數據分析的維度還不夠多,呈現的效果也可以進一步增強,后期可以增加使 用柱線圖、關系圖、氣泡圖、雷達圖、亮點地圖等從多維度展現儲糧害蟲信息, 呈現更好的視覺效果。
3.升級蟲情分析報警模型。當前蟲情報警模型還比較初級,智能化程度不夠 高,只能分析歷史數據然后得出結果。后期可以在儲糧害蟲數據積累的基礎上, 基于深度學習神經網絡、LSTM等算法訓練蟲情預測算法,預測未來一段時間儲 糧害蟲的發生情況,使模型更加智能。
參考文獻
[1]中國的糧食安全,[EB/OL]? http://www.gov.cn/zhengce/2019/10/14cont- ent_5439410.html? 2019-10-14.
[2]王海修.儲糧害蟲檢測與識別技術研究進展[幾糧食科技與經濟, 2011(1): 20-23.
⑶糧食信息化十三五規劃發展“互聯網+糧食汀平臺建設[J].糧食科技 與經濟’ 2017,42(01): 1.
[4]張京宣,李明哲,倫才智,等•儲糧害蟲在線監測技術研究進展[J]? 現代農業科技,2019(10): 223-224.
[5]劉漢生.陷阱式儲糧害蟲信息采集終端及其系統的研究與實現[D]. 北京:北京郵電大學,2018.
[6]國家糧食局關于加快推進糧食行業信息化建設的意 JAL. [EB/0L] http://www.gov.cn/xinwen/2017-09/29/content_5228375.htai
[7]楊恩澤.智慧糧庫控制系統的設計與實現[叨•浙江大學,2018.
[8]張國華,劉俊,劉二楊,等.基于移動互聯網的數字糧食平臺質量管 理模塊分析與設計[J]?計算機時代,2016, (3): 18-21.
[9]張迪,朱立谷,侯振宇,等.基于WEB的移動端云存儲技術研究[J]? 計算機工程與應用,2010, 46(36): 66-69.
[10]Shuman D. A Computer-based Electronic Fall-through Probe Insect Counter for Monitoring Infestation in Stored Products [J]. Transactions of theASAE, 1996,39(5): 1773-1780.
[11]Shuman D, Weaver D K, Larson R G. Performance of an Analytical, Dual Infrared-beam,Stored-product Insect Monitoring System [J]. Journal of Economic Entomology, 2005, 98(5):1723-1732.
[12]Flinn P W, Opit G P, Throne J E. Predicting Stored Grain Insect Population Densities Using an Electronic Probe Trap[J]. Journal of Economic Entomology, 2009,102(4): 1696-1704?
[13]Flinn P W, Opit G P, Throne J E? Integrating the stored grain advisor pro expert system with an automated electronic grain probe trapping system[C]//Proc. 9th International Working Conference on Stored Product Protection. 2006: 15-1&
[14]Ridgway C, Davies R, Chambers J. Imaging for the high-speed detection of pest insects and other contaminants in cereal grain in transit[C]//2001 ASAE Annual Meeting. American Society of Agricultural and Biological Engineers, 1998: 1.
[15]Ridgway C, Davies E R, Chambers J, et al. Rapid machine vision method for the detection of insects and other particulate bio-contaminants of bulk grain in transit[J]. Biosystenas engineering, 2002, 83: 21-30?
[16]徐建軍.糧庫糧情測蟲系統研究和實現[D].東南大學計算機技術, 200&
[17]羅慧,馬海樂,王洋,等.基于圖像處理的儲糧低密度蟲害監測系統 的設計與驗證[J].現代食品科技,2019,35(10): 268-273.
[18]長春吉大賽恩科技有限公司•儲糧害蟲監測報警系 統:CN201822168349.2[P].2019-07-12.
[1刃鮑舒恬,常春波.基于物聯網和霧計算及云計算的低功耗無線儲糧害 蟲監測系統及其應用[J].糧油倉儲科技通訊,2018,34(04): 43-46.
[20]Dehnen-Schmutz K, Foster G L, Owen L, et al. Exploring the role of smartphone technology for citizen science in agriculture [J]. Agronomy for sustainable development, 2016, 36(2): 25.
[21]羅強,黃睿嵐,朱軼.基于深度學習的糧庫蟲害實時監測報警系統[J]. 江蘇大學學報(自然科學版),2019,40(02): 203-208.
[22]陶經.基于Android平臺的儲糧害蟲信息采集系統及其服務器端的設 計與實現[D].北京郵電大學,2017.
[23]趙彬宇,周慧玲.基于Android系統的儲糧害蟲圖像識別軟件設計與 實現[EB/OL],北京:中國科技論文在線 [2019-04-10], http://www.paper.edu.cn/releasepaper/content/201904-128.
[24]王威松,周慧玲,秦戈,成思揚,汪中明,崔淼•一種探管式儲糧害蟲誘捕在 線監測裝置的設計研究[J/OL],中國糧油學報:1-7[2020-03- 26].http://kns.cnki.net/kcms/detail/l 1.2864.TS.20200316.1519.002.ht
[25]聶磊.基于Raspberry Pi的云智能中藥煎藥機系統的研究與開發[D]. 西安理工大學,2019.
[26]肖旻,陳行.基于Python語言編程特點及應用之探討[J].電腦知識與 技術,2014,10 (34): 8177-8178
[27]牛寧.基于Django的智慧園區平臺系統設計與實現[D].電子科技大 學,2018.
[28]吳衛平,王麗芳,蔣澤軍.基于0RM的數據持久層框架研究[J].微 電子學與計算機,2008 (07): 188-190+193.
[2刃 Aziz Khan, Anthony Mathelier. JASPAR RESTful API: accessing JASPAR
data from any programming languagefJ]. Bioinformatics?2018,34(9).
[30]蔣國松,呂偉德,高永梅,等.蘆筍害蟲遠程監測報警信息系統的組 成與實現[J].信息與電腦(理論版),2018(03): 114-116.
[31]Xiaobo Gao, Xianmei Fang. High-Performance Distributed Cache
Architecture Based on Redis [M], Springer Berlin Heidelberg :2014-06-15.
[32]吾木提•那合S. NoSQL數據庫綜述[J].電子世界,2015, (17): 146-147.
[33]Lysogor Ivan,Voskov Leonid,Rolich Alexey,Efremov Sergey. Study of
Data Transfer in a Heterogeneous LoRa-Satellite Network for the Internet of Remote Things. [J]. Sensors (Basel, Switzerland),2019,19(15).
[34]倪興國.農業統計數據可視化系統設計與實現[D].河北農業大學, 2018.
[35]Wes Mckinney. Python for Data Analysis [M]. CA: OTReilly Media. Inc, 2012
[36]GBT_29890-2013,糧油儲藏技術規范[S].
[37]張英.鄧文斌,鄭紹鋒.高大平房倉儲糧害蟲分布與發生初步調查[J].
糧油倉儲科技通訊,2012.28(3):27-29.
[38]陳龍.圖形化儲糧糧情智能分析方法與系統的研究[D].吉林大學, 201&
[3刃許小勇,鐘太勇.三次樣條插值函數的構造與Matlab實現[J].兵工自動 化,2006(11):76-78.
[40]王利萍.基于Nginx服務器集群負載均衡技術的研究與改進[叨.山東 大學,2015.