黃亦其,沈 豪,,王福寬,,錢萬(wàn)強(qiáng),董雙玉,喬 曦,,3*
(1.廣西大學(xué)機(jī)械工程學(xué)院,廣西南寧530004;2.中國(guó)農(nóng)業(yè)科學(xué)院(深圳)農(nóng)業(yè)基因組研究所,廣東深圳 518120;3.仲愷農(nóng)業(yè)工程學(xué)院智慧農(nóng)業(yè)創(chuàng)新研究院,廣東廣州 510225)
生物多樣性在世界范圍內(nèi)嚴(yán)重衰退,外來(lái)入侵物種(IAS)已成為全球生物多樣性面臨的主要威脅之一[1-2]。近年來(lái)我國(guó)入侵生物中昆蟲入侵種類顯著增長(zhǎng),每年因入侵昆蟲導(dǎo)致的疫情也出現(xiàn)爆發(fā)性增長(zhǎng),因此在防治入侵生物中,針對(duì)入侵昆蟲的防治就顯得尤為重要[3]。
防治入侵昆蟲首先的任務(wù)就是要對(duì)其進(jìn)行識(shí)別,判斷入侵昆蟲物種。現(xiàn)在對(duì)于昆蟲的識(shí)別系統(tǒng)也已經(jīng)十分成熟,部分軟件識(shí)別準(zhǔn)確率達(dá)到98%,但識(shí)別數(shù)據(jù)庫(kù)較小,識(shí)別的昆蟲種類單一,部分軟件功能冗雜缺少針對(duì)昆蟲的查詢功能或者后端的聯(lián)系反饋[4]。相比針對(duì)入侵植物和大型入侵動(dòng)物的識(shí)別應(yīng)用程序的廣泛應(yīng)用地理信息的報(bào)告、數(shù)據(jù)集的收集和識(shí)別功能,針對(duì)入侵昆蟲的識(shí)別軟件市場(chǎng)至今鮮見報(bào)道。
相比于Android和iOS的移動(dòng)應(yīng)用,微信小程序設(shè)備適配性好、對(duì)系統(tǒng)要求低,具有“輕、簡(jiǎn)、精、快”的輕量化特征,具備現(xiàn)代移動(dòng)互聯(lián)網(wǎng)的顯著特點(diǎn)[5-6]。為了完善入侵昆蟲的管理防治體系,加強(qiáng)公眾的生態(tài)防護(hù)意識(shí),拓寬相關(guān)科研數(shù)據(jù)收集渠道,筆者基于成熟的開發(fā)平臺(tái)與設(shè)計(jì)實(shí)現(xiàn)流程,設(shè)計(jì)開發(fā)了一個(gè)針對(duì)入侵昆蟲的微信小程序,旨在提高公眾生態(tài)保護(hù)意識(shí),有助于科研數(shù)據(jù)的收集,完善入侵昆蟲數(shù)據(jù)庫(kù),為入侵昆蟲的防治打下良好基礎(chǔ)。
1.1 需求概述外來(lái)物種已經(jīng)對(duì)世界范圍內(nèi)的生物多樣性造成嚴(yán)重影響,成功管理這些物種需要公民意識(shí)到并參與防止新物種的引入和支持控制干預(yù)措施[2]。針對(duì)入侵昆蟲的防治,幫助擴(kuò)大民眾對(duì)入侵昆蟲的了解,首先的任務(wù)就是要對(duì)其進(jìn)行識(shí)別,判斷入侵昆蟲物種種類。
雖然有效利用公民科學(xué)的優(yōu)點(diǎn)已經(jīng)在廣泛傳播,但它在農(nóng)業(yè)領(lǐng)域的應(yīng)用并不像其他行業(yè)那樣廣泛[7]。對(duì)于生物農(nóng)業(yè)領(lǐng)域,學(xué)科專業(yè)性較強(qiáng),民眾接受相關(guān)知識(shí)渠道往往受限于書籍和傳統(tǒng)媒體,對(duì)于昆蟲的鑒別也只能局限于難以科學(xué)記錄的經(jīng)驗(yàn)描述以及無(wú)法大范圍推廣的專家指導(dǎo)。與入侵植物與大型入侵動(dòng)物相比,在野外的入侵昆蟲受到季節(jié)性的影響較大,而且由于易轉(zhuǎn)移和體型小難以發(fā)現(xiàn)的特點(diǎn),非相關(guān)從業(yè)人員對(duì)于入侵昆蟲的檢測(cè)識(shí)別難度很大。
在信息化時(shí)代,大數(shù)據(jù)、云計(jì)算、人工智能的全面發(fā)展為入侵生物數(shù)據(jù)庫(kù)的建立提供了強(qiáng)有力的技術(shù)支撐,外來(lái)有害生物的數(shù)據(jù)和信息在防控外來(lái)生物進(jìn)入、定殖、擴(kuò)散成災(zāi)中均發(fā)揮著舉足輕重的作用,大量的基礎(chǔ)數(shù)據(jù)還能對(duì)入侵物種的影響進(jìn)行評(píng)估,這也是入侵科學(xué)研究的一項(xiàng)重要任務(wù),而圖像在農(nóng)業(yè)信息化過(guò)程中是十分重要的信息載體[1,8-9]。近年來(lái),配備高質(zhì)量攝像頭的智能手機(jī)越來(lái)越多。這意味著,使用智能手機(jī)可以很容易地捕捉到大型動(dòng)植物群的高質(zhì)量圖像。此外,進(jìn)行復(fù)雜數(shù)學(xué)計(jì)算的軟件(如Matlab)也可用于高精度的圖像處理,這對(duì)開發(fā)圖片處理應(yīng)用提供了一個(gè)方便的后端計(jì)算處理平臺(tái)。
隨著目前移動(dòng)互聯(lián)網(wǎng)的高速發(fā)展,越來(lái)越多的研究者在探索將計(jì)算機(jī)系統(tǒng)與的生物農(nóng)業(yè)管理聯(lián)系起來(lái)?,F(xiàn)行幾種植物識(shí)別APP應(yīng)用流行的識(shí)別網(wǎng)絡(luò)數(shù)據(jù)庫(kù)雖龐大,但由此導(dǎo)致的訓(xùn)練效果粗放,識(shí)別準(zhǔn)確率有待提高[10]。針對(duì)入侵植物和大型入侵動(dòng)物的識(shí)別應(yīng)用程序已廣泛應(yīng)用到地理信息的報(bào)告、數(shù)據(jù)集的收集和識(shí)別功能,而對(duì)于昆蟲應(yīng)用程序的開發(fā)較少,而且對(duì)于專門針對(duì)入侵昆蟲的識(shí)別應(yīng)用至今鮮見報(bào)道。
為了更好促進(jìn)知識(shí)服務(wù)的擴(kuò)大和深化,推動(dòng)學(xué)科服務(wù)繼續(xù)向用戶延伸,建立科研與用戶之間的有效鏈接[11],系統(tǒng)基于微信小程序的開發(fā)優(yōu)勢(shì)[5-6],在面向入侵昆蟲識(shí)別的問(wèn)題上,應(yīng)用現(xiàn)存的技術(shù)框架、設(shè)備發(fā)展優(yōu)勢(shì)以及推廣優(yōu)勢(shì),設(shè)計(jì)開發(fā)一個(gè)針對(duì)入侵昆蟲的微信小程序。系統(tǒng)集成圖片拍照識(shí)別,信息庫(kù)功能和報(bào)告上傳功能的綜合可提供用戶多方位的使用需求。
1.2 總體功能需求分析對(duì)于開發(fā)入侵昆蟲小程序而言,其主體功能中應(yīng)包括圖片識(shí)別、昆蟲信息庫(kù)的應(yīng)用和昆蟲信息在線報(bào)告三大模塊。對(duì)平臺(tái)用戶來(lái)說(shuō),可登錄小程序的使用界面,使用昆蟲信息庫(kù)查找功能,在線昆蟲識(shí)別查看以及對(duì)入侵昆蟲的位置圖片信息的上傳報(bào)告功能,其中具體包含七大具體的使用功能。用戶功能需求用例如圖1所示。
圖1 用戶功能需求用例圖Fig.1 Use case diagram of user functional requirements
2.1 系統(tǒng)框架在小程序進(jìn)行需求分析的基礎(chǔ)上,對(duì)系統(tǒng)的架構(gòu)進(jìn)行設(shè)計(jì)。首先對(duì)系統(tǒng)的各個(gè)結(jié)構(gòu)組成進(jìn)行分析設(shè)計(jì)。系統(tǒng)整體結(jié)構(gòu)如圖2所示。
圖2 系統(tǒng)體系結(jié)構(gòu)設(shè)計(jì)Fig.2 System architecture design
可以看到該系統(tǒng)采用的是一個(gè)經(jīng)典的前后端交互設(shè)計(jì),移動(dòng)終端通過(guò)數(shù)據(jù)網(wǎng)絡(luò)訪問(wèn)系統(tǒng)服務(wù)器,服務(wù)器進(jìn)而對(duì)數(shù)據(jù)庫(kù)和識(shí)別網(wǎng)絡(luò)文件路徑進(jìn)行訪問(wèn)。通過(guò)分層設(shè)計(jì)降低系統(tǒng)各部分的耦合度,讓系統(tǒng)具有一定的獨(dú)立性和良好的擴(kuò)展性。
根據(jù)對(duì)系統(tǒng)的需求分析和概要設(shè)計(jì),整個(gè)識(shí)別系統(tǒng)基于C/S架構(gòu),采用前后端分離的開發(fā)模式,由2部分組成,包括用戶小程序端和服務(wù)端,其中服務(wù)端又包括數(shù)據(jù)庫(kù)模塊,識(shí)別算法模塊以及由Java語(yǔ)言進(jìn)行編碼的系統(tǒng)后端。該研究總體采用MVC(Model-View-Controller)軟件架構(gòu)模式,其模塊間的低耦合使得項(xiàng)目開發(fā)效率更高??紤]到后續(xù)的繼續(xù)開發(fā)研究任務(wù),后臺(tái)基于SSM(Spring-Spring MVC-MyBatis)框架進(jìn)行設(shè)計(jì),由于其也是目前主流的Java EE框架,由Spring和MyBatis開源框架組合而成(其中Spring MVC屬于Spring的部分內(nèi)容)[7-8]。Spring是一個(gè)基于J2EE環(huán)境下的輕量級(jí)開源框架,利用容器對(duì)各組件進(jìn)行選擇調(diào)用,降低了組件間的耦合,通過(guò)注入機(jī)制在運(yùn)行時(shí)為組件配置資源,實(shí)現(xiàn)組件的即插即用,此外組件無(wú)需指定數(shù)據(jù)接口,因此也可以對(duì)組件進(jìn)行分離[9]。Spring MVC屬于Spring提供的一個(gè)構(gòu)建web端的MVC框架,將模型層(Model)分為業(yè)務(wù)層(Service)和持久層(Dao),在Service層可以訪問(wèn)持久層也可以訪問(wèn)非數(shù)據(jù)庫(kù)層,大大提高系統(tǒng)開發(fā)效率。MyBatis作為后端的數(shù)據(jù)持久層框架,使得JDBC操作數(shù)據(jù)庫(kù)的過(guò)程更加輕量化,通過(guò)Xml或注解的方式將Java對(duì)象和Sql語(yǔ)句結(jié)合映射為最后要執(zhí)行的Sql語(yǔ)句,其中JDBC為Java提供專門用于數(shù)據(jù)庫(kù)連接的接口。整體架構(gòu)如圖3所示。
圖3 Spring MVC架構(gòu)Fig.3 Spring MVC architecture
2.2 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)根據(jù)用戶的總體需求,對(duì)系統(tǒng)的總體功能分模塊進(jìn)行設(shè)計(jì)。依據(jù)模塊化和層次化的設(shè)計(jì)規(guī)范,對(duì)系統(tǒng)功能進(jìn)行模塊劃分,將總體功能模塊劃分為多個(gè)子模塊。根據(jù)需求分析,系統(tǒng)包括幾大功能模塊:登錄注冊(cè)模塊、識(shí)別模塊、信息報(bào)告模塊、信息庫(kù)功能模塊,具體如圖4所示。
圖4 系統(tǒng)總功能模塊設(shè)計(jì)Fig.4 Design diagram of the system’s general functional modules
2.3 系統(tǒng)各功能模塊設(shè)計(jì)
2.3.1識(shí)別模塊。由圖5可知,用戶在進(jìn)入識(shí)別模塊時(shí)當(dāng)前頁(yè)面會(huì)檢測(cè)是否有用戶信息登錄,沒(méi)有的話開始上傳圖片就會(huì)提示登錄,選定圖片成功后上傳會(huì)檢測(cè)是否授權(quán)位置信息,獲取位置信息后會(huì)上傳到服務(wù)器獲取后臺(tái)的識(shí)別結(jié)果。其中位置信息在每次進(jìn)入小程序均會(huì)清空,需要重新授權(quán)以保證位置信息的準(zhǔn)確性。
圖5 識(shí)別模塊流程Fig.5 Flow chart of recognition module
2.3.2信息報(bào)告模塊。由圖6可知,用戶進(jìn)入昆蟲信息上傳頁(yè)面上傳后,需要填寫完善相關(guān)信息,如昆蟲的圖片和相關(guān)地址信息,否則提交會(huì)提示將信息補(bǔ)充完整,上傳成功后會(huì)出現(xiàn)上傳成功的提示。
圖6 信息報(bào)告模塊流程圖Fig.6 Flow chart of information report module
2.3.3信息庫(kù)功能模塊。由圖7可知,信息庫(kù)功能模塊主要分為兩大功能,對(duì)后置昆蟲信息庫(kù)根據(jù)關(guān)鍵字進(jìn)行模糊查詢獲得昆蟲的名稱和常見宿主等關(guān)鍵信息,另外根據(jù)昆蟲的科對(duì)昆蟲進(jìn)行分類展示,點(diǎn)擊后獲得該昆蟲的其他詳細(xì)信息。
2.4 數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)庫(kù)設(shè)計(jì)就是以數(shù)據(jù)庫(kù)模型的方式表現(xiàn)出系統(tǒng)整體的關(guān)系。該研究采用E-R 圖來(lái)表現(xiàn)數(shù)據(jù)庫(kù)間的邏輯關(guān)系。E-R 圖就是實(shí)體聯(lián)系圖,它提供了實(shí)體、實(shí)體屬性以及聯(lián)系的方法,是用來(lái)描述現(xiàn)實(shí)世界的概念模型。系統(tǒng)的E-R圖如圖8所示。
圖7 信息庫(kù)功能模塊流程圖Fig.7 Flow chart of database function module
2.5 識(shí)別算法隨著DL在其他領(lǐng)域的快速發(fā)展和大量成功應(yīng)用,特別是國(guó)家的重視和企業(yè)巨頭的加入,DL在現(xiàn)代農(nóng)業(yè)中獲得越來(lái)越廣泛的應(yīng)用[10]。現(xiàn)如今,卷積神經(jīng)網(wǎng)絡(luò)在圖像識(shí)別領(lǐng)域已經(jīng)得到了充分的應(yīng)用與研究,特別是在農(nóng)業(yè)信息化的應(yīng)用中對(duì)生物農(nóng)業(yè)動(dòng)植物的檢測(cè)識(shí)別[11]。
該研究用到訓(xùn)練后的GoogLeNet神經(jīng)網(wǎng)絡(luò),該網(wǎng)絡(luò)于2014年提出,近年來(lái)應(yīng)用在許多實(shí)際領(lǐng)域的分類任務(wù)中,并且都具有優(yōu)良的表現(xiàn)。GoogLeNet網(wǎng)絡(luò)共有22層,利用Inception結(jié)構(gòu)模型堆積作為GoogLeNet網(wǎng)絡(luò)的主體架構(gòu),在保持網(wǎng)絡(luò)的稀疏性的同時(shí)提高了識(shí)別性能[12-14]。
該研究采用的Inception模塊作為GoogLeNet網(wǎng)絡(luò)模型的實(shí)現(xiàn)如圖9所示。與傳統(tǒng)的多通道卷積不同的是,Inception模塊使用多個(gè)卷積(1×1,3×3,5×5)結(jié)合max-pooling層,然后將卷積和pooling結(jié)果關(guān)聯(lián)起來(lái)[15-16],這樣使得網(wǎng)絡(luò)的層數(shù)更深,網(wǎng)絡(luò)性能及精度提高的同時(shí)節(jié)省了計(jì)算資源。
系統(tǒng)前端以微信小程序的開發(fā)工具為基礎(chǔ),后端項(xiàng)目通過(guò)eclipse進(jìn)行開發(fā),根據(jù)各功能模塊的設(shè)計(jì)思路在開發(fā)工具上進(jìn)行實(shí)現(xiàn),主要通過(guò)小程序的開發(fā)工具進(jìn)行系統(tǒng)的效果展示。
3.1 開發(fā)工具及技術(shù)準(zhǔn)備微信小程序前端基于微信開發(fā)者工具進(jìn)行開發(fā),后端基于經(jīng)典Java代碼編譯工具eclipse配置SSM框架,通過(guò)Java提供的JDBC服務(wù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行配置連接,其次對(duì)tomcat服務(wù)器進(jìn)行配置。考慮到該項(xiàng)目的開發(fā)成本、數(shù)據(jù)庫(kù)之間的相關(guān)交互功能實(shí)現(xiàn)的完整性和接口的通用性,選擇已經(jīng)非常成熟的分布式數(shù)據(jù)庫(kù)MySQL數(shù)據(jù)庫(kù)管理系統(tǒng)[17]。通過(guò)數(shù)據(jù)庫(kù)可視化管理工具navicat對(duì)數(shù)據(jù)庫(kù)進(jìn)行簡(jiǎn)單增刪查改等管理。識(shí)別算法以python語(yǔ)言架構(gòu)實(shí)現(xiàn),并對(duì)運(yùn)行基礎(chǔ)環(huán)境有較高要求,pycharm以其全面性和操作適變性能夠完全滿足該要求。
3.2 通信方法實(shí)現(xiàn)微信小程序與后臺(tái)的實(shí)現(xiàn)方式為:用戶在微信小程序前端對(duì)后臺(tái)發(fā)起Ajax請(qǐng)求,通過(guò)微信小程序自帶的request函數(shù)對(duì)后臺(tái)發(fā)起Https網(wǎng)絡(luò)請(qǐng)求,請(qǐng)求包括post和get共2種方式,傳入服務(wù)器數(shù)據(jù)會(huì)轉(zhuǎn)化為String格式,返回Json格式數(shù)據(jù)后通過(guò)前端頁(yè)面對(duì)返回?cái)?shù)據(jù)進(jìn)行調(diào)用展示。
Ajax是“異步Javascript和XML”的縮寫,是一種用于創(chuàng)建交互式的應(yīng)用程序的開發(fā)技術(shù),核心技術(shù)為XMLHttpRequest,主要處理對(duì)服務(wù)器或腳本的請(qǐng)求和來(lái)自服務(wù)器的返回?cái)?shù)據(jù)[18-19]。相比經(jīng)典的應(yīng)用程序模型響應(yīng)時(shí)間更短,避免了頻繁訪問(wèn)服務(wù)器導(dǎo)致用戶等待時(shí)間過(guò)長(zhǎng),無(wú)需刷新頁(yè)面即可提供動(dòng)態(tài)異步的交互方式[20]。
JSON是一種基于JavaScript語(yǔ)言的網(wǎng)絡(luò)中用來(lái)交換的數(shù)據(jù)格式,在Ajax應(yīng)用中便于服務(wù)器傳送數(shù)據(jù)至服務(wù)端,此外客戶端可以更方便地對(duì)數(shù)據(jù)進(jìn)行使用,而不需要額外的解析工作[21]。相比于傳統(tǒng)的XML文檔、HTML片段,JSON數(shù)據(jù)格式調(diào)用更靈活高效,在Ajax應(yīng)用程序中應(yīng)用廣泛,但在非Ajax程序中傳輸相比于String字符串不夠安全穩(wěn)定[22]。
3.3 信息庫(kù)功能實(shí)現(xiàn)
3.3.1查詢功能實(shí)現(xiàn)。對(duì)用戶搜索框內(nèi)的值先進(jìn)行變量定義,之后將輸入字符對(duì)變量賦值,將該帶值變量在請(qǐng)求中傳入后臺(tái),在控制層中分發(fā)啟動(dòng)Dao層,應(yīng)用Sql語(yǔ)言中的模糊搜索關(guān)鍵字對(duì)指定數(shù)據(jù)庫(kù)表進(jìn)行搜索,將得到的list數(shù)據(jù)傳入后端并利用fastjson包對(duì)數(shù)據(jù)進(jìn)行Json序列化,之后將結(jié)果傳至用戶端并進(jìn)行分行展示。
3.3.2分類查看功能實(shí)現(xiàn)。用戶打開分類界面后,微信小程序立即向后臺(tái)發(fā)送一個(gè)請(qǐng)求對(duì)指定數(shù)據(jù)庫(kù)表的指定字段進(jìn)行分類,并將分類結(jié)果傳回后臺(tái)處理后再發(fā)送至前端并展示。之后在上一請(qǐng)求里再對(duì)分類的第一類進(jìn)行請(qǐng)求,將上述類別下的所有具體信息傳回前端并展示在當(dāng)前頁(yè)面,之后用戶每點(diǎn)擊一大類按鈕即對(duì)后臺(tái)發(fā)送此類似請(qǐng)求。
3.4 上傳功能實(shí)現(xiàn)上傳信息包括文字信息以及多圖片信息,利用小程序前端的表單功能先信息進(jìn)行統(tǒng)一的打包上傳,此外2類信息分別儲(chǔ)存在不同的數(shù)據(jù)庫(kù)表中,文字信息表與圖片信息表建立一對(duì)多的關(guān)系。先將文字信息進(jìn)行上傳保存,同時(shí)將保存id傳回,與多圖片一起上傳至圖片表,微信小程序還無(wú)法實(shí)現(xiàn)多圖片上傳,因此對(duì)其建立1個(gè)for循環(huán),以支持多張圖片進(jìn)行依次上傳。
圖8 數(shù)據(jù)庫(kù)邏輯設(shè)計(jì)圖(E-R圖)Fig.8 Database logic design diagram(E-R diagram)
圖9 Inception v3模型Fig.9 Inception v3 model
3.5 識(shí)別功能實(shí)現(xiàn)
3.5.1識(shí)別路線設(shè)計(jì)。由圖10可知,小程序前端上傳待識(shí)別圖片包括圖片文件和位置以及用戶等文字信息,文字信息和圖片文件以及圖片識(shí)別結(jié)果都需要存至數(shù)據(jù)庫(kù),因此需要在后端將2類文件進(jìn)行區(qū)分。首先在后端將圖片文件傳至識(shí)別算法讀取的文件夾路徑,算法運(yùn)行后傳出識(shí)別結(jié)果并將圖片轉(zhuǎn)移至存儲(chǔ)圖片的最終文件夾,在后端將該文件夾路徑名后加上圖片名保存為圖片的最終絕對(duì)路徑。最后再將以上的識(shí)別結(jié)果、圖片路徑及文字信息傳回前端展示給用戶,圖片以文件路徑的形式與相關(guān)文字信息保存在數(shù)據(jù)庫(kù)以便之后的調(diào)用與編輯。
3.5.2算法環(huán)境搭建。系統(tǒng)利用后端編程語(yǔ)言python來(lái)構(gòu)建GoogLeNet識(shí)別算法,通過(guò)谷歌公司提供的深度學(xué)習(xí)網(wǎng)絡(luò)框架tensorflow 1.4來(lái)作為網(wǎng)絡(luò)的運(yùn)行環(huán)境,工作平臺(tái)為pycharm,python 3.6環(huán)境和此版本tensorflow配套插件均在其上進(jìn)行安裝配置。
3.5.3待識(shí)別圖片上傳。待識(shí)別圖片從前端上傳到返回識(shí)別信息到前端經(jīng)歷如下過(guò)程:微信小程序前端通過(guò)內(nèi)置uploadFile函數(shù)發(fā)起一個(gè)HTTPS POST請(qǐng)求,將本地圖片資源上傳到服務(wù)器,客戶端的服務(wù)器后端對(duì)圖片資源進(jìn)行重命名,接收至臨時(shí)文件夾,之后圖片經(jīng)過(guò)識(shí)別算法識(shí)別處理后轉(zhuǎn)入儲(chǔ)存文件夾。
圖10 識(shí)別路線圖Fig.10 Identification map
3.5.4識(shí)別算法的調(diào)用。對(duì)python環(huán)境和tensorflow框架配置好,在識(shí)別算法的py文件經(jīng)過(guò)cmd運(yùn)行測(cè)試成功后,可以通過(guò)Java內(nèi)置的Runtime.getRuntime().exec()函數(shù)運(yùn)行外部的程序或命令。Runtime.getRuntime().exec()的使用基于電腦系統(tǒng)的命令,通過(guò)調(diào)用服務(wù)器命令腳本執(zhí)行命令。在Java程序即后端的業(yè)務(wù)層中通過(guò)該函數(shù),指定運(yùn)行環(huán)境對(duì)指定目錄下的識(shí)別算法進(jìn)行啟動(dòng),進(jìn)而在識(shí)別算法即python文件中對(duì)指定目錄下的圖片文件進(jìn)行加載識(shí)別,得到結(jié)果之后將臨時(shí)文件夾里的圖片資源轉(zhuǎn)移到存儲(chǔ)文件夾以便后續(xù)的圖片識(shí)別。
3.5.5Socket通信。由于服務(wù)器上的項(xiàng)目后端與識(shí)別算法采取不同語(yǔ)言的編碼方式,在不同的代碼運(yùn)行平臺(tái)上運(yùn)行,因此在代碼層面很難對(duì)二者進(jìn)行數(shù)據(jù)交互。對(duì)于在python文件處理圖片資源的識(shí)別結(jié)果,利用Runtime.getRuntime().exec()創(chuàng)建一個(gè)啟動(dòng)python文件的進(jìn)程,再利用getInputStream()函數(shù)得到這個(gè)進(jìn)程的結(jié)果,即圖片的識(shí)別結(jié)果。但該方法不能保證大量數(shù)據(jù)的輸出穩(wěn)定,所以應(yīng)當(dāng)架設(shè)一個(gè)穩(wěn)定的數(shù)據(jù)通道,可以在Java后端與python文件中起到穩(wěn)定的數(shù)據(jù)傳輸?shù)淖饔?,能有效控制通道的開放關(guān)閉,因此采用Socket通信方法(圖11)。
圖11 Socket實(shí)現(xiàn)原理圖Fig.11 Socket implementation schematic diagram
Socket俗稱套接字,是在涉及網(wǎng)絡(luò)的Java開發(fā)中,使用TCP/IP或者UDP協(xié)議在服務(wù)器與客戶端之間進(jìn)行傳輸?shù)募夹g(shù),是網(wǎng)絡(luò)編程的基礎(chǔ)[23]。Socket類可以跨語(yǔ)言跨平臺(tái),僅通過(guò)套接字和端口將網(wǎng)絡(luò)中的2臺(tái)主機(jī)進(jìn)行數(shù)據(jù)交互[24]。將Java端作為客戶端,python端作為服務(wù)端,首先客戶端將圖片資源發(fā)送至臨時(shí)文件夾,創(chuàng)建套接字并綁定到特定的IP/端口上,新建BufferedInputStream對(duì)象來(lái)接受Socket對(duì)象接受的數(shù)據(jù)。同時(shí)注意,為方便識(shí)別結(jié)果數(shù)據(jù)成功響應(yīng)至小程序端的Ajax請(qǐng)求接收,在python端將識(shí)別結(jié)果轉(zhuǎn)化成JSON相關(guān)格式向Java客戶端進(jìn)行輸出。
3.6 前端界面實(shí)現(xiàn)前端微信小程序采用規(guī)范的weui小程序官方框架,主要頁(yè)面分為4種編碼語(yǔ)言:wxml與wxss用作頁(yè)面的排版與渲染,js文件用作頁(yè)面事件的編寫,json文件進(jìn)行當(dāng)前頁(yè)面全局的聲明與補(bǔ)充。由于前端開發(fā)已經(jīng)非常成熟,對(duì)于開發(fā)簡(jiǎn)單功能界面,開發(fā)者已經(jīng)無(wú)須對(duì)頁(yè)面組件細(xì)節(jié)進(jìn)行編輯,可以省下更多時(shí)間在界面設(shè)計(jì)上,市面上也已經(jīng)有了功能完備的小程序開發(fā)框架,如iView、tina等前端框架??紤]到小程序在不同設(shè)備上的適容性以及配套的開發(fā)文檔的學(xué)習(xí)難度,前端框架選用微信官方開發(fā)的weui前端框架。經(jīng)過(guò)多方對(duì)比圖標(biāo)質(zhì)量,應(yīng)用方式的簡(jiǎn)易度以及相關(guān)版權(quán)的問(wèn)題,該項(xiàng)目的圖標(biāo)選用阿里的iconfont圖標(biāo)庫(kù)和部分flaticon圖標(biāo)。
3.6.1實(shí)現(xiàn)登錄注冊(cè)。用戶首次登錄后在個(gè)人頁(yè)面點(diǎn)擊登錄注冊(cè)按鈕進(jìn)行登錄注冊(cè),通過(guò)微信小程序自帶的請(qǐng)求身份的事件函數(shù)授予用戶微信的身份信息,在全局中聲明授權(quán)信息后之后可不用再繼續(xù)請(qǐng)求信息授權(quán),防止出現(xiàn)過(guò)多的無(wú)效請(qǐng)求浪費(fèi)操作(圖12)。
3.6.2實(shí)現(xiàn)昆蟲圖片識(shí)別。昆蟲圖片識(shí)別功能作為微信小程序的主要功能,考慮到用戶的使用習(xí)慣,應(yīng)放在系統(tǒng)醒目位置。將該功能按鈕放在進(jìn)入小程序的主頁(yè)頁(yè)面。上傳圖片應(yīng)保證頁(yè)面跳轉(zhuǎn)不過(guò)多,按鈕醒目且作用易于理解。此外為方便不同的應(yīng)用場(chǎng)景,圖片同時(shí)支持拍照上傳和手機(jī)相冊(cè)上傳。微信小程序自帶選擇二者來(lái)源圖片的函數(shù),但由于考慮到物體的照片效果,需要在相機(jī)中間加上取景框方便用戶對(duì)準(zhǔn)待識(shí)別的物體,于是用一個(gè)底部彈起的操作按鈕組件對(duì)2個(gè)來(lái)源的圖片進(jìn)行分別選擇(圖13)。
在個(gè)人中心頁(yè)面可查看上傳識(shí)別的圖片相冊(cè),點(diǎn)擊圖片后便得到當(dāng)時(shí)反饋的識(shí)別結(jié)果,可在相冊(cè)頁(yè)面對(duì)圖片信息進(jìn)行編輯刪除操作。
3.6.3實(shí)現(xiàn)信息報(bào)告功能。信息報(bào)告功能頁(yè)面有2個(gè)進(jìn)入方式:一是直接從下方導(dǎo)航欄直接進(jìn)入;另外如果用戶對(duì)上傳圖片識(shí)別結(jié)果不滿意可在識(shí)別結(jié)果頁(yè)面點(diǎn)擊進(jìn)入信息報(bào)告頁(yè)。用戶報(bào)告昆蟲信息時(shí)也需要獲得身份授權(quán)和位置信息,并根據(jù)提示完善相關(guān)提交表。通過(guò)對(duì)昆蟲的信息報(bào)告完善后臺(tái)的昆蟲庫(kù),提高算法識(shí)別的昆蟲種類和識(shí)別準(zhǔn)確度。此外在信息報(bào)告的主頁(yè)面還可查看信息上傳歷史(圖14)。
圖12 個(gè)人中心頁(yè)面Fig.12 Personal Center page
圖13 圖片上傳主頁(yè)面Fig.13 Photos uploaded to the main page
3.6.4實(shí)現(xiàn)信息庫(kù)相關(guān)功能。針對(duì)昆蟲數(shù)據(jù)庫(kù)設(shè)置了2個(gè)功能,包括昆蟲的庫(kù)內(nèi)模糊搜索和昆蟲按科名進(jìn)行分類展示,主要在后端mapper層里利用SQL語(yǔ)言的相關(guān)功能實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的模糊搜索和對(duì)全庫(kù)物種進(jìn)行分類,再根據(jù)不同類別進(jìn)行查找并展示(圖15)。
3.7 識(shí)別結(jié)果實(shí)現(xiàn)返回識(shí)別結(jié)果如圖16所示。對(duì)單一圖片識(shí)別展示3種識(shí)別結(jié)果,分別以準(zhǔn)確率的高低由大到小以表格形式進(jìn)行展示,下方展示上傳的時(shí)間和位置信息。此外如果用戶對(duì)展示結(jié)果有疑問(wèn),可以對(duì)該結(jié)果信息進(jìn)行質(zhì)詢報(bào)告,頁(yè)面會(huì)跳轉(zhuǎn)至信息報(bào)告頁(yè)面,將相關(guān)數(shù)據(jù)傳至后臺(tái)服務(wù)器。
系統(tǒng)測(cè)試主要為上機(jī)測(cè)試,包括系統(tǒng)的功能測(cè)試和性能測(cè)試,對(duì)系統(tǒng)的各模塊進(jìn)行測(cè)試,確保系統(tǒng)的可靠性和穩(wěn)定性。
4.1 測(cè)試環(huán)境及測(cè)試準(zhǔn)備該系統(tǒng)主要由微信小程序客戶端和后端組成,為方便進(jìn)行調(diào)試觀測(cè)準(zhǔn)確測(cè)試數(shù)據(jù),測(cè)試前端為微信開發(fā)者工具,版本為1.05,模擬機(jī)型號(hào)為iPhone 5,IOS版本號(hào)為8。后端運(yùn)行工具為eclipse 4.6,服務(wù)器為tomcat服務(wù)器,版本號(hào)為9.0.38,系統(tǒng)為Windows 10.0.17763,Java版本為Java 1.8,MySQL版本為MySQL 8.0.17。
4.2 系統(tǒng)功能測(cè)試對(duì)微信小程序進(jìn)行功能測(cè)試,測(cè)試用例包含主要功能模塊,包括識(shí)別功能模塊、注冊(cè)登錄模塊、信息報(bào)告模塊、數(shù)據(jù)庫(kù)功能模塊,測(cè)試情況如表1所示。
4.3 系統(tǒng)性能測(cè)試性能測(cè)試主要利用微信開發(fā)者工具測(cè)試觀察網(wǎng)絡(luò)請(qǐng)求并返回?cái)?shù)據(jù)的時(shí)間,測(cè)試情況如表2所示。
圖14 信息報(bào)告頁(yè)面Fig.14 Information report page
圖15 數(shù)據(jù)庫(kù)功能頁(yè)面Fig.15 Database function page
圖16 識(shí)別結(jié)果頁(yè)面Fig.16 Recognition result page
該研究的項(xiàng)目利用當(dāng)前移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展趨勢(shì),考慮微信小程序相比于其他移動(dòng)應(yīng)用的優(yōu)點(diǎn),基于入侵昆蟲學(xué)以及相關(guān)生態(tài)知識(shí),根據(jù)應(yīng)用成熟的開發(fā)框架與技術(shù)路線,開發(fā)設(shè)計(jì)了一款針對(duì)入侵昆蟲的識(shí)別微信小程序。經(jīng)測(cè)試,該系統(tǒng)能滿足系統(tǒng)設(shè)計(jì)需求,擁有完善的功能與性能,彌補(bǔ)了市面上入侵昆蟲識(shí)別軟件缺陷,推廣前景巨大。與其他動(dòng)植物識(shí)別軟件相比,準(zhǔn)確率表現(xiàn)優(yōu)秀,能夠較好滿足用戶的相關(guān)需求,極大方便針對(duì)入侵昆蟲的識(shí)別與防治,并且對(duì)田間害蟲的防治有相當(dāng)幫助,在應(yīng)用推廣、知識(shí)科普以及科研數(shù)據(jù)收集方面具有巨大潛力。
接下來(lái)會(huì)對(duì)該系統(tǒng)后端設(shè)計(jì)搭建,對(duì)前端上傳信息進(jìn)行可視化展示,對(duì)關(guān)鍵數(shù)據(jù)進(jìn)行分析,提供調(diào)整數(shù)據(jù)庫(kù)的可視化頁(yè)面,并考慮綜合性強(qiáng)的應(yīng)用場(chǎng)景應(yīng)用監(jiān)控檢測(cè)系統(tǒng),實(shí)時(shí)識(shí)別傳回?cái)?shù)據(jù)。另外基于用戶上傳的有效昆蟲信息,考慮繼續(xù)應(yīng)用tensorflow平臺(tái)對(duì)識(shí)別算法繼續(xù)進(jìn)行訓(xùn)練,以提高識(shí)別準(zhǔn)確率和識(shí)別效率,完善用戶的使用體驗(yàn)。
表1 系統(tǒng)功能測(cè)試結(jié)果Table 1 System function test results
表2 系統(tǒng)性能測(cè)試結(jié)果Table 2 System performance test results