董志勇,李方方,徐志恒
(南京信息職業(yè)技術(shù)學(xué)院,江蘇 南京 210043)
大屏數(shù)據(jù)展示系統(tǒng)能解決具體應(yīng)用場景下的實時數(shù)據(jù)展示與分析,通過對市場調(diào)查研究發(fā)現(xiàn),目前大部分大屏數(shù)據(jù)展示系統(tǒng)只有標(biāo)準(zhǔn)的鍵盤鼠標(biāo)輸入。隨著人工智能技術(shù)的發(fā)展,計算機(jī)視覺越來越多的應(yīng)用在各個行業(yè),本文主要介紹圖像識別系統(tǒng)在數(shù)據(jù)大屏中的應(yīng)用。本系統(tǒng)通過手勢識別與人臉識別等功能,幫助用戶脫離傳統(tǒng)鍵盤鼠標(biāo)的交互,具有一定的創(chuàng)新性。
本文主要介紹圖像識別技術(shù)包括手勢識別、人臉識別等技術(shù)在數(shù)據(jù)大屏中的應(yīng)用,其中手勢識別系統(tǒng)是根據(jù)站在大屏前面的人所伸出的不同手勢來進(jìn)行數(shù)據(jù)的切換,可以不通過硬件就可以更改頁面,查看數(shù)據(jù)等,可以有效幫助工人脫離硬件完成數(shù)據(jù)的切換與顯示;人臉識別系統(tǒng)是根據(jù)每個站在屏幕前面人物的不同來自動轉(zhuǎn)跳到不同人物想要看的界面,可以有效節(jié)省切換數(shù)據(jù)的時間,還可以減少數(shù)據(jù)的泄露;手機(jī)遙控系統(tǒng)是根據(jù)手機(jī)掃描大屏的二維碼來進(jìn)行對大屏的操控與轉(zhuǎn)換,可以通過手機(jī)來進(jìn)行遠(yuǎn)距離的操控與更改,更符合智能工廠中的大屏戰(zhàn)術(shù)。
本文開發(fā)的數(shù)據(jù)大屏展示系統(tǒng)前端采用Vue-Element-admin,Element UI,Vue,Vant,Jquery等框架,后端是基于SpringCloud+Django+Tomcat+Nginx負(fù)載均衡+Java的云端服務(wù)器搭建+MySQL數(shù)據(jù)庫技術(shù)。
本系統(tǒng)主要使用的物理部件如下:(1)樹莓派3B以及支持樹莓派的攝像頭;(2)智能手機(jī)一部;(3)本地Linux系統(tǒng)的服務(wù)器若干臺;(4)本地實體顯示器一臺。
本系統(tǒng)基于樹莓派與物聯(lián)網(wǎng)技術(shù)開發(fā)的人機(jī)交互的圖像采集智能系統(tǒng)。通過樹莓派上的Linux與python技術(shù)來實現(xiàn)硬件獲取大屏實時圖像,并進(jìn)行相應(yīng)的分析與保存,將分析后的數(shù)據(jù)上傳到后端服務(wù)器中進(jìn)行進(jìn)一步的處理。
樹莓派外形是一個只有信用卡大小,卻具有PC功能的卡片式計算機(jī),它誕生于2012年3月英國劍橋大學(xué)Eben Epton之手。樹莓派一經(jīng)誕生就受到了各個計算機(jī)的強(qiáng)烈歡迎。主要是其本身擁有很多其他大型計算機(jī)并不具有的屬性。其中,微小性以及可擴(kuò)展性就是本系統(tǒng)選用作為線下數(shù)據(jù)采集的重要考慮因素。
本系統(tǒng)使用的樹莓派型號為3B+,在實際生產(chǎn)中可以用其他可以搭載Python 環(huán)境以及可以接收攝像頭的數(shù)據(jù)的物理微型操作硬件代替。樹莓派在本地主要作用是給實際場景下的人臉識別與手勢識別提供物理的技術(shù)支持,多用于放到實體顯示器上面以方便實際場景下的人臉信息的獲取以及手勢信息的獲取。
OpenCV是一個基于開源的掛平臺計算機(jī)數(shù)據(jù)庫,它主要實現(xiàn)計算機(jī)視覺方面的通用算法,目前是計算機(jī)視覺領(lǐng)域最通用以及最有力的研究工具。OpenCV由C/C++類構(gòu)成,擁有500多個C函數(shù)寫成的跨平臺API。OpenCV可以根據(jù)需求選擇依賴與不依賴外部庫。更重要的是OpenCV還提供了MLL(Machine Learning Library)機(jī)器學(xué)習(xí)庫,該功能為本系統(tǒng)手勢識別與人臉識別的信息預(yù)處理提供了幫助。
本系統(tǒng)通過Python來進(jìn)行OpenCV的加載與使用,樹莓派中Python的Camera函數(shù)來獲取實時的線下生產(chǎn)環(huán)境的生產(chǎn)數(shù)據(jù),并使用OpenCV進(jìn)行初步的人臉識別與手勢識別,將收集到的信息轉(zhuǎn)化成Json數(shù)據(jù)發(fā)送到服務(wù)器后端進(jìn)行進(jìn)一步操作[1]。
在實際的生產(chǎn)環(huán)境當(dāng)中,傳統(tǒng)的數(shù)據(jù)輸入設(shè)備有很多局限性,比如要物理上接觸才能夠進(jìn)行修改,不能遠(yuǎn)距離操控等。為了解決這一問題,本文設(shè)計出了圖像識別系統(tǒng)中的手勢識別系統(tǒng),通過圖像識別系統(tǒng)中的手勢識別系統(tǒng)來進(jìn)行對大屏系統(tǒng)的遠(yuǎn)程操控。
手勢識別是圖像識別的一個重要子集。手勢識別技術(shù)是通過基于視覺手勢系統(tǒng)來完成,主要有圖像采集,預(yù)處理,特征提取以及選擇,分類器設(shè)計,手勢識別。有3個步驟是識別系統(tǒng)的關(guān)鍵技術(shù),它們分別是預(yù)處理時手勢的分割技術(shù),特征提取以及選擇技術(shù),手勢跟蹤技術(shù),最后還有手勢識別所采用的算法。
人的手勢其本身就具有豐富的形變,運(yùn)動還有紋理特征。所以選取合理的特征對于手勢識別起著舉足輕重的作用。目前常用的手勢特征有:輪廓、邊緣、圖像炬,圖像的特征向量、區(qū)域直方圖特征等。
在進(jìn)行特征選取時應(yīng)該考慮結(jié)合多個特征圖,在《基于計算機(jī)視覺的手勢識別研究中》中有提到多度模型與矩描繪子相結(jié)合的相關(guān)算法,其將指尖和重點進(jìn)行連線,采用了距離公式計算各個指尖到重心的距離,再采用了反余弦公式來計算各個指尖與重心連線之間的夾角,并將距離和夾角來作為選擇的特征,從而提高了識別的正確率,并減少了識別所用的時間。在《基于幾何特征的手勢識別算法研究》中采用的識別算法是幾何矩和邊緣檢測,手勢圖像在經(jīng)過二值化處理之后,提取手勢圖像中的幾何矩特征,取出其中的幾何矩特征中7個特征分量中的4個分量,形成了手勢的幾何矩特征向量。在灰度圖的基礎(chǔ)上直接進(jìn)行檢測圖的邊緣,利用其直方圖中表示圖像的邊界的方向特征。在最后,通過系統(tǒng)設(shè)置兩個特征的權(quán)重來比較計算圖像之間的距離,再對手勢進(jìn)行分析與識別[2]。
從上述結(jié)論中可以看出采用多種特征結(jié)合的算法,能夠在計算的復(fù)雜度與精確性上有所提高。手勢檢測主要的影響因素有復(fù)雜背景、遮掩、外部的反射、直線光源亮度的變化等。手勢識別訓(xùn)練過程如圖1所示。
圖1 手勢識別訓(xùn)練過程
手勢識別系統(tǒng)有許多實現(xiàn)的算法,其中最著名的有3種:基于算法的手勢識別,基于神經(jīng)網(wǎng)絡(luò)的手勢識別,基于樣本的識別。
每個手勢識別算法都需要有不同的參數(shù),比如閾值,時間間隔等。尤其是在根據(jù)流程識別特定的算法時則更明顯。開發(fā)者需要不停地測試以及實驗才能夠確定這一合適的參數(shù)。這個過程則是要耗費許多時間以及人力才能夠完成。
當(dāng)用戶在做手勢的時候,有一些手勢并不能單純地使用對或錯的二值化進(jìn)行判斷。識別程序會錯誤地認(rèn)為此手勢會變成其他手勢。使得一部分手勢的定義會變得模糊。同時,如果一個程序要同時進(jìn)行多個手勢的識別任務(wù),會讓此程序變得混亂難以調(diào)試。
基于神經(jīng)網(wǎng)絡(luò)的手勢識別主要步驟是先采集樣本手勢,然后提取樣本特征,通過神經(jīng)網(wǎng)絡(luò)建立模型并且訓(xùn)練得到一個合適的模型。神經(jīng)網(wǎng)絡(luò)中的每個神經(jīng)元都對應(yīng)著不同的算法,根據(jù)數(shù)據(jù)結(jié)構(gòu)進(jìn)行信息處理,用來判斷不同的手勢,因此基于手勢識別的神經(jīng)網(wǎng)絡(luò)處理速度很高。但是缺點就是計算比較復(fù)雜,每個神經(jīng)元都需要進(jìn)行參數(shù)配置和調(diào)優(yōu)[3]。
基于樣本的手勢識別主要有兩種方法,一種是基于模板庫的,根據(jù)模板庫計算手勢之間匹配的精密程度,這種是屬于規(guī)范化的識別,但是缺點是受限于模板庫的大小;第二種方法是使用類似的Kinect SDK中的骨骼追蹤系統(tǒng),這種含有骨骼數(shù)據(jù)以及景深幀數(shù)據(jù),并使用統(tǒng)計方法對產(chǎn)生的影像幀數(shù)據(jù)進(jìn)行匹配從而識別出已知的幀數(shù)據(jù)[4]。
這種方法一般都會高度依賴機(jī)器學(xué)習(xí)。所產(chǎn)生的數(shù)據(jù),往往都會根據(jù)時間的加長而增多,手勢識別精度也會因此而變得更加準(zhǔn)確。此類方法能夠比較快捷地辨別出新手勢,并且與其他兩種方法對比起來,可以更好地識別出復(fù)雜的手勢。但是構(gòu)建該系統(tǒng)并非一件簡單的事,系統(tǒng)需要大量的樣本數(shù)據(jù)進(jìn)行訓(xùn)練。隨著數(shù)據(jù)的爭奪,識別精度也會變得越來越高。因此系統(tǒng)需要海量資源和處理器以及時間進(jìn)行手勢的匹配。
選擇手勢識別的方法通常是依賴于項目的需要,如果手勢比較簡單,并且數(shù)量不多,就可以采用基于算法或者基于神經(jīng)網(wǎng)絡(luò)的手勢識別。但是本文面對的場景是大屏數(shù)據(jù)展示系統(tǒng),面對的手勢較多,因此本文采用基于樣本和算法的手勢識別,算法采用的是高斯混合模型(GMM)算法。本系統(tǒng)采用此功能是在樹莓派上實現(xiàn)的,通過樹莓派上Python語言開發(fā)出的識別系統(tǒng),能夠獲得站在大屏前面手勢的信息。
算法步驟具體為:(1)首先獲取一張背景圖;(2)用樹莓派的攝像頭實時獲取大屏前人的手勢;(3)把獲取到的圖像跟背景圖進(jìn)行對比;(4)剪出不一樣的地方進(jìn)行進(jìn)一步分析(使用高斯混合模型分析算法);(5)為了減少多余的性能消耗,我們將裁剪出來的圖片去掉RGB顏色轉(zhuǎn)化成黑白圖(使用二分法);(6)最后用一根線描出圖像的外輪廓,用另個顏色的線描繪出圖像的形狀,(7)根據(jù)外輪廓與形狀角度的對比,根據(jù)手指之間的角度來分辨出手勢,手勢識別的演示效果如圖2所示。
圖2 手勢識別界面
其中高斯混合模型(GMM)算法的關(guān)鍵代碼詳細(xì)實現(xiàn)如下:
// 采集到的RGB像素數(shù)據(jù)轉(zhuǎn)變
//轉(zhuǎn)變原始的樣本數(shù)據(jù)
int i= 0;
for (int row = 0;row < height;row++){
for (int col = 0;col < width;col++){
index = row ? width + col;
Vec3b rgbPic = src.at
points.at
points.at
points.at
}
}
em_model->setTermCriteria(TermCriteria (TermCriteria::YFS+ TermCriteria::1,100,0.1));
// 對圖像中每個像素點進(jìn)行標(biāo)記顏色并且顯示
Ptr
Ptr
em_model->setClustersNumber(C);
Emwg3_model->setC(EM::5);
設(shè)計完手勢識別系統(tǒng)之后,又考慮到一種情景,那就是當(dāng)用戶因某些特殊的原因無法騰出手來進(jìn)行遠(yuǎn)程操控,所以本系統(tǒng)又開發(fā)出了人臉識別系統(tǒng)來解決此問題。系統(tǒng)可以通過人臉來識別站在大屏前面的人物,當(dāng)多名人物出現(xiàn)時,系統(tǒng)會尋找出權(quán)值最高人的人臉并顯示畫面。人臉識別算法主要是包括3個模塊:人臉識別、人臉對齊以及人臉特征表征。
本系統(tǒng)主要使用的是FaceNet來進(jìn)行人臉的識別。FaceNet是一個通用人臉識別系統(tǒng),主要采用深度卷積神經(jīng)網(wǎng)絡(luò)(CNN)學(xué)習(xí)將圖像映射到歐式空間。空間距離直接和圖片相似度相關(guān)。一個人的不同圖像在空間距離很小,不同人的圖像在空間中有較大的距離,可以用于人臉驗證、識別和聚類。目前FaceNet在LFW數(shù)據(jù)集上測試的準(zhǔn)確率達(dá)到了99.63%。人臉識別的主要過程是首先采集到所有用戶的人臉數(shù)據(jù)錄入數(shù)據(jù)庫,接著判斷大屏前面有幾張臉,如果只有一張臉,就提取特征碼,與人臉庫進(jìn)行一一對比,找出相似度最大的角色,然后根據(jù)系統(tǒng)設(shè)置的角色權(quán)限來修改大屏系統(tǒng);如果大屏前面有多張臉,那就分別提取各個人臉的特征碼,與人臉庫進(jìn)行一一比對,找出相似度最大的角色,進(jìn)而登錄大屏系統(tǒng)。
本文將手勢識別系統(tǒng)、人臉識別系統(tǒng)、手機(jī)遙控系統(tǒng)應(yīng)用在數(shù)據(jù)大屏展示系統(tǒng)上,讓用戶脫離鼠標(biāo)和鍵盤對大屏進(jìn)行操作,有效提高了用戶體驗,具有一定程度的創(chuàng)新。