朱毅泓,郭常盈,蘇智宇
(南陽理工學院信息工程學院,南陽 473004)
隨著人民生活水平的日益提高,垃圾的產生量也隨之增多,如果處理不好,將會對人們的居住環境帶來巨大的威脅[1]。垃圾分類是垃圾處理的基礎,需要全社會群眾的廣泛參與,由于大多數人在垃圾種類區分方面存在一定的困難,導致人工處理垃圾分類工作存在耗時較長、效果不理想以及影響工作人員健康等問題。于是各種智能垃圾分類系統應運而生。目前不管基于深度學習算法還是應用垃圾分類APP 進行垃圾分類識別的,都沒有將智能垃圾分類和垃圾桶控制進行有機結合,即識別后還需要人們手動打開對應的垃圾桶蓋進行垃圾投放。
為了解決這一系列問題,本文充分利用人工智能技術,基于深度學習理論構建和訓練垃圾分類模型,讓對垃圾分類規則不太熟悉的用戶輕松實現垃圾分類。并且根據垃圾識別結果,通過硬件控制電路打開對應的垃圾桶蓋,使得用戶可以無接觸完成垃圾的精準投放。
根據垃圾分類的工藝流程,要求所設計的智能垃圾分類識別系統能夠通過攝像頭對垃圾拍照,上傳垃圾圖片后通過圖庫比對能夠快速、準確地識別垃圾種類,并且根據識別結果啟動驅動控制,打開對應垃圾桶蓋,使用戶能夠準確地將垃圾投放到對應的垃圾桶。當然要想完成圖庫比對,事先還需要構建和訓練好垃圾分類模型。因此,所設計的智能垃圾分類識別系統必須具有以下幾個子模塊:垃圾分類模型的構建與訓練、攝像頭拍攝垃圾照片、圖庫對比分析、驅動控制等功能模塊。為了便于用戶進行數據顯示、參數設置和操作控制,需要設計一個圖形用戶界面,由上位機提供;其他的設備作為下位機,根據功能,這里設置兩個下位機。所以整個系統需要軟硬件相互結合、上下位機共同協作。其系統功能實現框圖如圖1所示。

圖1 系統功能實現框圖
智能垃圾分類系統的核心是垃圾分類模型。在進行垃圾分類模型的構建與訓練時,通過選取網絡圖片,收集大量垃圾圖像作為訓練數據集。為了方便后續的訓練以及保證數據集的特征具有一致性和有效性,需要對圖像數據進行清洗。所設計的數據集包含可回收物、廚余垃圾、有害垃圾、其他垃圾等4 個大類、245 個子類,約計8萬張圖片用于訓練[2]。訓練中對于數據集采用八二劃分方式,即訓練集占據八份,測試集占據兩份。
基于深度學習的圖像識別會由于數據量的局限性,導致模型提取特征有限,進而影響識別的準確度。目前,一種常用且非常高效的優化方式便是使用預訓練網絡模型,將一個已在大型數據集上訓練好的模型作為基礎模型,在此基礎上對自己的數據集再進行訓練,即使新的數據集和原始數據集完全不同,也可以得到很好的特征提取。模型訓練的流程如圖2所示。

圖2 模型訓練的流程圖
因此,本文對于垃圾識別模型的構建是基于TensorFlow2.3 實現的MobilenetV2 模型的遷移學習[3-4]。首先,通過tf.keras.applications 來加載MobilenetV2 模型,凍結主干的特征提取網絡參數;其次,為了保證每一批次訓練的數據的分布一致,最終使得構建的神經網絡模型容易收斂,對數據進行了歸一化處理;再次,全局平均池化和設置全連接層,以此來達到分類效果;最后,設置訓練輪數,開始訓練。訓練完成后需要對模型進行精度測試,測試要求采用與訓練數據集不同的數據集,而且需要多輪精度測試。本文每一輪測試都是采用4001 張圖片進行測試。最終測試結果表明,本次訓練的模型的精度高達0.829,已經達到預期要求。
系統硬件電路主要包含兩塊主控芯片、舵機及用于連接的舵機拓展板等。遵循經濟實用、已開發、易維護的設計理念,本文選擇ESP32-CAM、ESP8266-NodeMCU 作為下位機。ESP32 硬件平臺中的MCU 芯片可以獨立運行應用程序,其主要載體可以通過SPI/SDIO 或12C/UART 接口提供Wi-Fi 或藍牙功能[5]。為了避免拍攝的圖片出現水紋,使用ESP32-CAM 時注意輸入電源至少要5V2A,其GPIO32 管腳控制攝像頭電源,當攝像頭工作時應當把GPIO32 拉低。由于IO0 連接攝像頭XCLK,使用時也應當把IO0 懸空,不接高低電平。
若實現垃圾桶的自動開合,需要將舵機與垃圾桶進行物理連接,本文舵機采用SG90。SG90 三根數據線:棕色線GND、紅色線VCC、黃色線SIG。四個垃圾桶需要四臺SG90 舵機,即有十二根線需要連接,這里通過加入舵機拓展板來解決線路復雜問題。舵機拓展板直接與SG90 舵機連接,則通過杜邦線與ESP8266-NodeMCU 進行連接,以此來達到ESP8266-NodeMCU 控制多臺舵機的目的。同時,為了保證固定在舵機上的連桿能夠順暢地隨著舵機運動而運動,這里是將舵機通過膠水固定在垃圾桶內部,并在垃圾桶背部開孔,將舵機的數據線牽引出去,方便與ESP8266-NodeMCU 的舵機拓展板進行連接。將連桿與舵機組裝到一起,并通過計算PWM 得到實際舵機需要向上轉動的角度,舵機向上轉的同時帶動連桿,連桿頂開垃圾桶蓋。舵機復位后,在重力的作用下,垃圾桶蓋會自動回落,以此來達到自動開合垃圾桶的預期。
軟件部分包括用戶界面的構建、對下位機1發送的視頻流進行處理、使用訓練好的模型完成垃圾分類、向下位機2發送相關操作指令。其中,前三個為前端程序,最后一個為后端程序。
前端程序設計,即上位機用戶界面應用Qt Designer 與Python 制作而成,使用的IDE 是Pycharm。所設計的用戶主界面如圖3(a)所示,用戶可分別選擇攝像頭的開啟與關閉、實時顯示ESP32-CAM 拍攝到的視頻流、拍照并顯示拍照的內容、對拍攝照片進行識別等按鈕。當用戶進行識別操作后,將彈出用戶子界面,如圖3(b)所示。新界面會顯示用戶拍攝的照片、識別出來的垃圾種類、垃圾名稱以及一些簡短的相關介紹。此界面還有兩個按鈕,一個再次打開垃圾桶按鈕,是為了防止初次打開垃圾桶時用戶未將垃圾及時放入而設計的;另一個按鈕是返回按鈕,返回主界面。

