楊天樂,錢寅森,武 威,孫成明,劉 濤
(1.江蘇省作物遺傳生理國家重點(diǎn)實(shí)驗(yàn)室/江蘇省作物栽培生理重點(diǎn)實(shí)驗(yàn)室/揚(yáng)州大學(xué) 農(nóng)學(xué)院,江蘇 揚(yáng)州 225009;2.江蘇省糧食作物現(xiàn)代產(chǎn)業(yè)技術(shù)協(xié)同創(chuàng)新中心/揚(yáng)州大學(xué),江蘇 揚(yáng)州 225009)
病害是影響水稻穩(wěn)產(chǎn)、高產(chǎn)的重要因素之一[1],常見的水稻病害有稻瘟病、紋枯病、白葉枯病等[2]。水稻在不同的生長發(fā)育時(shí)期都極易受到病害的侵染,倘若沒有及時(shí)發(fā)現(xiàn)并進(jìn)行防治,很可能會(huì)導(dǎo)致病害大面積發(fā)生,造成嚴(yán)重?fù)p失甚至絕收,同時(shí)也會(huì)使水稻品質(zhì)下降[3]。早期農(nóng)作物病害監(jiān)測通常是通過植保人員田間取樣來判斷病害的危害等級,或者通過施藥來提前預(yù)防,或是通過查詢水稻病害圖譜與病害信息進(jìn)行比對,但是這些方法普遍存在著專家依賴性大、效率低、污染環(huán)境識(shí)別錯(cuò)誤等缺陷。近年來隨著信息技術(shù)的高速發(fā)展,各類新興技術(shù)廣泛應(yīng)用于農(nóng)作物病害的監(jiān)測,并且多種作物的多項(xiàng)病害都已經(jīng)能夠成功進(jìn)行監(jiān)測[4-9]。
Python是一種高級編程語言[10-11],能夠提供比較完善的基礎(chǔ)代碼庫,覆蓋了網(wǎng)絡(luò)、文件、圖形用戶界面(GUI)、數(shù)據(jù)庫、文本等大量內(nèi)容,被稱作內(nèi)置電池(Batteries included)。用Python開發(fā)應(yīng)用程序,許多功能不必從零編寫,直接使用現(xiàn)成的代碼庫即可[12]。除了內(nèi)置的庫外,Python還有大量的第三方庫,可直接使用。
Matlab是MathWorks公司出品的一款涵蓋數(shù)值分析、數(shù)學(xué)建模、圖像處理等一系列功能的交互式編程軟件。Matlab應(yīng)用范圍極為廣泛,其強(qiáng)大的數(shù)據(jù)可視化功能、圖像處理工具箱內(nèi)置豐富的專業(yè)函數(shù),令其成為圖像處理的必備工具。
Python爬蟲從技術(shù)層面來講就是通過程序模擬瀏覽器請求站點(diǎn)的行為,把站點(diǎn)返回的HTML代碼/JSON數(shù)據(jù)/二進(jìn)制數(shù)據(jù)(圖片、視頻)爬到本地,進(jìn)而提取需要的數(shù)據(jù)[13-14]。相比其他語言和工具,Python語法優(yōu)美、代碼簡潔、開發(fā)效率高、支持的模塊多,相關(guān)的HTTP請求模塊和HTML解析模塊豐富。還有強(qiáng)大的爬蟲(Scrapy),以及成熟高效的爬蟲-遠(yuǎn)程字典服務(wù)(Scrapy-redis)分布式策略爬蟲框架,方便高效下載網(wǎng)頁;多線程、進(jìn)程模型成熟穩(wěn)定,多線程或進(jìn)程會(huì)優(yōu)化程序效率,提升整個(gè)系統(tǒng)下載和分析能力。Python具有非常優(yōu)秀的第三方包能夠模擬用戶代理(User agent)的行為構(gòu)造合適的請求,避免網(wǎng)站對于爬蟲的封殺。而且,調(diào)用其他接口較方便,但缺點(diǎn)在于對編碼的處理。
目前,關(guān)于病害診斷技術(shù)的報(bào)道較多,且Python爬蟲技術(shù)的應(yīng)用也較多,但利用Python爬蟲技術(shù)進(jìn)行病害圖像分類的研究較少。鑒于此,利用該技術(shù)進(jìn)行水稻不同種類病害圖像的爬取,并利用特征匹配技術(shù)對錯(cuò)誤圖像進(jìn)行剔除,以期完成水稻病害圖像的智能采集。
Python爬蟲技術(shù)、Matlab R 2018a圖像處理工具箱、百度圖像網(wǎng)站。
軟件運(yùn)行環(huán)境:Python 3.7.0,Matlab R 2018a版本。
1.2.1 圖像獲取 相比于人工,Python爬蟲技術(shù)能夠在短時(shí)間內(nèi)獲取更多的圖像。在病害識(shí)別過程中,水稻病害數(shù)據(jù)庫的內(nèi)存量越大對于識(shí)別的精度越高,基于此種目的,本研究技術(shù)路線如下(圖1)。
圖1 技術(shù)路線
在水稻病害Python爬蟲構(gòu)建中,首先調(diào)用以下4個(gè)模塊,即re、sys、urllib、requests,其中re模塊可以為使用者直接調(diào)用進(jìn)行正則匹配,減少了代碼編寫的繁雜程度,也使代碼更加簡便清晰;sys模塊同樣是Python中自帶的模塊,該模塊能夠向使用者提供對解釋器使用或維護(hù)的一些變量的訪問,以及與解釋器強(qiáng)烈交互的函數(shù),能夠更好地進(jìn)行數(shù)據(jù)的收集;urllib模塊在整個(gè)程序中提供上層接口,從而能夠從互聯(lián)網(wǎng)上讀取目標(biāo)圖像,同時(shí)此模塊相較于其他有類似功能的模塊優(yōu)勢突出、操作簡便、使用門檻低;requests模塊是提供網(wǎng)絡(luò)訪問的模塊,具有人性化的特點(diǎn)。通過以上4個(gè)模塊的調(diào)用,初步完成爬蟲基礎(chǔ)的構(gòu)建,調(diào)用代碼如下:
#coding=utf-8
import re
import sys
import urllib
import requests
通過定義函數(shù)構(gòu)建Python爬蟲程序的主體,設(shè)定1次獲取150張圖像,通過更改函數(shù)中的參數(shù),達(dá)到分別獲取胡麻葉斑病、白葉枯病、赤枯病、稻瘟病、紋枯病5種常見水稻病害圖像的目的。
1.2.2 特征匹配 由于Python爬蟲在獲取圖像時(shí)完全依賴于關(guān)鍵詞搜索,所以存在將不符合要求的圖像誤判斷成目標(biāo)圖像的可能性,造成圖像獲取的不準(zhǔn)確性。本研究通過Matlab進(jìn)行特征匹配,并計(jì)算圖像間的相似度,篩選出同一病害的圖像,去除其他干擾項(xiàng),以提高水稻病害圖像獲取的準(zhǔn)確性。
利用Matlab進(jìn)行圖像紋理特征提取是非常成熟的手段,紋理特征提取方法眾多,本研究選取局部二值模式進(jìn)行特征提取。
本研究通過圖像的色彩特征和紋理特征值對圖像進(jìn)行相似度比較,本方法采用色調(diào)(H)、飽和度(S)、明度(V)顏色模型(HSV)及局部二值模式計(jì)算特征值。對于圖像相似度采用歐氏距離度量,在進(jìn)行圖像比較前,首先利用如下代碼對通過Python爬蟲技術(shù)獲取的病害圖像進(jìn)行批量處理,使所有待進(jìn)行特征匹配的圖像統(tǒng)一為215像素×215像素的尺寸,方便后期圖像特征值的計(jì)算和驗(yàn)證。
file_path=′G:pictures′;
img_path_list=dir(strcat(file_path,′*.jpg′));
img_num=length(img_path_list);
if img_num>0
for j=1:img_num
image_name=img_path_list(j).name;
image=imread(strcat(file_path,image_name));
image=imresize(image,[215 215]);
fprintf(′%d %d %s ′,i,j,strcat(file_path,image_name));
imwrite(image,strcat(′G:size′,image_name));
end
end
對統(tǒng)一尺寸處理后的圖像進(jìn)行進(jìn)一步處理,將其轉(zhuǎn)化為HSV空間(公式1)。
(1)
HSV空間是一種直觀的顏色模型,但為了能夠更好地使用顏色參數(shù),需要利用量化函數(shù)Quantificate對圖像H、S、V進(jìn)行量化,將其量化為36維向量(公式2)。
(2)
經(jīng)以上處理后,可得到基于HSV空間的顏色直方圖,可直觀比較圖像間的顏色差異。
研究發(fā)現(xiàn),通過顏色特征的確能提高病害圖像采集的準(zhǔn)確度,但在葉片上病害面積較小時(shí),僅通過顏色參數(shù)容易誤把病害圖像識(shí)別成非病害圖像,造成結(jié)果的不準(zhǔn)確,因此在顏色特征的基礎(chǔ)上又利用紋理特征對圖像進(jìn)行進(jìn)一步的處理。
利用局部二值模式對圖像進(jìn)行再處理,局部二值模式(公式3)能夠提取局部特征作為相似度評判依據(jù),具有旋轉(zhuǎn)不變性和灰度不變性等優(yōu)點(diǎn),結(jié)果以像素圖的形式記錄像素點(diǎn)和周圍像素點(diǎn)的差異。
(3)
其中,(χc,yc)是中心像素,亮度是ic;而in則是相鄰像素的亮度。
局部二值模式處理后,通過水稻紋理特征的比較,有助于進(jìn)行圖像相似度的判斷,大致可以判斷處理的2幅圖是否為同一類型圖像,有效縮小判斷的范圍,減小相似度判別的難度。顏色特征和紋理特征能夠有效地反映圖像間的相似性及差異性,但定性判斷無法為剔除錯(cuò)誤圖像提供直觀的依據(jù),研究中選擇利用歐式距離(公式4)來定量評定圖像間的相似度,歐氏距離越小說明相似度越高。
d(x,y)=
(4)
利用Python爬蟲技術(shù)采集水稻病害圖像能夠快速獲取目標(biāo)數(shù)量圖像,耗時(shí)主要受到網(wǎng)速和電腦配置的限制,但相較于手動(dòng)獲取速度優(yōu)勢明顯。在實(shí)際運(yùn)行過程中,由于所爬取網(wǎng)站本身的屏蔽作用,有可能造成圖像丟失,即獲取圖像數(shù)量少于預(yù)設(shè)值,除此之外,由于是通過關(guān)鍵詞進(jìn)行圖像的收集,在大量的圖像數(shù)據(jù)里難免出現(xiàn)非病害圖像,對圖像數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,結(jié)果如表1。
由表1可知,實(shí)際數(shù)量和目標(biāo)數(shù)量并不完全相同,但誤差在可接受的范圍內(nèi),本研究選取的5種水稻常見病害,除胡麻葉斑病外,提取的準(zhǔn)確率均高于50.00%,其中赤霉病提取效果最好,準(zhǔn)確率達(dá)到72.7%。
表1 Python爬蟲技術(shù)獲取的水稻病害圖像結(jié)果
通過特征匹配后,病害圖片的獲取準(zhǔn)確性大大提高,將歐氏距離值作為判斷的依據(jù),當(dāng)歐氏距離值小于或等于5時(shí),判斷為同一種病害圖像;當(dāng)歐氏距離值大于5時(shí),判斷為不屬于同一類型。
5種常見水稻病害通過特征匹配后的獲取結(jié)果如表2。
表2 特征匹配后獲取的水稻病害圖像結(jié)果
通過表2可知,利用特征匹配后病害圖像識(shí)別準(zhǔn)確性明顯提高,目標(biāo)病害的錯(cuò)檢率均低于6.00%,這表明本研究的方法能夠高效準(zhǔn)確地實(shí)現(xiàn)水稻常見病害智能獲取。
獲取水稻病害圖像對于及時(shí)準(zhǔn)確地進(jìn)行田間病害類型診斷具有積極意義,一些學(xué)者利用圖像分析技術(shù)識(shí)別病害種類,這種方法要求高,操作起來相對繁瑣[8];或者利用機(jī)器學(xué)習(xí)的方法進(jìn)行病害類別判斷[15-17],但這些方法存在原始樣本量不足的缺陷。然而,大部分病害在網(wǎng)絡(luò)上已經(jīng)存在大量的圖像資料,利用這些圖像資料可以較為直觀地進(jìn)行病害種類的判別。本研究利用Python爬蟲技術(shù)進(jìn)行水稻圖像的采集,極大地提高了病害分類工作的效率。另一方面,本研究針對爬蟲爬取圖像的不準(zhǔn)確性,利用圖像特征匹配進(jìn)行改善,并達(dá)到了較為準(zhǔn)確的水稻病害圖像采集的效果。
但本研究也存在一些不足,如在獲取過程中無法對圖像質(zhì)量進(jìn)行識(shí)別,這就導(dǎo)致在特征匹配時(shí)效果較差,造成病害類別判斷的誤差;同時(shí)由于網(wǎng)站對于爬蟲抓取的封殺,可能造成獲取數(shù)量低于預(yù)期目標(biāo),接下來的研究應(yīng)優(yōu)化爬蟲代碼以提高程序運(yùn)行的效率;針對圖像的特征匹配準(zhǔn)確性還有提升的空間,能夠綜合不同類別的特征,實(shí)現(xiàn)多特征融合,并優(yōu)化特征提取方式,提高圖像描述的準(zhǔn)確性及全面性。與此同時(shí),在圖像采集的效率上還有待提高,如何實(shí)現(xiàn)采集和特征匹配同步進(jìn)行并降低時(shí)間損耗是下一步研究的重點(diǎn)。從研究結(jié)果來看,不同類型的水稻病害采集準(zhǔn)確性各有不同,差異較大,造成這種現(xiàn)象的原因除技術(shù)本身外,還與網(wǎng)絡(luò)數(shù)據(jù)量有關(guān),針對不同類型的水稻病害考慮采用不同的識(shí)別算法,提高診斷的準(zhǔn)確性是一種有必要的嘗試。
本研究利用Python爬蟲技術(shù)和圖像特征匹配技術(shù)實(shí)現(xiàn)水稻病害的快速采集,提高了水稻病害識(shí)別的工作效率,為病害種類的快速判別提供一種新的技術(shù)手段,也為其他作物病害的研究提供了參考。