王 科,劉豐儉
(江蘇工程職業技術學院 信息工程學院,江蘇 南通 226007)
隨著國民經濟的快速發展,人們的生活方式、消費結構有了較大的改變,生活垃圾產量與日俱增,垃圾處理問題變得越發嚴峻。目前,通常采取掩埋、焚燒或堆肥等方式處理生活垃圾,易造成土壤、空氣和水資源等環境污染。有效處理日益增加的生活生產垃圾,更好地回收利用垃圾資源,促進經濟的可持續發展,有著重要的現實意義。實施垃圾分類,可顯著降低垃圾處理成本,提高垃圾循環再利用價值,減少資源浪費。但是,由于生活垃圾種類龐雜,許多人并不清楚垃圾的準確類別,導致亂投放,反而增加了垃圾處理的人力和財力。因而,研究一個有效的垃圾分類系統尤為重要。針對垃圾的收集分類,國內外市場推出了智能垃圾桶[1-2]。智能垃圾桶大多基于紅外感應器、距離感應器進行設計,還未能實現垃圾識別自動分類。近年來,深度學習技術廣泛應用于計算機視覺特別是圖像分類領域,為垃圾識別研究提供了新方向[3-5]。本文探究將ResNet 網絡模型和遷移學習相結合的垃圾分類方法,利用樹莓派硬件設計開發垃圾智能分類系統,以期提升日常生活垃圾分類的準確性和處理效率。
如圖1 所示,基于樹莓派的垃圾智能分類系統的總體結構分為硬件和軟件系統兩部分。硬件系統包含樹莓派4B 主控板、高清攝像頭、驅動電路及四個舵機。四個舵機分別連接可回收垃圾、廚余垃圾、其他垃圾和有害垃圾桶蓋,當舵機開啟時,轉動一定角度,驅動相應的垃圾桶蓋打開。軟件系統包含提供用戶交互的前端界面和后端處理模塊。

圖1 垃圾智能分類系統結構
垃圾智能分類系統的工作流程如下:
1)用戶將垃圾置于識別區域,高清攝像頭采集垃圾圖片,并傳輸至樹莓派后端處理模塊;
2)后端處理模塊調用已訓練的深度神經網絡進行模型推理,得到識別結果;
3)根據不同的識別結果驅動不同的舵機進行相應動作,使相應類別的垃圾桶蓋自動開合。
系統所需的硬件模塊之一是圖像采集模塊,其功能為連接攝像頭以獲取由攝像頭采集的圖片;模塊之二是舵機控制模塊,連接四個舵機并分別進行控制,用于根據后端處理模塊識別的垃圾種類驅動舵機,使相應的垃圾桶蓋打開,垃圾進入對應的箱體。為了能正常運行后端處理服務程序,需要較高的硬件處理能力。樹莓派具有體型較小、功耗較低、性能強大、便于攜帶等諸多優點,作為嵌入式技術被廣泛應用于工業、科研等領域。為滿足上述硬件處理要求,選取最新一款型號為4B的樹莓派作為系統的開發板,其具有64 位1.5 GHz 四核CPU,2G DDR4 內存,且搭載博通Videocore-IV型GPU,擁有串行、USB、Wifi、藍牙等接口,可運行Linux 操作系統。
垃圾智能分類系統的硬件連線如圖2 所示。攝像頭通過USB 口與樹莓派相連接,提供圖像采集功能;舵機驅動板采用PCA9685,通過產生不同占空比的PWM 波控制舵機轉動相應角度;樹莓派與PCA9685 驅動板間采用I2C 協議連接;為保障舵機驅動能力,PCA9685 單獨使用一路5 V電源進行供電;垃圾分類系統樣品中采用SG90 舵機,力矩為0.147 N·m,工作角速度為200(°)/s,滿足系統工作要求。

圖2 垃圾智能分類系統硬件連線
硬件系統的工作流程如下:
1)樹莓派通過OpenCV 調用攝像頭視頻流,獲取視頻和圖片數據;
2)獲取的視頻流和圖片數據經后端處理模塊的API 接口傳至后端;
3)等待后端處理結束得到圖片識別結果;
4)根據識別結果驅動相應舵機執行動作,由Python 的Adafruit_PCA9685 包控制舵機操作。
前端頁面功能是提供用戶與系統的交互接口,用戶通過瀏覽器使用系統功能。用Vue.js 框架開發前端頁面代碼,通過ElementUI 組件提供頁面中的插件功能,最后采用Webpack 工具構建完整結構,以便于開發人員快速搭建頁面。垃圾智能分類系統的前端界面包含預覽和結果界面頁,見圖3。預覽界面的功能主要是當垃圾置于識別區域時實時顯示垃圾圖像;另外,頁面中還有識別組件,點擊識別按鈕可傳遞圖像至后端程序。結果頁面主要展示當前垃圾種類的識別結果,并且通過控制組件,通知后端程序驅動相應的舵機操作。

