賈書香
(山東華宇工學院,山東 德州 253034)
手勢識別技術是一種自然、簡潔、直接的新型技術,已成為交互性技術研究的熱點,被廣泛應用于交通、醫療、無線設備操控、手語翻譯、VR游戲等領域。比如其可實現對交通信號的識別,將其應用于醫療器械可減少交叉感染。近年來,人機交互不斷發展,要將手勢識別技術用于計算機交互,需對其進行深入研究,利用手勢識別實現控制。
該系統包括STM32單片機主控板、手勢識別模塊、JR6001語音播報模塊和OLED顯示器等模塊。系統整體框圖如圖1所示。

圖1 系統整體框圖Fig.1 Overall block diagram of the system
該系統以STM32作為核心處理器,集成了手勢檢測系統、OLED顯示器和JR6001語音播報等模塊。手勢識別系統的主控制模塊是STM32單片機,外圍實現手勢信號獲取的是PAJ7620光學數組傳感器,當傳感器陣列在有效的距離中探測到物體時,目標信息提取陣列會對探測目標進行特征原始數據獲取并儲存在寄存器中,同時對原始數據進行識別信息處理,將處理得到的手勢結果存在寄存器中。
單片機驅動OLED12864液晶屏顯示手勢動作的文字形式,為了進一步對手勢控制效果進行展示,使用上下左右4個朝向的LED燈作為手勢響應設備,手勢向左則驅動左側LED燈點亮,其他“右、上、下”3個朝向同理。
通過語音播報系統對當前手勢進行播報,手勢向前則驅動語音播報模塊播放“當前手勢為向前”“后、順時針、逆時針”3個朝向同理。
手勢識別控制系統的主控核心是STM32,由晶振電路及復位電路構成。單片機在結構上主要分為存儲器、控制器、并行I/O口、時鐘電路4部分。單片機內部的控制器類似于大腦的功能,協調與控制系統進行工作,能夠對各個環節進行實時調控。
晶振電路設計采用內部時鐘的應用形式,分別在OSCIN、OSCOUT引腳上接入晶振及電容,以確保電路可提供準確的單頻振蕩,為系統的平穩運行提供基礎性的時鐘信號。晶振電路中設有2個LED,分別串聯電阻形成的指示燈模塊,主要用于系統能否進行正常運轉的顯示操作,同時對下載程序是否有效進行判別。在單片機最小系統中,復位電路的主要作用是在系統程序跑亂、系統內部程序數據不能正常執行、程序代碼混亂的情況下,通過上電提供給系統正常工作狀態下的相反的電平,以達到系統程序重新運行的目的。復位電路由按鍵和0.1uF并聯后再串聯1個10K電阻構成。
PAJ7620內部自帶LED驅動器、傳感器感應陣列、目標信息提取陣列和手勢識別陣列等,工作時通過內部LED驅動器驅動紅外LED,向外發射紅外線信號,當傳感器陣列在有效的距離中探測到物體時,目標信息提取陣列會對探測目標進行特征原始數據獲取,獲取的數據存在寄存器中,同時手勢識別陣列對原始數據進行識別信息處理,將結果存到寄存器中,用戶可使用I2C接口對原始數據和手勢識別的結果進行讀取。此模塊采用“原相科技”的PAJ7620芯片,是一個5腳器件,設計時將1腳VCC接到電源供電信號上,2腳GND與主板的大地信號互聯,SCL時鐘信號連接到單片機的PA2接口,SDA數據傳輸信號連接到單片機的PA3接口。
2.3.1 語音模塊
語音播報模塊主要采用深圳市佳仁科技有限公司開發的JR6001芯片,此模塊自帶USB接口,能靈活更換SPI-flash內的的語音內容,省去了傳統語音芯片需要安裝上位機更換語音的環節,SPI FLASH直接模擬成U盤,與拷貝U盤一樣,非常方便。
JR6001語音模塊主要用來體現不同手勢不同響應的效果。當進行手勢識別測試時,屏幕會顯示相應的手勢,“向前”“向后”“順時針”和“逆時針”的手勢通過語音播報提示。本模塊與揚聲器連接,將聲音公放出來,語音內容包括:00001:歡迎使用手勢識別,測試系統;00002:當前為手勢識別測試;00003:當前手勢為向前;00004:當前手勢為向后;00005:當前手勢為順時針;00006:當前手勢為逆時針。
2.3.2 LED燈
LED燈主要體現不同手勢不同響應的效果,當進行手勢識別測試時,屏幕會顯示相應的手勢,分別為“向上”“向下”“向左”“向右”的手勢,通過點亮對應的LED燈進行提示。本設計用了4個LED燈,分別放在4個方向位置,當做出手勢動作時,點亮對應方向的LED燈。
OLED在正常通電下即可實現發光,無須獨立的背光層,因此OLED液晶屏的尺寸厚度相對薄一些,外觀結構尺寸約為LCD1602的一半,但顯示內容是一樣的,具有獨立的特點,針對各顯示單元寄存器上的地址修改數值,可單獨驅動部分背光點亮,無須將整個背光全部點亮,因此具有較好的節能特性。像素點顏色切換時間即灰階響應時間極短,在畫面切換和變更時不會產生明顯的拖影。液晶屏是7管腳的器件,SCL是時鐘信號,用于實現液晶屏上電啟動和工作時序的控制。SDA是液晶屏的數據顯示信號,用于實現液晶屏的顯示內容輸出。SCL和SDA都與單片機接口直連,設計時通過查看OLED液晶屏規格書中關于上電時序的內容,遵循液晶屏的上電邏輯。
OLED顯示器主要用于將“向上”“向下”“向左”“向右”“向前”“向后”“順時針”和“逆時針”8種手勢以文字形式顯示出來。
STM32單片機需要3.3 V的穩定電壓,手勢識別、OLED屏等其他器件則使用5.0 V電壓,因此該系統需要5.0 V和3.3 V兩種等級的電壓供電。本設計采用單片機自帶的USB接口連接電源進行供電,并采用ME6211作為電壓模塊進行電平轉換。
手勢識別控制系統的數據輸入主要通過手勢傳感器的電平信號變化數值,對數據進行處理和響應,完成數據的加減操作,將預設的手勢字符段寫入液晶屏呈現出來,通過LED燈按照手勢內容進行響應,并調用語音播報模塊完成實時播報。系統流程如圖2所示。
手勢識別模塊的設計。數據采集部分需利用手勢傳感器的DATA返回值進行識別,程序首先對傳感器初始化并判斷是否在位,只有傳感器在位才會進入下一采集階段,傳感器的狀態默認保持高電平,若電平無變化則未進行數據采集,當檢測到有一個低電平信號,則單片機讀取傳感器信號值并發送,本次傳感器采集結束返回,輸出采集數值,完成該流程后重新進入此函數,并循環不斷采集和輸出。

