朱毅泓,郭常盈,蘇智宇
(南陽理工學(xué)院信息工程學(xué)院,南陽 473004)
隨著人民生活水平的日益提高,垃圾的產(chǎn)生量也隨之增多,如果處理不好,將會(huì)對(duì)人們的居住環(huán)境帶來巨大的威脅[1]。垃圾分類是垃圾處理的基礎(chǔ),需要全社會(huì)群眾的廣泛參與,由于大多數(shù)人在垃圾種類區(qū)分方面存在一定的困難,導(dǎo)致人工處理垃圾分類工作存在耗時(shí)較長、效果不理想以及影響工作人員健康等問題。于是各種智能垃圾分類系統(tǒng)應(yīng)運(yùn)而生。目前不管基于深度學(xué)習(xí)算法還是應(yīng)用垃圾分類APP 進(jìn)行垃圾分類識(shí)別的,都沒有將智能垃圾分類和垃圾桶控制進(jìn)行有機(jī)結(jié)合,即識(shí)別后還需要人們手動(dòng)打開對(duì)應(yīng)的垃圾桶蓋進(jìn)行垃圾投放。
為了解決這一系列問題,本文充分利用人工智能技術(shù),基于深度學(xué)習(xí)理論構(gòu)建和訓(xùn)練垃圾分類模型,讓對(duì)垃圾分類規(guī)則不太熟悉的用戶輕松實(shí)現(xiàn)垃圾分類。并且根據(jù)垃圾識(shí)別結(jié)果,通過硬件控制電路打開對(duì)應(yīng)的垃圾桶蓋,使得用戶可以無接觸完成垃圾的精準(zhǔn)投放。
根據(jù)垃圾分類的工藝流程,要求所設(shè)計(jì)的智能垃圾分類識(shí)別系統(tǒng)能夠通過攝像頭對(duì)垃圾拍照,上傳垃圾圖片后通過圖庫比對(duì)能夠快速、準(zhǔn)確地識(shí)別垃圾種類,并且根據(jù)識(shí)別結(jié)果啟動(dòng)驅(qū)動(dòng)控制,打開對(duì)應(yīng)垃圾桶蓋,使用戶能夠準(zhǔn)確地將垃圾投放到對(duì)應(yīng)的垃圾桶。當(dāng)然要想完成圖庫比對(duì),事先還需要構(gòu)建和訓(xùn)練好垃圾分類模型。因此,所設(shè)計(jì)的智能垃圾分類識(shí)別系統(tǒng)必須具有以下幾個(gè)子模塊:垃圾分類模型的構(gòu)建與訓(xùn)練、攝像頭拍攝垃圾照片、圖庫對(duì)比分析、驅(qū)動(dòng)控制等功能模塊。為了便于用戶進(jìn)行數(shù)據(jù)顯示、參數(shù)設(shè)置和操作控制,需要設(shè)計(jì)一個(gè)圖形用戶界面,由上位機(jī)提供;其他的設(shè)備作為下位機(jī),根據(jù)功能,這里設(shè)置兩個(gè)下位機(jī)。所以整個(gè)系統(tǒng)需要軟硬件相互結(jié)合、上下位機(jī)共同協(xié)作。其系統(tǒng)功能實(shí)現(xiàn)框圖如圖1所示。
圖1 系統(tǒng)功能實(shí)現(xiàn)框圖
智能垃圾分類系統(tǒng)的核心是垃圾分類模型。在進(jìn)行垃圾分類模型的構(gòu)建與訓(xùn)練時(shí),通過選取網(wǎng)絡(luò)圖片,收集大量垃圾圖像作為訓(xùn)練數(shù)據(jù)集。為了方便后續(xù)的訓(xùn)練以及保證數(shù)據(jù)集的特征具有一致性和有效性,需要對(duì)圖像數(shù)據(jù)進(jìn)行清洗。所設(shè)計(jì)的數(shù)據(jù)集包含可回收物、廚余垃圾、有害垃圾、其他垃圾等4 個(gè)大類、245 個(gè)子類,約計(jì)8萬張圖片用于訓(xùn)練[2]。訓(xùn)練中對(duì)于數(shù)據(jù)集采用八二劃分方式,即訓(xùn)練集占據(jù)八份,測(cè)試集占據(jù)兩份。
基于深度學(xué)習(xí)的圖像識(shí)別會(huì)由于數(shù)據(jù)量的局限性,導(dǎo)致模型提取特征有限,進(jìn)而影響識(shí)別的準(zhǔn)確度。目前,一種常用且非常高效的優(yōu)化方式便是使用預(yù)訓(xùn)練網(wǎng)絡(luò)模型,將一個(gè)已在大型數(shù)據(jù)集上訓(xùn)練好的模型作為基礎(chǔ)模型,在此基礎(chǔ)上對(duì)自己的數(shù)據(jù)集再進(jìn)行訓(xùn)練,即使新的數(shù)據(jù)集和原始數(shù)據(jù)集完全不同,也可以得到很好的特征提取。模型訓(xùn)練的流程如圖2所示。
圖2 模型訓(xùn)練的流程圖
因此,本文對(duì)于垃圾識(shí)別模型的構(gòu)建是基于TensorFlow2.3 實(shí)現(xiàn)的MobilenetV2 模型的遷移學(xué)習(xí)[3-4]。首先,通過tf.keras.applications 來加載MobilenetV2 模型,凍結(jié)主干的特征提取網(wǎng)絡(luò)參數(shù);其次,為了保證每一批次訓(xùn)練的數(shù)據(jù)的分布一致,最終使得構(gòu)建的神經(jīng)網(wǎng)絡(luò)模型容易收斂,對(duì)數(shù)據(jù)進(jìn)行了歸一化處理;再次,全局平均池化和設(shè)置全連接層,以此來達(dá)到分類效果;最后,設(shè)置訓(xùn)練輪數(shù),開始訓(xùn)練。訓(xùn)練完成后需要對(duì)模型進(jìn)行精度測(cè)試,測(cè)試要求采用與訓(xùn)練數(shù)據(jù)集不同的數(shù)據(jù)集,而且需要多輪精度測(cè)試。本文每一輪測(cè)試都是采用4001 張圖片進(jìn)行測(cè)試。最終測(cè)試結(jié)果表明,本次訓(xùn)練的模型的精度高達(dá)0.829,已經(jīng)達(dá)到預(yù)期要求。
系統(tǒng)硬件電路主要包含兩塊主控芯片、舵機(jī)及用于連接的舵機(jī)拓展板等。遵循經(jīng)濟(jì)實(shí)用、已開發(fā)、易維護(hù)的設(shè)計(jì)理念,本文選擇ESP32-CAM、ESP8266-NodeMCU 作為下位機(jī)。ESP32 硬件平臺(tái)中的MCU 芯片可以獨(dú)立運(yùn)行應(yīng)用程序,其主要載體可以通過SPI/SDIO 或12C/UART 接口提供Wi-Fi 或藍(lán)牙功能[5]。為了避免拍攝的圖片出現(xiàn)水紋,使用ESP32-CAM 時(shí)注意輸入電源至少要5V2A,其GPIO32 管腳控制攝像頭電源,當(dāng)攝像頭工作時(shí)應(yīng)當(dāng)把GPIO32 拉低。由于IO0 連接攝像頭XCLK,使用時(shí)也應(yīng)當(dāng)把IO0 懸空,不接高低電平。
若實(shí)現(xiàn)垃圾桶的自動(dòng)開合,需要將舵機(jī)與垃圾桶進(jìn)行物理連接,本文舵機(jī)采用SG90。SG90 三根數(shù)據(jù)線:棕色線GND、紅色線VCC、黃色線SIG。四個(gè)垃圾桶需要四臺(tái)SG90 舵機(jī),即有十二根線需要連接,這里通過加入舵機(jī)拓展板來解決線路復(fù)雜問題。舵機(jī)拓展板直接與SG90 舵機(jī)連接,則通過杜邦線與ESP8266-NodeMCU 進(jìn)行連接,以此來達(dá)到ESP8266-NodeMCU 控制多臺(tái)舵機(jī)的目的。同時(shí),為了保證固定在舵機(jī)上的連桿能夠順暢地隨著舵機(jī)運(yùn)動(dòng)而運(yùn)動(dòng),這里是將舵機(jī)通過膠水固定在垃圾桶內(nèi)部,并在垃圾桶背部開孔,將舵機(jī)的數(shù)據(jù)線牽引出去,方便與ESP8266-NodeMCU 的舵機(jī)拓展板進(jìn)行連接。將連桿與舵機(jī)組裝到一起,并通過計(jì)算PWM 得到實(shí)際舵機(jī)需要向上轉(zhuǎn)動(dòng)的角度,舵機(jī)向上轉(zhuǎn)的同時(shí)帶動(dòng)連桿,連桿頂開垃圾桶蓋。舵機(jī)復(fù)位后,在重力的作用下,垃圾桶蓋會(huì)自動(dòng)回落,以此來達(dá)到自動(dòng)開合垃圾桶的預(yù)期。
軟件部分包括用戶界面的構(gòu)建、對(duì)下位機(jī)1發(fā)送的視頻流進(jìn)行處理、使用訓(xùn)練好的模型完成垃圾分類、向下位機(jī)2發(fā)送相關(guān)操作指令。其中,前三個(gè)為前端程序,最后一個(gè)為后端程序。
前端程序設(shè)計(jì),即上位機(jī)用戶界面應(yīng)用Qt Designer 與Python 制作而成,使用的IDE 是Pycharm。所設(shè)計(jì)的用戶主界面如圖3(a)所示,用戶可分別選擇攝像頭的開啟與關(guān)閉、實(shí)時(shí)顯示ESP32-CAM 拍攝到的視頻流、拍照并顯示拍照的內(nèi)容、對(duì)拍攝照片進(jìn)行識(shí)別等按鈕。當(dāng)用戶進(jìn)行識(shí)別操作后,將彈出用戶子界面,如圖3(b)所示。新界面會(huì)顯示用戶拍攝的照片、識(shí)別出來的垃圾種類、垃圾名稱以及一些簡短的相關(guān)介紹。此界面還有兩個(gè)按鈕,一個(gè)再次打開垃圾桶按鈕,是為了防止初次打開垃圾桶時(shí)用戶未將垃圾及時(shí)放入而設(shè)計(jì)的;另一個(gè)按鈕是返回按鈕,返回主界面。
圖3 用戶界面
后端程序設(shè)計(jì)除前面所講述的垃圾識(shí)別模型的構(gòu)建與訓(xùn)練之外,還有舵機(jī)轉(zhuǎn)動(dòng)設(shè)計(jì)、上下位機(jī)之間的通信程序設(shè)計(jì)等。電路供電后,下位機(jī)ESP8266-NodeMCU 以及ESP32-CAM 調(diào)用自身的Wi-Fi 模塊,分別和上位機(jī)建立網(wǎng)絡(luò)通信,其Wi-Fi 模塊調(diào)用程序流程如圖4 所示。上位機(jī)和下位機(jī)之間的信息傳送,即為通過Wi-Fi模塊導(dǎo)入socket 庫,開啟UDP 套接字進(jìn)行的數(shù)據(jù)傳輸通信,如圖5所示。
圖4 Wi-Fi模塊調(diào)用流程
圖5 UDP套接字
所設(shè)計(jì)的垃圾分類識(shí)別系統(tǒng)實(shí)物圖如圖6所示。
圖6 垃圾分類識(shí)別系統(tǒng)實(shí)物圖
將ESP8266-NodeMCU 與ESP32-CAM 中所要運(yùn)行的程序改名為main.py,通過充電寶給ESP8266-NodeMCU 和ESP32-CAM 供電。打開手機(jī)熱點(diǎn),電腦連接,以此保證上機(jī)位與下機(jī)位處于同一網(wǎng)絡(luò)環(huán)境中。
運(yùn)行上位機(jī)主程序,電腦端將出現(xiàn)用戶主界面。在此界面,點(diǎn)擊拍攝按鈕,所要識(shí)別的垃圾圖片逐一顯示在主界面窗口。再分別點(diǎn)擊識(shí)別按鈕,結(jié)果如圖7 所示。其中,圖7(a)垃圾是眼藥水,識(shí)別為有害垃圾;圖7(b)垃圾是豆子,識(shí)別為廚余垃圾;圖7(c)垃圾是回形針,識(shí)別為可回收物。對(duì)比垃圾實(shí)物,可知以上垃圾類型識(shí)別均正確。
圖7 垃圾類型識(shí)別結(jié)果
下位機(jī)ESP8266-NodeMCU 調(diào)用自身Wi-Fi模塊實(shí)現(xiàn)與電腦之間的通信。垃圾識(shí)別結(jié)果在用戶子界面上顯示,并將識(shí)別內(nèi)容通過Wi-Fi模塊發(fā)送相應(yīng)的消息給ESP8266-NodeMCU,ESP8266-NodeMCU 根據(jù)消息內(nèi)容控制相應(yīng)的舵機(jī),并打開對(duì)應(yīng)的垃圾桶蓋。如圖8(a)所示,用戶主界面上顯示將要被識(shí)別的垃圾是泡沫板,泡沫板經(jīng)模型識(shí)別為可回收物垃圾,因此可回收物垃圾桶被打開,如圖8(b)所示。
圖8 根據(jù)識(shí)別結(jié)果相應(yīng)垃圾桶被打開效果圖
綜上測(cè)試,可以看出所設(shè)計(jì)的垃圾分類系統(tǒng)能夠正確地實(shí)現(xiàn)垃圾類型的識(shí)別和分類,完全達(dá)到了預(yù)期設(shè)計(jì)要求。
本文應(yīng)用計(jì)算機(jī)視覺識(shí)別技術(shù)設(shè)計(jì)一個(gè)生活垃圾的智能分類系統(tǒng)。系統(tǒng)軟硬件相結(jié)合,計(jì)算機(jī)為上位機(jī),提供圖形用戶界面。系統(tǒng)啟動(dòng)后,ESP32-CAM 接收拍攝命令,調(diào)用自身的攝像頭和Wi-Fi模塊,對(duì)需要分類的垃圾進(jìn)行拍攝并通過Wi-Fi傳送至上位機(jī)。根據(jù)訓(xùn)練好的分類模型進(jìn)行圖庫比對(duì),并將識(shí)別信息通過Wi-Fi傳送至ESP8266-NodeMCU,驅(qū)動(dòng)控制相應(yīng)的SG90 舵機(jī)和垃圾桶蓋。測(cè)試表明所設(shè)計(jì)的系統(tǒng)完全可以準(zhǔn)確地實(shí)現(xiàn)家庭生活垃圾的智能分類。所設(shè)計(jì)的系統(tǒng)具有兩點(diǎn)創(chuàng)新:第一,構(gòu)建包含各種生活垃圾圖像的訓(xùn)練數(shù)據(jù)集,通過不斷地選取、改進(jìn)分類模型算法以及反復(fù)精度測(cè)試從而獲取精確的分類模型,這是系統(tǒng)能夠準(zhǔn)確識(shí)別類型的關(guān)鍵;第二,將智能垃圾分類和垃圾桶控制充分結(jié)合,通過識(shí)別信息驅(qū)動(dòng)硬件控制電路,自動(dòng)實(shí)現(xiàn)垃圾桶蓋的開合,使得用戶可以無接觸完成垃圾的精準(zhǔn)投放。