王 科,劉豐儉
(江蘇工程職業(yè)技術(shù)學院 信息工程學院,江蘇 南通 226007)
隨著國民經(jīng)濟的快速發(fā)展,人們的生活方式、消費結(jié)構(gòu)有了較大的改變,生活垃圾產(chǎn)量與日俱增,垃圾處理問題變得越發(fā)嚴峻。目前,通常采取掩埋、焚燒或堆肥等方式處理生活垃圾,易造成土壤、空氣和水資源等環(huán)境污染。有效處理日益增加的生活生產(chǎn)垃圾,更好地回收利用垃圾資源,促進經(jīng)濟的可持續(xù)發(fā)展,有著重要的現(xiàn)實意義。實施垃圾分類,可顯著降低垃圾處理成本,提高垃圾循環(huán)再利用價值,減少資源浪費。但是,由于生活垃圾種類龐雜,許多人并不清楚垃圾的準確類別,導(dǎo)致亂投放,反而增加了垃圾處理的人力和財力。因而,研究一個有效的垃圾分類系統(tǒng)尤為重要。針對垃圾的收集分類,國內(nèi)外市場推出了智能垃圾桶[1-2]。智能垃圾桶大多基于紅外感應(yīng)器、距離感應(yīng)器進行設(shè)計,還未能實現(xiàn)垃圾識別自動分類。近年來,深度學習技術(shù)廣泛應(yīng)用于計算機視覺特別是圖像分類領(lǐng)域,為垃圾識別研究提供了新方向[3-5]。本文探究將ResNet 網(wǎng)絡(luò)模型和遷移學習相結(jié)合的垃圾分類方法,利用樹莓派硬件設(shè)計開發(fā)垃圾智能分類系統(tǒng),以期提升日常生活垃圾分類的準確性和處理效率。
如圖1 所示,基于樹莓派的垃圾智能分類系統(tǒng)的總體結(jié)構(gòu)分為硬件和軟件系統(tǒng)兩部分。硬件系統(tǒng)包含樹莓派4B 主控板、高清攝像頭、驅(qū)動電路及四個舵機。四個舵機分別連接可回收垃圾、廚余垃圾、其他垃圾和有害垃圾桶蓋,當舵機開啟時,轉(zhuǎn)動一定角度,驅(qū)動相應(yīng)的垃圾桶蓋打開。軟件系統(tǒng)包含提供用戶交互的前端界面和后端處理模塊。
圖1 垃圾智能分類系統(tǒng)結(jié)構(gòu)
垃圾智能分類系統(tǒng)的工作流程如下:
1)用戶將垃圾置于識別區(qū)域,高清攝像頭采集垃圾圖片,并傳輸至樹莓派后端處理模塊;
2)后端處理模塊調(diào)用已訓練的深度神經(jīng)網(wǎng)絡(luò)進行模型推理,得到識別結(jié)果;
3)根據(jù)不同的識別結(jié)果驅(qū)動不同的舵機進行相應(yīng)動作,使相應(yīng)類別的垃圾桶蓋自動開合。
系統(tǒng)所需的硬件模塊之一是圖像采集模塊,其功能為連接攝像頭以獲取由攝像頭采集的圖片;模塊之二是舵機控制模塊,連接四個舵機并分別進行控制,用于根據(jù)后端處理模塊識別的垃圾種類驅(qū)動舵機,使相應(yīng)的垃圾桶蓋打開,垃圾進入對應(yīng)的箱體。為了能正常運行后端處理服務(wù)程序,需要較高的硬件處理能力。樹莓派具有體型較小、功耗較低、性能強大、便于攜帶等諸多優(yōu)點,作為嵌入式技術(shù)被廣泛應(yīng)用于工業(yè)、科研等領(lǐng)域。為滿足上述硬件處理要求,選取最新一款型號為4B的樹莓派作為系統(tǒng)的開發(fā)板,其具有64 位1.5 GHz 四核CPU,2G DDR4 內(nèi)存,且搭載博通Videocore-IV型GPU,擁有串行、USB、Wifi、藍牙等接口,可運行Linux 操作系統(tǒng)。
垃圾智能分類系統(tǒng)的硬件連線如圖2 所示。攝像頭通過USB 口與樹莓派相連接,提供圖像采集功能;舵機驅(qū)動板采用PCA9685,通過產(chǎn)生不同占空比的PWM 波控制舵機轉(zhuǎn)動相應(yīng)角度;樹莓派與PCA9685 驅(qū)動板間采用I2C 協(xié)議連接;為保障舵機驅(qū)動能力,PCA9685 單獨使用一路5 V電源進行供電;垃圾分類系統(tǒng)樣品中采用SG90 舵機,力矩為0.147 N·m,工作角速度為200(°)/s,滿足系統(tǒng)工作要求。
圖2 垃圾智能分類系統(tǒng)硬件連線
硬件系統(tǒng)的工作流程如下:
1)樹莓派通過OpenCV 調(diào)用攝像頭視頻流,獲取視頻和圖片數(shù)據(jù);
2)獲取的視頻流和圖片數(shù)據(jù)經(jīng)后端處理模塊的API 接口傳至后端;
3)等待后端處理結(jié)束得到圖片識別結(jié)果;
4)根據(jù)識別結(jié)果驅(qū)動相應(yīng)舵機執(zhí)行動作,由Python 的Adafruit_PCA9685 包控制舵機操作。
前端頁面功能是提供用戶與系統(tǒng)的交互接口,用戶通過瀏覽器使用系統(tǒng)功能。用Vue.js 框架開發(fā)前端頁面代碼,通過ElementUI 組件提供頁面中的插件功能,最后采用Webpack 工具構(gòu)建完整結(jié)構(gòu),以便于開發(fā)人員快速搭建頁面。垃圾智能分類系統(tǒng)的前端界面包含預(yù)覽和結(jié)果界面頁,見圖3。預(yù)覽界面的功能主要是當垃圾置于識別區(qū)域時實時顯示垃圾圖像;另外,頁面中還有識別組件,點擊識別按鈕可傳遞圖像至后端程序。結(jié)果頁面主要展示當前垃圾種類的識別結(jié)果,并且通過控制組件,通知后端程序驅(qū)動相應(yīng)的舵機操作。
圖3 前端架構(gòu)組成
基于Flask 框架搭建的垃圾識別平臺后端程序用于垃圾圖像的處理及推理。Flask 框架是使用Python 語言開發(fā)Web 應(yīng)用的主流框架,具有小巧、輕量級的特點,適合中小型項目開發(fā)。Flask 框架使用MVC 設(shè)計模式,降低了代碼的耦合性。另外,F(xiàn)lask 自帶Web 服務(wù)器,在非生產(chǎn)環(huán)境中可以直接運行,無需使用Apache 或Nginx 服務(wù)器。后端架構(gòu)如圖4 所示,其中包含舵機驅(qū)動、圖像處理和圖像推理三個模塊。舵機驅(qū)動模塊主要通過上位機程序產(chǎn)生相應(yīng)的PWM 波驅(qū)動舵機進行操作;圖像處理模塊通過OpenCV 生成視頻流,當用戶點擊識別按鈕時,生成一張靜態(tài)圖像并傳遞給圖像推理模塊處理;圖像推理模塊調(diào)用已訓練的卷積神經(jīng)網(wǎng)絡(luò)進行預(yù)測并輸出識別結(jié)果。
圖4 后端架構(gòu)組成
舵機驅(qū)動模塊的關(guān)鍵代碼如表1 所示。首先創(chuàng)建一個PWM 實例,然后設(shè)置PWM 波頻率,最后調(diào)用set_pwm 方法產(chǎn)生PWM 波。servo1 參數(shù)控制PWM 波高電平時間,通過查找舵機的參數(shù)手冊,可得舵機旋轉(zhuǎn)角度angle 和servo1 參數(shù)間的計算關(guān)系,如式(1)所示。
表1 舵機驅(qū)動關(guān)鍵代碼
其中,s 為servo1 參數(shù),a 為旋轉(zhuǎn)角度angle,f 為PWM 波的頻率freq。
圖像處理模塊的關(guān)鍵代碼如表2 所示。通過VideoCapture 方法獲取視頻數(shù)據(jù),保存圖片。當用戶在前端點擊識別按鈕時,調(diào)用此代碼傳遞圖像至圖像推理模塊。
表2 圖像處理關(guān)鍵代碼
在圖像推理模塊中,基于卷積神經(jīng)網(wǎng)絡(luò)搭建ResNet50 網(wǎng)絡(luò)模型,對ImageNet 數(shù)據(jù)集進行預(yù)訓練,采用數(shù)據(jù)增強、Dropout、Adam 和早停機制等關(guān)鍵技術(shù)[6-7]建立訓練模型如圖5 所示。由圖5 可見,ResNet50 網(wǎng)絡(luò)分為5 個階段層,其中第一層結(jié)構(gòu)較為簡單,即對輸入進行卷積計算,可視其為對輸入圖像的預(yù)處理。后4 個階段由殘差網(wǎng)絡(luò)構(gòu)成,分別用已設(shè)計的殘差塊依次疊加3,4,6,3次,然后進行全連接,再經(jīng)歸一化形成各自類別的概率。采用TensorFlow 的Keras 完成網(wǎng)絡(luò)模型的逐層構(gòu)建和精細化調(diào)參。
圖5 ResNet50 網(wǎng)絡(luò)模型
選取華為云人工智能大賽提供的垃圾圖像數(shù)據(jù)集進行訓練和測試。數(shù)據(jù)集涵蓋了常見的生活垃圾類別,按最新標準分成可回收垃圾、廚余垃圾、有害垃圾和其他垃圾四大類。如表3 所示,數(shù)據(jù)集共有圖片14 802 張,其中最多的是可回收垃圾,有圖像8 611 張,最少的是有害垃圾,有圖像1150張。
表3 垃圾數(shù)據(jù)集類別及圖像數(shù)量
垃圾圖像標簽由兩部分組成,包括4 大類和40 個小類。其中可回收垃圾包含23 個小類別,有害垃圾、廚余垃圾及其他垃圾分別包含3 個、8 個及6 個小類別。具體分類如圖6 所示。
圖6 垃圾數(shù)據(jù)集數(shù)據(jù)分類
對數(shù)據(jù)集進行數(shù)據(jù)增強及歸一化處理后,在數(shù)據(jù)集中隨機抽取80 %數(shù)據(jù)作為訓練集,20 %數(shù)據(jù)作為測試集,進行訓練,結(jié)果如圖7 所示。模型在26 輪訓練結(jié)束后觸發(fā)了早停機制,提前終止訓練。最終得到垃圾識別訓練準確率為98.7 %,測試準確率為90.8 %。
圖7 ResNet50 模型訓練結(jié)果
以Python 為編譯語言開發(fā)垃圾智能分類系統(tǒng),其中圖像推理模塊使用TensorFlow 框架,系統(tǒng)部署方案采用Flask 框架,Web 端界面采用Vue.js框架配合ElementUI 組件庫進行構(gòu)建開發(fā)。最后,采用Electron 將整個Web 應(yīng)用打包,并部署于樹莓派的Raspbian 操作系統(tǒng),實現(xiàn)模型的系統(tǒng)化與應(yīng)用化。
搭建的系統(tǒng)實物如圖8 所示。其中:樹莓派與攝像頭之間通過USB 口連接,與PCA9685 之間通過I2C 協(xié)議連接,四個垃圾桶分別由四個舵機控制打開和關(guān)閉。
圖8 垃圾智能分類系統(tǒng)實物
前端預(yù)覽界面如圖9,其中a)是攝像頭實時識別窗口,b)為識別按鈕界面。當用戶點擊識別按鈕時,對當前的預(yù)覽圖像進行識別。
圖9 前端預(yù)覽界面
在識別窗口放置一個易拉罐,點擊識別按鈕,得到的頁面結(jié)果如圖10 所示。由圖10 可以看到,垃圾智能分類系統(tǒng)準確識別易拉罐為“可回收垃圾”,并打開相應(yīng)的舵機,控制垃圾桶蓋打開。
圖10 垃圾智能分類識別測試結(jié)果
選取6 種不同的垃圾進行識別測試,結(jié)果如表4 所示。由表4 可見,垃圾智能分類系統(tǒng)對6 種垃圾識別無誤,舵機能很好地驅(qū)動相應(yīng)的垃圾桶撥板動作,實現(xiàn)垃圾正確分類回收。測試結(jié)果表明,設(shè)計的系統(tǒng)能高效完成常見垃圾的自動識別與分類,滿足智能垃圾桶控制要求。
表4 垃圾自動分類系統(tǒng)測試結(jié)果
基于樹莓派硬件設(shè)計了一種垃圾智能識別分類系統(tǒng),通過ResNet 網(wǎng)絡(luò)模型與遷移學習相結(jié)合的圖像分類方法進行垃圾識別,采用Vue.js 框架配合ElementUI 組件庫構(gòu)建開發(fā)Web 端界面,采用Flask 框架進行部署。測試結(jié)果顯示,所設(shè)計的垃圾分類系統(tǒng)軟硬件工作穩(wěn)定,能對常見的生活垃圾進行正確分類回收,在垃圾分類和環(huán)境保護方面具有良好的應(yīng)用前景。