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