袁春東,王雷,劉占林
(南通市測繪院有限公司,江蘇 南通 226006)
近年來,各地為加強城市園林建設(shè)的管理,紛紛開展城市園林綠化調(diào)查,承接和實施此類項目的多為測繪單位。通過多個調(diào)查項目的實施,我們發(fā)現(xiàn)一般的地級市城區(qū)園林樹木種類能達到300多種,縣級城區(qū)園林樹木種類也近200種[1]。而測繪人員是園林樹木識別的“門外漢”,如何讓項目外業(yè)調(diào)查人員迅速掌握園林樹木識別方法和準確辨別樹木名稱成為保障項目實施質(zhì)量的關(guān)鍵。
外業(yè)調(diào)查是園林綠化調(diào)查的主體,而樹種是重要的調(diào)查因子和外業(yè)調(diào)查的基礎(chǔ)。能夠在調(diào)查現(xiàn)場實時、準確、快速地查詢到樹木學名,是外業(yè)調(diào)查中亟待解決的問題。調(diào)查人員在野外樹種識別過程中,特別希望利用一個便攜的樹種識別工具,幫助他們以盡量少的樹木形態(tài)特征輸入來快速準確地檢索樹種。為此我們設(shè)計并開發(fā)了基于安卓手機和平板電腦等移動平臺的園林樹木輔助查詢識別系統(tǒng),輔助外業(yè)調(diào)查人員進行現(xiàn)場樹木名稱查詢和種類識別,并作為他們學習園林樹木識別的輔助工具。
通過歸納總結(jié)園林樹木的生物學特征[2],建立樹木形態(tài)特征屬性集和各樹種形態(tài)特征的屬性數(shù)據(jù)集,收集整理園林樹木的圖片和文字信息,建立園林樹木的信息庫;基于安卓手機和平板電腦等移動平臺開發(fā)系統(tǒng),在系統(tǒng)內(nèi)選擇輸入樹木的形態(tài)特征屬性,與信息庫內(nèi)各樹種形態(tài)特征的屬性數(shù)據(jù)集進行匹配檢索,查找出符合條件的樹木名稱,通過調(diào)閱樹木的圖片或文字介紹,現(xiàn)場與調(diào)查樹木進行比對,輔助準確識別樹木種類。系統(tǒng)開發(fā)流程如圖1所示。
圖1 系統(tǒng)開發(fā)流程圖
Android操作系統(tǒng)因其功能強大、使用方便、價格便宜且是開源性操作系統(tǒng),已經(jīng)成為世界上最受歡迎的智能手機平臺,因此本系統(tǒng)采用Android平臺開發(fā)。Android軟件平臺主要由五部分構(gòu)成,如圖2所示,它們分別是:關(guān)鍵應用程序、應用程序框架和組件、C/C++函數(shù)庫、Java程序運行環(huán)境、優(yōu)化了的Linux內(nèi)核,為移動端打造真正開放和完整的移動軟件,主要使用于智能手機和平板電腦等移動設(shè)備。Android平臺具有良好的開發(fā)性,易于實現(xiàn)數(shù)據(jù)存儲、數(shù)據(jù)查詢和數(shù)據(jù)展現(xiàn)等功能。數(shù)據(jù)庫采用Android內(nèi)置的輕量級關(guān)系型數(shù)據(jù)庫SQLite。它占用的資源非常少,所以很多嵌入式設(shè)備都是用它來存儲數(shù)據(jù)。
Android平臺為開發(fā)者提供了源碼開放的軟件開發(fā)包(SDK),它包含了使用Java語言開發(fā)Android平臺應用的必要工具和組件(API)。進行開發(fā)前先要建立合適的開發(fā)環(huán)境,其中基于Java的整合型可擴展平臺Eclipse是我們開發(fā)工具的首選。
圖2 Android系統(tǒng)架構(gòu)圖
如圖3所示,主要包括按樹木名稱查詢、按樹木形態(tài)查詢和按樹木科屬查詢以及按樹木名稱、樹木形態(tài)組合查詢等,可以查看樹木的各部位圖片信息、文字信息以及有哪些相似樹種和同屬樹種。
圖3 系統(tǒng)功能圖
作為園林樹木輔助查詢識別系統(tǒng)的基礎(chǔ)數(shù)據(jù),需先整理園林樹木識別圖庫,圖庫采用分級文件夾的方式對園林樹木圖片進行存放。在名為“園林樹木識別圖庫”的一級目錄下,按照樹木的“科名+屬名”方法建立二級子目錄,如“薔薇科桃屬”;在二級子目錄下按照樹木中文學名建立三級目錄,如“榆葉梅”。在三級目錄下按照樹木的“株態(tài)、樹干、枝、葉、花、果”命名并順序存放相應圖片,要求圖片清晰并能準確反映樹木形態(tài)和特征,如可能的情況下再存放一些四季形態(tài)的圖片。
為系統(tǒng)查詢和識別需要,還需編制園林樹木識別特征表,采用Excel表格式,分Sheet1表和Sheet2表。Shee1表里存放的是樹木的形態(tài)特征術(shù)語,在綜合考慮各查詢要素全面性和系統(tǒng)內(nèi)查詢條件的下級展開需要后,我們將樹木部位分為形態(tài)、樹形、樹皮、樹皮色、枝干、小枝、葉序、葉脈、葉形、葉先端、葉緣、葉片、復葉、花、花期、果16類,與每一類配套的形態(tài)術(shù)語為描述樹木形態(tài)的術(shù)語,考慮到外業(yè)調(diào)查人員多為非園藝專業(yè)人員,術(shù)語為專業(yè)叫法和通俗叫法的組合。如“葉序”的形態(tài)術(shù)語包括對生、互生、近對生、交互對生、輪生、螺旋狀生、簇生、輪狀簇生、復葉對生、復葉互生、2針一束、3針一束、5針一束、多針一束,“果”的形態(tài)術(shù)語包括干果、莢果、翅果、球形果、開口果、刺球果、念珠果、絨毛果、壇狀果、燈籠果、小黑果、小綠果、小紅果、小黃果、小灰果、小白果。如表1所示。
形態(tài)術(shù)語表 表1
續(xù)表1
Sheet2表里存放的是樹木的名稱、代碼、主要識別特征、科、屬、別稱、相似樹種、詳細介紹,“主要識別特征”欄內(nèi)放置Sheet1表內(nèi)規(guī)定的形態(tài)術(shù)語。如表2所示:
樹木基本信息表 表2
系統(tǒng)采用Android內(nèi)置的輕量級關(guān)系型數(shù)據(jù)庫SQLite作為數(shù)據(jù)庫,系統(tǒng)運行需要基礎(chǔ)數(shù)據(jù)的支持,即園林樹木識別圖庫和園林樹木識別特征表,需要將它們放在系統(tǒng)內(nèi)置存儲卡上,通過編寫的程序?qū)@林樹木識別特征表導入到對應的數(shù)據(jù)庫表中,這樣就實現(xiàn)了系統(tǒng)與數(shù)據(jù)庫的連接。通過用戶輸入的樹木名稱(代碼)、樹木形態(tài)及科屬,去后臺通過模糊查詢的方式獲取對應的樹木名稱,再去園林樹木識別圖庫中找到該樹木名稱的圖片。因為考慮到圖庫文件占用的內(nèi)存存儲空間比較大,Android平臺中應用程序?qū)D片的大小也有限制,所以我們對圖庫文件進行了等比例等質(zhì)量壓縮,確保圖片清晰,不模糊,外觀不變形。算法如下。
public static Bitmap getimage(String srcPath,int width,int height) {
BitmapFactory.Options newOpts=new BitmapFactory.Options();
newOpts.inJustDecodeBounds=true;
Bitmap bitmap=BitmapFactory.decodeFile(srcPath,newOpts);newOpts.inJustDecodeBounds=false;
int w=newOpts.outWidth;
int h=newOpts.outHeight;
float hh=height;
float ww=width;
int be=1;
if (w > h && w > ww) {
be=(int) (newOpts.outWidth / ww);
} else if (w < h && h > hh) {
be=(int) (newOpts.outHeight / hh);
為了有效的防御和減輕氣象災害,保障人民生命財產(chǎn)安全,國家各級部門不斷制定各類防范措施,取得了一定的效果,對于社會發(fā)展起到一定的推動作用。但由于影響預警機制建立和有效運行的因素眾多,因而在實際的工作中,仍存在一定的問題,制約了農(nóng)業(yè)氣象預警的發(fā)展。
}
if (be <= 0)
be=1;
newOpts.inSampleSize=be;
bitmap=BitmapFactory.decodeFile(srcPath,newOpts);
return compressImage(bitmap);
}
ByteArrayOutputStream baos=new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG,100,baos);
int options=100;
while (baos.toByteArray().length / 1024>100) {
baos.reset();
options -= 10;
image.compress(Bitmap.CompressFormat.JPEG,options,baos);
}
ByteArrayInputStream isBm=new ByteArrayInputStream(baos.toByteArray());
Bitmap bitmap=BitmapFactory.decodeStream(isBm,null,null);
return bitmap;
}
其中樹木圖片展示用到了ViewPager,它是Android擴展包v4包中的類,可以用來實現(xiàn)屏幕間的自由切換,通過反復瀏覽樹木各部位圖片信息大大加深了用戶對該樹木品種的記憶,也為日后識別該樹木品種打下了基礎(chǔ)。
為了讓系統(tǒng)界面簡潔和易于操作,我們對系統(tǒng)界面進行了精心設(shè)計。系統(tǒng)的三種查詢方式為按樹木名稱、按樹木形態(tài)、按樹木科屬,其中按樹木名稱和樹木形態(tài)可組合查詢,點擊【全部】則將圖庫中全部樹木名稱均顯示出來。如圖4所示。
圖4 系統(tǒng)主界面
勾選“按樹木名稱查詢”后,通過輸入樹木名稱、別稱或代碼進行模糊查詢。系統(tǒng)先檢索園林樹木識別特征表,檢索到相關(guān)信息并讀取樹木名稱,再根據(jù)樹木名稱檢索圖庫中的三級目錄名稱來調(diào)取圖片,并將檢索到的信息按樹木名稱依次顯示在系統(tǒng)界面下方列表,同時顯示代碼、類型(灌木、喬木還是水生植物等)、科屬。如圖5所示。
圖5 樹木名稱查詢
點擊列表某一行,可以查看相關(guān)樹種信息,默認選擇是圖庫,可自己選擇其他查看項,如詳細介紹、相似樹種、同屬樹種。查看圖庫時,可滑動循環(huán)及放大縮小查看圖片信息,標題欄顯示的是圖片名稱。按移動平臺自帶的返回鍵返回系統(tǒng)主界面,可以繼續(xù)查看列表其他樹種的各項信息。
勾選“按樹木形態(tài)查詢”后,系統(tǒng)讀取園林樹木識別特征表中sheet1表的樹木部位名稱展開二級查詢菜單,顯示可供選擇的樹木部位。選擇要查詢的樹木部位(可單選或組合),下方會顯示對應文本框,點擊文本框后,系統(tǒng)讀取園林樹木識別特征表中形態(tài)術(shù)語供用戶選擇特征。如圖6、圖7所示。
圖6 樹木形態(tài)查詢
圖7 選擇樹木特征
點擊【查詢】,系統(tǒng)根據(jù)園林樹木識別特征表中Sheet2表的主要識別特征進行檢索,將檢索到的完全符合特征條件的樹木名稱以列表形式顯示。此時將“按樹木形態(tài)查詢”前的勾選框取消,可收回二級查詢菜單,讓界面下方列表多顯示幾行信息,以方便用戶瀏覽。
勾選“按樹木科屬查詢”后,系統(tǒng)檢索園林樹木識別特征表中sheet1表的科、屬信息,將檢索到的符合條件的樹木名稱以列表形式顯示。點擊【清空】,清空列表內(nèi)容,如圖8所示。圖9為點擊列表某一行查看該樹木的圖片信息。
圖8 樹木科屬查詢
圖9 樹木圖片展示
通過南通市園林綠化調(diào)查項目的生產(chǎn)實踐,技術(shù)人員先后掌握了200多種樹木的特征,在對各類樹種歸納總結(jié)的基礎(chǔ)上,研發(fā)了園林樹木輔助查詢識別系統(tǒng)。該系統(tǒng)操作方便、識別率高,有效解決了外業(yè)調(diào)查人員不認識樹、忘記樹名或代碼、對相似樹種判斷不準等問題,大大提高了園林樹木調(diào)查工作效率,保障了園林綠化調(diào)查項目的項目進度和成果質(zhì)量。同時系統(tǒng)也存在一些不足之處,主要是資料收集方面還需要擴充更多的植物種類,可增加每種植物的基本信息和圖片信息等,還有系統(tǒng)的研發(fā)主要面向于單機的使用,單機系統(tǒng)具有局限性,數(shù)據(jù)及程序的共享性不高,還有待通過生產(chǎn)實踐進一步完善[6]。