賈書香
(山東華宇工學(xué)院,山東 德州 253034)
手勢(shì)識(shí)別技術(shù)是一種自然、簡(jiǎn)潔、直接的新型技術(shù),已成為交互性技術(shù)研究的熱點(diǎn),被廣泛應(yīng)用于交通、醫(yī)療、無(wú)線設(shè)備操控、手語(yǔ)翻譯、VR游戲等領(lǐng)域。比如其可實(shí)現(xiàn)對(duì)交通信號(hào)的識(shí)別,將其應(yīng)用于醫(yī)療器械可減少交叉感染。近年來(lái),人機(jī)交互不斷發(fā)展,要將手勢(shì)識(shí)別技術(shù)用于計(jì)算機(jī)交互,需對(duì)其進(jìn)行深入研究,利用手勢(shì)識(shí)別實(shí)現(xiàn)控制。
該系統(tǒng)包括STM32單片機(jī)主控板、手勢(shì)識(shí)別模塊、JR6001語(yǔ)音播報(bào)模塊和OLED顯示器等模塊。系統(tǒng)整體框圖如圖1所示。
圖1 系統(tǒng)整體框圖Fig.1 Overall block diagram of the system
該系統(tǒng)以STM32作為核心處理器,集成了手勢(shì)檢測(cè)系統(tǒng)、OLED顯示器和JR6001語(yǔ)音播報(bào)等模塊。手勢(shì)識(shí)別系統(tǒng)的主控制模塊是STM32單片機(jī),外圍實(shí)現(xiàn)手勢(shì)信號(hào)獲取的是PAJ7620光學(xué)數(shù)組傳感器,當(dāng)傳感器陣列在有效的距離中探測(cè)到物體時(shí),目標(biāo)信息提取陣列會(huì)對(duì)探測(cè)目標(biāo)進(jìn)行特征原始數(shù)據(jù)獲取并儲(chǔ)存在寄存器中,同時(shí)對(duì)原始數(shù)據(jù)進(jìn)行識(shí)別信息處理,將處理得到的手勢(shì)結(jié)果存在寄存器中。
單片機(jī)驅(qū)動(dòng)OLED12864液晶屏顯示手勢(shì)動(dòng)作的文字形式,為了進(jìn)一步對(duì)手勢(shì)控制效果進(jìn)行展示,使用上下左右4個(gè)朝向的LED燈作為手勢(shì)響應(yīng)設(shè)備,手勢(shì)向左則驅(qū)動(dòng)左側(cè)LED燈點(diǎn)亮,其他“右、上、下”3個(gè)朝向同理。
通過(guò)語(yǔ)音播報(bào)系統(tǒng)對(duì)當(dāng)前手勢(shì)進(jìn)行播報(bào),手勢(shì)向前則驅(qū)動(dòng)語(yǔ)音播報(bào)模塊播放“當(dāng)前手勢(shì)為向前”“后、順時(shí)針、逆時(shí)針”3個(gè)朝向同理。
手勢(shì)識(shí)別控制系統(tǒng)的主控核心是STM32,由晶振電路及復(fù)位電路構(gòu)成。單片機(jī)在結(jié)構(gòu)上主要分為存儲(chǔ)器、控制器、并行I/O口、時(shí)鐘電路4部分。單片機(jī)內(nèi)部的控制器類似于大腦的功能,協(xié)調(diào)與控制系統(tǒng)進(jìn)行工作,能夠?qū)Ω鱾€(gè)環(huán)節(jié)進(jìn)行實(shí)時(shí)調(diào)控。
晶振電路設(shè)計(jì)采用內(nèi)部時(shí)鐘的應(yīng)用形式,分別在OSCIN、OSCOUT引腳上接入晶振及電容,以確保電路可提供準(zhǔn)確的單頻振蕩,為系統(tǒng)的平穩(wěn)運(yùn)行提供基礎(chǔ)性的時(shí)鐘信號(hào)。晶振電路中設(shè)有2個(gè)LED,分別串聯(lián)電阻形成的指示燈模塊,主要用于系統(tǒng)能否進(jìn)行正常運(yùn)轉(zhuǎn)的顯示操作,同時(shí)對(duì)下載程序是否有效進(jìn)行判別。在單片機(jī)最小系統(tǒng)中,復(fù)位電路的主要作用是在系統(tǒng)程序跑亂、系統(tǒng)內(nèi)部程序數(shù)據(jù)不能正常執(zhí)行、程序代碼混亂的情況下,通過(guò)上電提供給系統(tǒng)正常工作狀態(tài)下的相反的電平,以達(dá)到系統(tǒng)程序重新運(yùn)行的目的。復(fù)位電路由按鍵和0.1uF并聯(lián)后再串聯(lián)1個(gè)10K電阻構(gòu)成。
PAJ7620內(nèi)部自帶LED驅(qū)動(dòng)器、傳感器感應(yīng)陣列、目標(biāo)信息提取陣列和手勢(shì)識(shí)別陣列等,工作時(shí)通過(guò)內(nèi)部LED驅(qū)動(dòng)器驅(qū)動(dòng)紅外LED,向外發(fā)射紅外線信號(hào),當(dāng)傳感器陣列在有效的距離中探測(cè)到物體時(shí),目標(biāo)信息提取陣列會(huì)對(duì)探測(cè)目標(biāo)進(jìn)行特征原始數(shù)據(jù)獲取,獲取的數(shù)據(jù)存在寄存器中,同時(shí)手勢(shì)識(shí)別陣列對(duì)原始數(shù)據(jù)進(jìn)行識(shí)別信息處理,將結(jié)果存到寄存器中,用戶可使用I2C接口對(duì)原始數(shù)據(jù)和手勢(shì)識(shí)別的結(jié)果進(jìn)行讀取。此模塊采用“原相科技”的PAJ7620芯片,是一個(gè)5腳器件,設(shè)計(jì)時(shí)將1腳VCC接到電源供電信號(hào)上,2腳GND與主板的大地信號(hào)互聯(lián),SCL時(shí)鐘信號(hào)連接到單片機(jī)的PA2接口,SDA數(shù)據(jù)傳輸信號(hào)連接到單片機(jī)的PA3接口。
2.3.1 語(yǔ)音模塊
語(yǔ)音播報(bào)模塊主要采用深圳市佳仁科技有限公司開發(fā)的JR6001芯片,此模塊自帶USB接口,能靈活更換SPI-flash內(nèi)的的語(yǔ)音內(nèi)容,省去了傳統(tǒng)語(yǔ)音芯片需要安裝上位機(jī)更換語(yǔ)音的環(huán)節(jié),SPI FLASH直接模擬成U盤,與拷貝U盤一樣,非常方便。
JR6001語(yǔ)音模塊主要用來(lái)體現(xiàn)不同手勢(shì)不同響應(yīng)的效果。當(dāng)進(jìn)行手勢(shì)識(shí)別測(cè)試時(shí),屏幕會(huì)顯示相應(yīng)的手勢(shì),“向前”“向后”“順時(shí)針”和“逆時(shí)針”的手勢(shì)通過(guò)語(yǔ)音播報(bào)提示。本模塊與揚(yáng)聲器連接,將聲音公放出來(lái),語(yǔ)音內(nèi)容包括:00001:歡迎使用手勢(shì)識(shí)別,測(cè)試系統(tǒng);00002:當(dāng)前為手勢(shì)識(shí)別測(cè)試;00003:當(dāng)前手勢(shì)為向前;00004:當(dāng)前手勢(shì)為向后;00005:當(dāng)前手勢(shì)為順時(shí)針;00006:當(dāng)前手勢(shì)為逆時(shí)針。
2.3.2 LED燈
LED燈主要體現(xiàn)不同手勢(shì)不同響應(yīng)的效果,當(dāng)進(jìn)行手勢(shì)識(shí)別測(cè)試時(shí),屏幕會(huì)顯示相應(yīng)的手勢(shì),分別為“向上”“向下”“向左”“向右”的手勢(shì),通過(guò)點(diǎn)亮對(duì)應(yīng)的LED燈進(jìn)行提示。本設(shè)計(jì)用了4個(gè)LED燈,分別放在4個(gè)方向位置,當(dāng)做出手勢(shì)動(dòng)作時(shí),點(diǎn)亮對(duì)應(yīng)方向的LED燈。
OLED在正常通電下即可實(shí)現(xiàn)發(fā)光,無(wú)須獨(dú)立的背光層,因此OLED液晶屏的尺寸厚度相對(duì)薄一些,外觀結(jié)構(gòu)尺寸約為L(zhǎng)CD1602的一半,但顯示內(nèi)容是一樣的,具有獨(dú)立的特點(diǎn),針對(duì)各顯示單元寄存器上的地址修改數(shù)值,可單獨(dú)驅(qū)動(dòng)部分背光點(diǎn)亮,無(wú)須將整個(gè)背光全部點(diǎn)亮,因此具有較好的節(jié)能特性。像素點(diǎn)顏色切換時(shí)間即灰階響應(yīng)時(shí)間極短,在畫面切換和變更時(shí)不會(huì)產(chǎn)生明顯的拖影。液晶屏是7管腳的器件,SCL是時(shí)鐘信號(hào),用于實(shí)現(xiàn)液晶屏上電啟動(dòng)和工作時(shí)序的控制。SDA是液晶屏的數(shù)據(jù)顯示信號(hào),用于實(shí)現(xiàn)液晶屏的顯示內(nèi)容輸出。SCL和SDA都與單片機(jī)接口直連,設(shè)計(jì)時(shí)通過(guò)查看OLED液晶屏規(guī)格書中關(guān)于上電時(shí)序的內(nèi)容,遵循液晶屏的上電邏輯。
OLED顯示器主要用于將“向上”“向下”“向左”“向右”“向前”“向后”“順時(shí)針”和“逆時(shí)針”8種手勢(shì)以文字形式顯示出來(lái)。
STM32單片機(jī)需要3.3 V的穩(wěn)定電壓,手勢(shì)識(shí)別、OLED屏等其他器件則使用5.0 V電壓,因此該系統(tǒng)需要5.0 V和3.3 V兩種等級(jí)的電壓供電。本設(shè)計(jì)采用單片機(jī)自帶的USB接口連接電源進(jìn)行供電,并采用ME6211作為電壓模塊進(jìn)行電平轉(zhuǎn)換。
手勢(shì)識(shí)別控制系統(tǒng)的數(shù)據(jù)輸入主要通過(guò)手勢(shì)傳感器的電平信號(hào)變化數(shù)值,對(duì)數(shù)據(jù)進(jìn)行處理和響應(yīng),完成數(shù)據(jù)的加減操作,將預(yù)設(shè)的手勢(shì)字符段寫入液晶屏呈現(xiàn)出來(lái),通過(guò)LED燈按照手勢(shì)內(nèi)容進(jìn)行響應(yīng),并調(diào)用語(yǔ)音播報(bào)模塊完成實(shí)時(shí)播報(bào)。系統(tǒng)流程如圖2所示。
手勢(shì)識(shí)別模塊的設(shè)計(jì)。數(shù)據(jù)采集部分需利用手勢(shì)傳感器的DATA返回值進(jìn)行識(shí)別,程序首先對(duì)傳感器初始化并判斷是否在位,只有傳感器在位才會(huì)進(jìn)入下一采集階段,傳感器的狀態(tài)默認(rèn)保持高電平,若電平無(wú)變化則未進(jìn)行數(shù)據(jù)采集,當(dāng)檢測(cè)到有一個(gè)低電平信號(hào),則單片機(jī)讀取傳感器信號(hào)值并發(fā)送,本次傳感器采集結(jié)束返回,輸出采集數(shù)值,完成該流程后重新進(jìn)入此函數(shù),并循環(huán)不斷采集和輸出。
圖2 系統(tǒng)流程圖Fig.2 Flow chart of the system
語(yǔ)音播報(bào)模塊的設(shè)計(jì)。語(yǔ)音播報(bào)程序利用已寫入語(yǔ)音芯片寄存器的字符內(nèi)容轉(zhuǎn)化音頻輸出文件,系統(tǒng)對(duì)語(yǔ)音內(nèi)容庫(kù)進(jìn)行設(shè)置,當(dāng)識(shí)別到正常的手勢(shì)指令時(shí),調(diào)用語(yǔ)音,按照預(yù)設(shè)的內(nèi)容進(jìn)行播報(bào)。
OLED屏的設(shè)計(jì)。程序運(yùn)行第一步會(huì)對(duì)液晶屏的配置和顯示寄存器的值初始化并賦初始值,液晶正常顯示預(yù)設(shè)的固定參數(shù)名稱內(nèi)容,對(duì)應(yīng)參數(shù)的數(shù)據(jù)同步調(diào)用寄存器的數(shù)據(jù)進(jìn)行實(shí)時(shí)刷新顯示,判斷液晶屏是否處于“忙”階段,“非忙”即可寫入新的液晶顯示指令,循環(huán)讀取和寫入,實(shí)現(xiàn)液晶屏的顯示調(diào)用。
系統(tǒng)調(diào)試通過(guò)Keil uVision5進(jìn)行,通過(guò)軟硬件結(jié)合的形式,對(duì)各個(gè)單獨(dú)模塊進(jìn)行逐個(gè)測(cè)試,對(duì)程序部分進(jìn)行參數(shù)調(diào)試與分析,整合各個(gè)模塊,完成功能和性能調(diào)試。
確認(rèn)各模塊的供電電壓是否正常,若不正常需排查原因。編譯簡(jiǎn)單的程序進(jìn)行單項(xiàng)功能的確認(rèn),如驅(qū)動(dòng)語(yǔ)音播報(bào)模塊播報(bào)簡(jiǎn)單的內(nèi)容,驗(yàn)證是否按照預(yù)期進(jìn)行播報(bào)、液晶屏是否顯示預(yù)設(shè)的字符等。對(duì)各個(gè)模塊的功能進(jìn)行逐個(gè)調(diào)試,如表1所示。
表1 硬件模塊測(cè)試結(jié)果Tab.1 Results of hardware module test
接通電源后,系統(tǒng)正常開啟,同時(shí)在液晶屏上顯示“手勢(shì)識(shí)別系統(tǒng),手勢(shì)識(shí)別測(cè)試”,語(yǔ)音播報(bào)模塊播報(bào)“歡迎使用手勢(shì)識(shí)別,測(cè)試系統(tǒng)”,再進(jìn)行接下來(lái)的操作。
手勢(shì)檢測(cè)環(huán)節(jié),例如:使用手勢(shì)識(shí)別測(cè)試為向上的內(nèi)容,手勢(shì)向上劃,可在液晶屏上看到當(dāng)前手勢(shì):向上,同時(shí)上方的LED燈點(diǎn)亮;使用手勢(shì)識(shí)別測(cè)試為向下的內(nèi)容,手勢(shì)向下劃,可在液晶屏上看到當(dāng)前手勢(shì):向下,同時(shí)下方的LED燈點(diǎn)亮;使用手勢(shì)識(shí)別測(cè)試為順時(shí)針的內(nèi)容,手勢(shì)順時(shí)針劃,液晶屏上顯示“當(dāng)前手勢(shì):順時(shí)針”,語(yǔ)音播報(bào)“當(dāng)前手勢(shì):順時(shí)針”。
手勢(shì)識(shí)別測(cè)試過(guò)程中,選擇了10位受試者,分別為被試1、被試2、被試3、被試4、被試5、被試6、被試7、被試8、被試9、被試10。每人分別進(jìn)行8組手勢(shì)動(dòng)作的重復(fù)執(zhí)行,每組動(dòng)作重復(fù)20次。每次手勢(shì)動(dòng)作執(zhí)行完成后通過(guò)OLED屏、語(yǔ)音播報(bào)和LED燈進(jìn)行展示識(shí)別結(jié)果并將其記錄下來(lái),計(jì)算手勢(shì)的正確識(shí)別率。
通過(guò)第一次測(cè)試可得,8個(gè)手勢(shì)的正確識(shí)別率都不高于60%,其中“順時(shí)針”和“逆時(shí)針”兩個(gè)手勢(shì)的識(shí)別率都低于40%,可見,手勢(shì)識(shí)別技術(shù)還應(yīng)更加完善,使其準(zhǔn)確率更高。對(duì)程序進(jìn)行調(diào)試和分析,對(duì)后期測(cè)試實(shí)驗(yàn)過(guò)程結(jié)果進(jìn)行統(tǒng)計(jì),手勢(shì)識(shí)別結(jié)果記錄及手勢(shì)識(shí)別正確率記錄如表2和表3所示。
表2 手勢(shì)識(shí)別結(jié)果記錄表Tab.2 Record of gesture recognition results
表3 手勢(shì)識(shí)別正確率記錄表Tab.3 Accuracy record of gesture recognition
由表3可得,8個(gè)手勢(shì)的識(shí)別率最終顯示都在90%以上,其中5個(gè)手勢(shì)的識(shí)別率能達(dá)到95%及以上,手勢(shì)識(shí)別的精確度較高。后續(xù)會(huì)不斷優(yōu)化其精度,使其實(shí)現(xiàn)更好的效果。
系統(tǒng)的功能測(cè)試結(jié)果如表4所示。
表4 功能測(cè)試結(jié)果Tab.4 Results of functional test
以STM32單片機(jī)為控制芯片、使用PAJ7620手勢(shì)傳感器實(shí)現(xiàn)控制指令數(shù)據(jù)的采集,利用OLED液晶屏實(shí)現(xiàn)數(shù)據(jù)顯示。該設(shè)計(jì)使用C語(yǔ)言編寫了單片機(jī)系統(tǒng)的所有采集與控制程序,通過(guò)硬件與軟件部分的設(shè)計(jì)與制作,方法合適,達(dá)到了預(yù)期效果。