侯奕辰,張振宇,陳哲奕,王廷軍,沈慶云,張沁來,徐昕蕓
(上海電機學院 機械學院,上海 201306)
我國每年因為紙張過度使用而造成資源的巨大浪費和經濟的巨大損失,環保和節約問題在當今這個社會中顯得愈發嚴峻,隨著我國公共廁所提供廁紙已經普及,廁紙的過度浪費使用也成了商家與公廁的負擔之一[1]。傳統的廁紙抽紙機需要工作人員時刻關注紙張的剩余情況,以免出現由于廁紙添加不及時,可能會出現沒有廁紙的窘境。隨著技術的發展和防備病毒的需求,人們的一些生活方式也發生了改變,各種無接觸設備也漸漸流行,而傳統抽紙機免不了需要觸碰抽紙機或卷筒紙,而這些可能被前一個人碰過而造成衛生方面的污染[2]。隨著人臉識別與檢測技術應用,直接刷“臉”可以實現無接觸取紙[3],因此,針對上述情況,需要研發一種能夠解決以上問題的精巧抽紙設備。本文利用現代物聯網技術,提出了一種基于龍芯平臺的運用人臉識別技術來完成無接觸抽紙設備。
采用龍芯派與作為服務端的Ubuntu兩個設備進行協同完成,主要信息交互通過各自的Socket服務進程完成,并通過兩個Qmainwindows進程分別在客戶端與服務端的屏幕上顯示有效信息[4-5]。
整個系統的核心目的為借助攝像頭與人臉識別程序按要求合理啟動機械部分的設備,如圖1所示。

圖1 智能抽紙系統原理框圖
送紙機構如圖2所示,由兩部分組成,其中A為第一部分(以下簡稱A)、B為第二部分(以下簡稱B)。

圖2 送紙結構
A用來固定卷筒紙,并與B配合讓卷筒紙順利向下運輸。B則給卷筒紙一個向下的力,使得紙能夠向下做直線運動。
B由一對直齒輪、一對軸、12V永磁式直流減速電機、同步帶輪、傳送帶和支架構成。同步帶輪通過傳送帶帶動主動軸。永磁式直流減速電機通過繼電器連接到龍芯派上,使得龍芯派可以通過控制繼電器的觸發引腳的高低電平來控制電機的啟停。一對軸分為主動軸和從動軸,兩者的裝配間距應小于0.2 mm,主動軸被支架約束只能進行轉動不能進行平移,而從動軸則既可以轉動也能進行平移,通過對從動軸進行平移運動可以改變主動軸與從動軸之間的距離,并將卷筒紙置于間隙中。
壓紙機構由一對12V推拉式電磁鐵、刀片和支架組成,如圖3所示。電磁鐵通電后,將電轉化為磁并產生吸力,在斷電時通過彈簧的彈力將其自動復位。推拉式電磁鐵的行程為200 mm,在通電時能夠將刀片快速向前推使得刀片將卷筒紙固定在凹槽內,此時用戶可以伸手將已經落下的卷筒紙扯下來。

圖3 壓紙機構
壓紙機構通過推拉式電磁鐵(行程20 mm)通電后線圈閉合帶動刀片將卷筒紙固定在凹槽內,其在未通電時應保持與凹槽有一定的間隙距離,經Solidworks模擬驗證,安裝距離為110 mm時最優。兩個電磁鐵同樣通過繼電器連接到龍芯派上,使得龍芯派可以控制電磁鐵的吸合與松開。
出紙方式是用刀片將卷筒紙壓住的方式進行固定后,用戶再用手撕下來完成取紙過程。為了進一步完善用戶的使用體驗,可以將壓住這個步驟改為切斷,直接將紙切斷后依靠重力讓紙落到用戶手上。
系統選取龍芯2K1000芯片作為主控設備,UI設計上使用Qt完成了桌面程序的編寫,并包含多種信息化內容。控制系統主要由位于龍芯派的客戶端以及Ubuntu服務端構成,并需在龍芯派中編寫底層驅動來控制12V直流電動機和推拉式電磁鐵,單位時間內出紙量可以設定,如定值300 mm,誤差在10 mm內。
由于需要滿足龍芯派能完成自動開機,因此為其設置了開機方案:PMON啟動(不顯示)→啟動內核(顯示Boot List)→調用Psplash→啟動Xserver并直接啟動Qt應用程序。系統控制流程圖如圖4所示。
龍芯派客戶端應用程序是通過Qt編譯的。Client進程啟動后,首先進行一系列初始化操作,包括初始化圖像處理進程,socket進程,Loongnix底層驅動進程,Qmainwindow進程,V4L2驅動進程,并在V4L2驅動初始化完成后獲取攝像頭數據,并將其memcpy到socket進程與Qmainwindow中。其流程框圖如圖4所示。