圖3 用戶界面
后端程序設計除前面所講述的垃圾識別模型的構建與訓練之外,還有舵機轉動設計、上下位機之間的通信程序設計等。電路供電后,下位機ESP8266-NodeMCU 以及ESP32-CAM 調用自身的Wi-Fi 模塊,分別和上位機建立網絡通信,其Wi-Fi 模塊調用程序流程如圖4 所示。上位機和下位機之間的信息傳送,即為通過Wi-Fi模塊導入socket 庫,開啟UDP 套接字進行的數據傳輸通信,如圖5所示。

圖4 Wi-Fi模塊調用流程

圖5 UDP套接字
所設計的垃圾分類識別系統實物圖如圖6所示。

圖6 垃圾分類識別系統實物圖
將ESP8266-NodeMCU 與ESP32-CAM 中所要運行的程序改名為main.py,通過充電寶給ESP8266-NodeMCU 和ESP32-CAM 供電。打開手機熱點,電腦連接,以此保證上機位與下機位處于同一網絡環境中。
運行上位機主程序,電腦端將出現用戶主界面。在此界面,點擊拍攝按鈕,所要識別的垃圾圖片逐一顯示在主界面窗口。再分別點擊識別按鈕,結果如圖7 所示。其中,圖7(a)垃圾是眼藥水,識別為有害垃圾;圖7(b)垃圾是豆子,識別為廚余垃圾;圖7(c)垃圾是回形針,識別為可回收物。對比垃圾實物,可知以上垃圾類型識別均正確。

圖7 垃圾類型識別結果
下位機ESP8266-NodeMCU 調用自身Wi-Fi模塊實現與電腦之間的通信。垃圾識別結果在用戶子界面上顯示,并將識別內容通過Wi-Fi模塊發送相應的消息給ESP8266-NodeMCU,ESP8266-NodeMCU 根據消息內容控制相應的舵機,并打開對應的垃圾桶蓋。如圖8(a)所示,用戶主界面上顯示將要被識別的垃圾是泡沫板,泡沫板經模型識別為可回收物垃圾,因此可回收物垃圾桶被打開,如圖8(b)所示。

圖8 根據識別結果相應垃圾桶被打開效果圖
綜上測試,可以看出所設計的垃圾分類系統能夠正確地實現垃圾類型的識別和分類,完全達到了預期設計要求。
本文應用計算機視覺識別技術設計一個生活垃圾的智能分類系統。系統軟硬件相結合,計算機為上位機,提供圖形用戶界面。系統啟動后,ESP32-CAM 接收拍攝命令,調用自身的攝像頭和Wi-Fi模塊,對需要分類的垃圾進行拍攝并通過Wi-Fi傳送至上位機。根據訓練好的分類模型進行圖庫比對,并將識別信息通過Wi-Fi傳送至ESP8266-NodeMCU,驅動控制相應的SG90 舵機和垃圾桶蓋。測試表明所設計的系統完全可以準確地實現家庭生活垃圾的智能分類。所設計的系統具有兩點創新:第一,構建包含各種生活垃圾圖像的訓練數據集,通過不斷地選取、改進分類模型算法以及反復精度測試從而獲取精確的分類模型,這是系統能夠準確識別類型的關鍵;第二,將智能垃圾分類和垃圾桶控制充分結合,通過識別信息驅動硬件控制電路,自動實現垃圾桶蓋的開合,使得用戶可以無接觸完成垃圾的精準投放。