圖2 系統流程圖Fig.2 Flow chart of the system
語音播報模塊的設計。語音播報程序利用已寫入語音芯片寄存器的字符內容轉化音頻輸出文件,系統對語音內容庫進行設置,當識別到正常的手勢指令時,調用語音,按照預設的內容進行播報。
OLED屏的設計。程序運行第一步會對液晶屏的配置和顯示寄存器的值初始化并賦初始值,液晶正常顯示預設的固定參數名稱內容,對應參數的數據同步調用寄存器的數據進行實時刷新顯示,判斷液晶屏是否處于“忙”階段,“非忙”即可寫入新的液晶顯示指令,循環讀取和寫入,實現液晶屏的顯示調用。
系統調試通過Keil uVision5進行,通過軟硬件結合的形式,對各個單獨模塊進行逐個測試,對程序部分進行參數調試與分析,整合各個模塊,完成功能和性能調試。
確認各模塊的供電電壓是否正常,若不正常需排查原因。編譯簡單的程序進行單項功能的確認,如驅動語音播報模塊播報簡單的內容,驗證是否按照預期進行播報、液晶屏是否顯示預設的字符等。對各個模塊的功能進行逐個調試,如表1所示。

表1 硬件模塊測試結果Tab.1 Results of hardware module test
接通電源后,系統正常開啟,同時在液晶屏上顯示“手勢識別系統,手勢識別測試”,語音播報模塊播報“歡迎使用手勢識別,測試系統”,再進行接下來的操作。
手勢檢測環節,例如:使用手勢識別測試為向上的內容,手勢向上劃,可在液晶屏上看到當前手勢:向上,同時上方的LED燈點亮;使用手勢識別測試為向下的內容,手勢向下劃,可在液晶屏上看到當前手勢:向下,同時下方的LED燈點亮;使用手勢識別測試為順時針的內容,手勢順時針劃,液晶屏上顯示“當前手勢:順時針”,語音播報“當前手勢:順時針”。
手勢識別測試過程中,選擇了10位受試者,分別為被試1、被試2、被試3、被試4、被試5、被試6、被試7、被試8、被試9、被試10。每人分別進行8組手勢動作的重復執行,每組動作重復20次。每次手勢動作執行完成后通過OLED屏、語音播報和LED燈進行展示識別結果并將其記錄下來,計算手勢的正確識別率。
通過第一次測試可得,8個手勢的正確識別率都不高于60%,其中“順時針”和“逆時針”兩個手勢的識別率都低于40%,可見,手勢識別技術還應更加完善,使其準確率更高。對程序進行調試和分析,對后期測試實驗過程結果進行統計,手勢識別結果記錄及手勢識別正確率記錄如表2和表3所示。

表2 手勢識別結果記錄表Tab.2 Record of gesture recognition results

表3 手勢識別正確率記錄表Tab.3 Accuracy record of gesture recognition
由表3可得,8個手勢的識別率最終顯示都在90%以上,其中5個手勢的識別率能達到95%及以上,手勢識別的精確度較高。后續會不斷優化其精度,使其實現更好的效果。
系統的功能測試結果如表4所示。

表4 功能測試結果Tab.4 Results of functional test
以STM32單片機為控制芯片、使用PAJ7620手勢傳感器實現控制指令數據的采集,利用OLED液晶屏實現數據顯示。該設計使用C語言編寫了單片機系統的所有采集與控制程序,通過硬件與軟件部分的設計與制作,方法合適,達到了預期效果。