圖4 系統控制流程圖
Qmainwindow線程中,調用了圖像處理進程;無人臉時,直接顯示畫面;有人臉時,通過使用服務端傳回來的人臉檢測方框矩陣,在畫面上框出人臉并顯示;檢測成功時,會顯示檢測成功的提示圖片,并傳送給底層驅動進程。
Socket進程中,初始化完成后,首先將會通過select函數進行連接等待,在等待到服務端連接后,將攝像頭數據封包成V4L2包,并發送給服務端,再接受服務端傳回的檢測數據,并存放入全局變量中,供其他進程調用。Socket進程中,在等待到客戶端連接成功后,將會從客戶端接收回V4L2圖像數據;在人臉識別程序識別完成后,將會發送檢測結果與識別結果至客戶端。
Loongnix底層驅動進程中,如果接收到了傳過來的數據,便會通過傳進來的參數來進行啟動機械部分或是關閉機械部分的判斷。特別的、通過服務端傳回的強制命令將不通過Loongnix底層驅動進程,而是直接操作驅動文件。
人臉檢測主要通過OpenCV級聯分類器進行檢測,初始化時調用haarcascade_frontalface_alt.xml文件,加載Mat格式的數據,在經過灰度化與直方圖均衡化之后,進行檢測,然后返回人臉框圖矩陣。
OpenCV人臉識別進程中,首先會調用圖像處理進程,將V4L2數據轉化為Mat格式。人臉識別將圖像進行灰度化處理,并提取其LBP特征,進行ULBP降維處理,對圖像進行分割,分割成許多小cell,再對每個cell都進行直方圖處理,更新圖像模型,調用compareHist進行預測,并返回相似度。
抽紙系統實驗系統如圖5所示。

圖5 抽紙系統實驗系統
(1)采用Server+Client的設計理念,Server端運行Ubuntu 18.04,Client端 為 交 叉 編 譯3.10.0內 核 的loongnix系統,其間的通信經自動封包的Socket數據進行連接,物理上通過網線連接路由器組網。
(2)移植了yocto中的psplash程序,完成開機動畫制作,開機時使用xinit啟動Client,達到開機自啟的功能。
(3)人臉識別部分使用OpenCV 3.4.1,通過V4L2驅動獲取攝像頭畫面;加載OpenCV人臉檢測器后,通過實時獲取攝像頭獲取到的人臉,通過LBPH人臉識別器完成訓練,訓練由Server端完成,采集由Client端完成。
(4)Socket傳輸中包含四種數據頭(V4L2數據、檢測結果、識別結果、抽紙信息),在Socket傳輸中程序通過數據頭來辨識,并分別解碼得到有效數據。
系統需要準確進行人臉識別與檢測以達到無接觸抽紙的目的,并且需要能通過用戶層函數來控制底層驅動,不然整個項目將無法運行,并且人臉識別數據需求客戶端與服務端之間同步傳輸。Qt應用程序界面與同步人臉如圖6所示,同步人臉識別結果如圖7所示。

圖6 Qt應用程序界面與同步人臉檢測(Client)

圖7 同步人臉識別(Server)
人臉識別部分經過多次實驗驗證,將識別閾值設定為80%,此閾值能快速識別出人臉庫中的人臉,并且只會出現極少數的誤判,保證系統準確性,實驗數據經簡化后見表1。(誤判指識別成他人的臉,本實驗找了兩個臉型相似者進行對比實驗,每人各50次,超時10 s未檢測出歸為LOSS)。最終實現了準確的人臉識別/精確框出人臉/無延遲無卡頓的通信。

表1 人臉識別實驗數據
在送紙過程中,應滿足每次出紙的長度均為定值。為了精確控制出紙量,通過計算直流電機旋轉1 s可以出多少長度的紙,依次為單位時間內的出紙量。然后根據每次出紙需要的長度去設置延時。
系統單位時間內的出紙量為30 mm,按每次需要的出紙量為300 mm,需延時10 s。在實踐中發現每次出紙量有一些誤差,需要通過實驗來得到一個普遍的誤差值,并且如果這個誤差值在可接受范圍內,那么此法即可使用。
出紙量精度實驗檢測結果見表2。可見,出紙的長度誤差可以控制在7 mm以內,達到要求。

表2 出紙量精度的誤差控制實驗數據
基于龍芯派的人臉識別智能物聯網抽紙系統具有良好的應用前景。龍芯派能完成自動開機并無操作的連接上服務端,編寫了龍芯MIPS驅動及測試,能夠進行準確的人臉識別與人臉檢測,并準確控制驅動。能夠精確的分別在客戶端與服務端間框出人臉,精確無延遲無卡頓的連接客戶端與服務端之間的通信,通過龍芯派自編驅動控制自動完成送紙與壓紙的過程。如果進一步使用深度學習來完成識別的過程,則可以得到更高的人臉識別精度。