圖3 前端架構組成
基于Flask 框架搭建的垃圾識別平臺后端程序用于垃圾圖像的處理及推理。Flask 框架是使用Python 語言開發Web 應用的主流框架,具有小巧、輕量級的特點,適合中小型項目開發。Flask 框架使用MVC 設計模式,降低了代碼的耦合性。另外,Flask 自帶Web 服務器,在非生產環境中可以直接運行,無需使用Apache 或Nginx 服務器。后端架構如圖4 所示,其中包含舵機驅動、圖像處理和圖像推理三個模塊。舵機驅動模塊主要通過上位機程序產生相應的PWM 波驅動舵機進行操作;圖像處理模塊通過OpenCV 生成視頻流,當用戶點擊識別按鈕時,生成一張靜態圖像并傳遞給圖像推理模塊處理;圖像推理模塊調用已訓練的卷積神經網絡進行預測并輸出識別結果。

圖4 后端架構組成
舵機驅動模塊的關鍵代碼如表1 所示。首先創建一個PWM 實例,然后設置PWM 波頻率,最后調用set_pwm 方法產生PWM 波。servo1 參數控制PWM 波高電平時間,通過查找舵機的參數手冊,可得舵機旋轉角度angle 和servo1 參數間的計算關系,如式(1)所示。

表1 舵機驅動關鍵代碼
其中,s 為servo1 參數,a 為旋轉角度angle,f 為PWM 波的頻率freq。
圖像處理模塊的關鍵代碼如表2 所示。通過VideoCapture 方法獲取視頻數據,保存圖片。當用戶在前端點擊識別按鈕時,調用此代碼傳遞圖像至圖像推理模塊。

表2 圖像處理關鍵代碼
在圖像推理模塊中,基于卷積神經網絡搭建ResNet50 網絡模型,對ImageNet 數據集進行預訓練,采用數據增強、Dropout、Adam 和早停機制等關鍵技術[6-7]建立訓練模型如圖5 所示。由圖5 可見,ResNet50 網絡分為5 個階段層,其中第一層結構較為簡單,即對輸入進行卷積計算,可視其為對輸入圖像的預處理。后4 個階段由殘差網絡構成,分別用已設計的殘差塊依次疊加3,4,6,3次,然后進行全連接,再經歸一化形成各自類別的概率。采用TensorFlow 的Keras 完成網絡模型的逐層構建和精細化調參。

圖5 ResNet50 網絡模型
選取華為云人工智能大賽提供的垃圾圖像數據集進行訓練和測試。數據集涵蓋了常見的生活垃圾類別,按最新標準分成可回收垃圾、廚余垃圾、有害垃圾和其他垃圾四大類。如表3 所示,數據集共有圖片14 802 張,其中最多的是可回收垃圾,有圖像8 611 張,最少的是有害垃圾,有圖像1150張。

表3 垃圾數據集類別及圖像數量
垃圾圖像標簽由兩部分組成,包括4 大類和40 個小類。其中可回收垃圾包含23 個小類別,有害垃圾、廚余垃圾及其他垃圾分別包含3 個、8 個及6 個小類別。具體分類如圖6 所示。

圖6 垃圾數據集數據分類
對數據集進行數據增強及歸一化處理后,在數據集中隨機抽取80 %數據作為訓練集,20 %數據作為測試集,進行訓練,結果如圖7 所示。模型在26 輪訓練結束后觸發了早停機制,提前終止訓練。最終得到垃圾識別訓練準確率為98.7 %,測試準確率為90.8 %。

圖7 ResNet50 模型訓練結果
以Python 為編譯語言開發垃圾智能分類系統,其中圖像推理模塊使用TensorFlow 框架,系統部署方案采用Flask 框架,Web 端界面采用Vue.js框架配合ElementUI 組件庫進行構建開發。最后,采用Electron 將整個Web 應用打包,并部署于樹莓派的Raspbian 操作系統,實現模型的系統化與應用化。
搭建的系統實物如圖8 所示。其中:樹莓派與攝像頭之間通過USB 口連接,與PCA9685 之間通過I2C 協議連接,四個垃圾桶分別由四個舵機控制打開和關閉。

圖8 垃圾智能分類系統實物
前端預覽界面如圖9,其中a)是攝像頭實時識別窗口,b)為識別按鈕界面。當用戶點擊識別按鈕時,對當前的預覽圖像進行識別。

圖9 前端預覽界面
在識別窗口放置一個易拉罐,點擊識別按鈕,得到的頁面結果如圖10 所示。由圖10 可以看到,垃圾智能分類系統準確識別易拉罐為“可回收垃圾”,并打開相應的舵機,控制垃圾桶蓋打開。

圖10 垃圾智能分類識別測試結果
選取6 種不同的垃圾進行識別測試,結果如表4 所示。由表4 可見,垃圾智能分類系統對6 種垃圾識別無誤,舵機能很好地驅動相應的垃圾桶撥板動作,實現垃圾正確分類回收。測試結果表明,設計的系統能高效完成常見垃圾的自動識別與分類,滿足智能垃圾桶控制要求。

表4 垃圾自動分類系統測試結果
基于樹莓派硬件設計了一種垃圾智能識別分類系統,通過ResNet 網絡模型與遷移學習相結合的圖像分類方法進行垃圾識別,采用Vue.js 框架配合ElementUI 組件庫構建開發Web 端界面,采用Flask 框架進行部署。測試結果顯示,所設計的垃圾分類系統軟硬件工作穩定,能對常見的生活垃圾進行正確分類回收,在垃圾分類和環境保護方面具有良好的應用前景。