侯奕辰,張振宇,陳哲奕,王廷軍,沈慶云,張沁來,徐昕蕓
(上海電機學(xué)院 機械學(xué)院,上海 201306)
我國每年因為紙張過度使用而造成資源的巨大浪費和經(jīng)濟的巨大損失,環(huán)保和節(jié)約問題在當(dāng)今這個社會中顯得愈發(fā)嚴(yán)峻,隨著我國公共廁所提供廁紙已經(jīng)普及,廁紙的過度浪費使用也成了商家與公廁的負(fù)擔(dān)之一[1]。傳統(tǒng)的廁紙抽紙機需要工作人員時刻關(guān)注紙張的剩余情況,以免出現(xiàn)由于廁紙?zhí)砑硬患皶r,可能會出現(xiàn)沒有廁紙的窘境。隨著技術(shù)的發(fā)展和防備病毒的需求,人們的一些生活方式也發(fā)生了改變,各種無接觸設(shè)備也漸漸流行,而傳統(tǒng)抽紙機免不了需要觸碰抽紙機或卷筒紙,而這些可能被前一個人碰過而造成衛(wèi)生方面的污染[2]。隨著人臉識別與檢測技術(shù)應(yīng)用,直接刷“臉”可以實現(xiàn)無接觸取紙[3],因此,針對上述情況,需要研發(fā)一種能夠解決以上問題的精巧抽紙設(shè)備。本文利用現(xiàn)代物聯(lián)網(wǎng)技術(shù),提出了一種基于龍芯平臺的運用人臉識別技術(shù)來完成無接觸抽紙設(shè)備。
采用龍芯派與作為服務(wù)端的Ubuntu兩個設(shè)備進行協(xié)同完成,主要信息交互通過各自的Socket服務(wù)進程完成,并通過兩個Qmainwindows進程分別在客戶端與服務(wù)端的屏幕上顯示有效信息[4-5]。
整個系統(tǒng)的核心目的為借助攝像頭與人臉識別程序按要求合理啟動機械部分的設(shè)備,如圖1所示。
圖1 智能抽紙系統(tǒng)原理框圖
送紙機構(gòu)如圖2所示,由兩部分組成,其中A為第一部分(以下簡稱A)、B為第二部分(以下簡稱B)。
圖2 送紙結(jié)構(gòu)
A用來固定卷筒紙,并與B配合讓卷筒紙順利向下運輸。B則給卷筒紙一個向下的力,使得紙能夠向下做直線運動。
B由一對直齒輪、一對軸、12V永磁式直流減速電機、同步帶輪、傳送帶和支架構(gòu)成。同步帶輪通過傳送帶帶動主動軸。永磁式直流減速電機通過繼電器連接到龍芯派上,使得龍芯派可以通過控制繼電器的觸發(fā)引腳的高低電平來控制電機的啟停。一對軸分為主動軸和從動軸,兩者的裝配間距應(yīng)小于0.2 mm,主動軸被支架約束只能進行轉(zhuǎn)動不能進行平移,而從動軸則既可以轉(zhuǎn)動也能進行平移,通過對從動軸進行平移運動可以改變主動軸與從動軸之間的距離,并將卷筒紙置于間隙中。
壓紙機構(gòu)由一對12V推拉式電磁鐵、刀片和支架組成,如圖3所示。電磁鐵通電后,將電轉(zhuǎn)化為磁并產(chǎn)生吸力,在斷電時通過彈簧的彈力將其自動復(fù)位。推拉式電磁鐵的行程為200 mm,在通電時能夠?qū)⒌镀焖傧蚯巴剖沟玫镀瑢⒕硗布埞潭ㄔ诎疾蹆?nèi),此時用戶可以伸手將已經(jīng)落下的卷筒紙扯下來。
圖3 壓紙機構(gòu)
壓紙機構(gòu)通過推拉式電磁鐵(行程20 mm)通電后線圈閉合帶動刀片將卷筒紙固定在凹槽內(nèi),其在未通電時應(yīng)保持與凹槽有一定的間隙距離,經(jīng)Solidworks模擬驗證,安裝距離為110 mm時最優(yōu)。兩個電磁鐵同樣通過繼電器連接到龍芯派上,使得龍芯派可以控制電磁鐵的吸合與松開。
出紙方式是用刀片將卷筒紙壓住的方式進行固定后,用戶再用手撕下來完成取紙過程。為了進一步完善用戶的使用體驗,可以將壓住這個步驟改為切斷,直接將紙切斷后依靠重力讓紙落到用戶手上。
系統(tǒng)選取龍芯2K1000芯片作為主控設(shè)備,UI設(shè)計上使用Qt完成了桌面程序的編寫,并包含多種信息化內(nèi)容。控制系統(tǒng)主要由位于龍芯派的客戶端以及Ubuntu服務(wù)端構(gòu)成,并需在龍芯派中編寫底層驅(qū)動來控制12V直流電動機和推拉式電磁鐵,單位時間內(nèi)出紙量可以設(shè)定,如定值300 mm,誤差在10 mm內(nèi)。
由于需要滿足龍芯派能完成自動開機,因此為其設(shè)置了開機方案:PMON啟動(不顯示)→啟動內(nèi)核(顯示Boot List)→調(diào)用Psplash→啟動Xserver并直接啟動Qt應(yīng)用程序。系統(tǒng)控制流程圖如圖4所示。
龍芯派客戶端應(yīng)用程序是通過Qt編譯的。Client進程啟動后,首先進行一系列初始化操作,包括初始化圖像處理進程,socket進程,Loongnix底層驅(qū)動進程,Qmainwindow進程,V4L2驅(qū)動進程,并在V4L2驅(qū)動初始化完成后獲取攝像頭數(shù)據(jù),并將其memcpy到socket進程與Qmainwindow中。其流程框圖如圖4所示。
圖4 系統(tǒng)控制流程圖
Qmainwindow線程中,調(diào)用了圖像處理進程;無人臉時,直接顯示畫面;有人臉時,通過使用服務(wù)端傳回來的人臉檢測方框矩陣,在畫面上框出人臉并顯示;檢測成功時,會顯示檢測成功的提示圖片,并傳送給底層驅(qū)動進程。
Socket進程中,初始化完成后,首先將會通過select函數(shù)進行連接等待,在等待到服務(wù)端連接后,將攝像頭數(shù)據(jù)封包成V4L2包,并發(fā)送給服務(wù)端,再接受服務(wù)端傳回的檢測數(shù)據(jù),并存放入全局變量中,供其他進程調(diào)用。Socket進程中,在等待到客戶端連接成功后,將會從客戶端接收回V4L2圖像數(shù)據(jù);在人臉識別程序識別完成后,將會發(fā)送檢測結(jié)果與識別結(jié)果至客戶端。
Loongnix底層驅(qū)動進程中,如果接收到了傳過來的數(shù)據(jù),便會通過傳進來的參數(shù)來進行啟動機械部分或是關(guān)閉機械部分的判斷。特別的、通過服務(wù)端傳回的強制命令將不通過Loongnix底層驅(qū)動進程,而是直接操作驅(qū)動文件。
人臉檢測主要通過OpenCV級聯(lián)分類器進行檢測,初始化時調(diào)用haarcascade_frontalface_alt.xml文件,加載Mat格式的數(shù)據(jù),在經(jīng)過灰度化與直方圖均衡化之后,進行檢測,然后返回人臉框圖矩陣。
OpenCV人臉識別進程中,首先會調(diào)用圖像處理進程,將V4L2數(shù)據(jù)轉(zhuǎn)化為Mat格式。人臉識別將圖像進行灰度化處理,并提取其LBP特征,進行ULBP降維處理,對圖像進行分割,分割成許多小cell,再對每個cell都進行直方圖處理,更新圖像模型,調(diào)用compareHist進行預(yù)測,并返回相似度。
抽紙系統(tǒng)實驗系統(tǒng)如圖5所示。
圖5 抽紙系統(tǒng)實驗系統(tǒng)
(1)采用Server+Client的設(shè)計理念,Server端運行Ubuntu 18.04,Client端 為 交 叉 編 譯3.10.0內(nèi) 核 的loongnix系統(tǒng),其間的通信經(jīng)自動封包的Socket數(shù)據(jù)進行連接,物理上通過網(wǎng)線連接路由器組網(wǎng)。
(2)移植了yocto中的psplash程序,完成開機動畫制作,開機時使用xinit啟動Client,達(dá)到開機自啟的功能。
(3)人臉識別部分使用OpenCV 3.4.1,通過V4L2驅(qū)動獲取攝像頭畫面;加載OpenCV人臉檢測器后,通過實時獲取攝像頭獲取到的人臉,通過LBPH人臉識別器完成訓(xùn)練,訓(xùn)練由Server端完成,采集由Client端完成。
(4)Socket傳輸中包含四種數(shù)據(jù)頭(V4L2數(shù)據(jù)、檢測結(jié)果、識別結(jié)果、抽紙信息),在Socket傳輸中程序通過數(shù)據(jù)頭來辨識,并分別解碼得到有效數(shù)據(jù)。
系統(tǒng)需要準(zhǔn)確進行人臉識別與檢測以達(dá)到無接觸抽紙的目的,并且需要能通過用戶層函數(shù)來控制底層驅(qū)動,不然整個項目將無法運行,并且人臉識別數(shù)據(jù)需求客戶端與服務(wù)端之間同步傳輸。Qt應(yīng)用程序界面與同步人臉如圖6所示,同步人臉識別結(jié)果如圖7所示。
圖6 Qt應(yīng)用程序界面與同步人臉檢測(Client)
圖7 同步人臉識別(Server)
人臉識別部分經(jīng)過多次實驗驗證,將識別閾值設(shè)定為80%,此閾值能快速識別出人臉庫中的人臉,并且只會出現(xiàn)極少數(shù)的誤判,保證系統(tǒng)準(zhǔn)確性,實驗數(shù)據(jù)經(jīng)簡化后見表1。(誤判指識別成他人的臉,本實驗找了兩個臉型相似者進行對比實驗,每人各50次,超時10 s未檢測出歸為LOSS)。最終實現(xiàn)了準(zhǔn)確的人臉識別/精確框出人臉/無延遲無卡頓的通信。
表1 人臉識別實驗數(shù)據(jù)
在送紙過程中,應(yīng)滿足每次出紙的長度均為定值。為了精確控制出紙量,通過計算直流電機旋轉(zhuǎn)1 s可以出多少長度的紙,依次為單位時間內(nèi)的出紙量。然后根據(jù)每次出紙需要的長度去設(shè)置延時。
系統(tǒng)單位時間內(nèi)的出紙量為30 mm,按每次需要的出紙量為300 mm,需延時10 s。在實踐中發(fā)現(xiàn)每次出紙量有一些誤差,需要通過實驗來得到一個普遍的誤差值,并且如果這個誤差值在可接受范圍內(nèi),那么此法即可使用。
出紙量精度實驗檢測結(jié)果見表2??梢姡黾埖拈L度誤差可以控制在7 mm以內(nèi),達(dá)到要求。
表2 出紙量精度的誤差控制實驗數(shù)據(jù)
基于龍芯派的人臉識別智能物聯(lián)網(wǎng)抽紙系統(tǒng)具有良好的應(yīng)用前景。龍芯派能完成自動開機并無操作的連接上服務(wù)端,編寫了龍芯MIPS驅(qū)動及測試,能夠進行準(zhǔn)確的人臉識別與人臉檢測,并準(zhǔn)確控制驅(qū)動。能夠精確的分別在客戶端與服務(wù)端間框出人臉,精確無延遲無卡頓的連接客戶端與服務(wù)端之間的通信,通過龍芯派自編驅(qū)動控制自動完成送紙與壓紙的過程。如果進一步使用深度學(xué)習(xí)來完成識別的過程,則可以得到更高的人臉識別精度。