手勢辨識是電腦科學(xué)和語言技術(shù)中常見的主題之一,能夠透過數(shù)學(xué)演算法解釋人類手勢。這在機(jī)器和人類之間搭起更豐富的橋梁,讓生活更有趣、更智慧。依據(jù)影像/影片的手勢辨識有許多研究,這些研究通常使用2D攝影機(jī)。本文將探討利用新的飛行時間(Time-of-Flight;ToF)3D手勢辨識解決方案。
在目前的COVID-19疫情下,大眾對「無接觸」解決方案的使用者介面要求越來越多,而保持社交距離正成為「新常態(tài)」。我們平常仍需要接觸公共場所中的多個物件,特別是操作ATM、自動販賣機(jī)、工廠機(jī)器的介面。全新的ST感測技術(shù)與強(qiáng)大的AI演算法結(jié)合,我們可以透過3D手勢辨識來實(shí)現(xiàn)這種解決方案。
展示概述
這個展示目前能夠辨識多達(dá)8種手勢,包括向左滑動、向右滑動、向上滑動、向下滑動、點(diǎn)選、點(diǎn)兩下、順時針旋轉(zhuǎn)和逆時針旋轉(zhuǎn)。我們使用ST最新的VL53L5CX ToF 8X8多區(qū)域測距感測器輸入,接著於STM32上運(yùn)行神經(jīng)網(wǎng)路,最後可在PC GUI上顯示辨識結(jié)果。
針對硬體,選擇能與VL53L5 EVK擴(kuò)充板結(jié)合的STM32F401RC Nucleo開發(fā)板。
輸入感測器
VL53L5CX是先進(jìn)的ToF多區(qū)域測距感測器,可強(qiáng)化ST FlightSense產(chǎn)品系列。
特色
· 快速、準(zhǔn)確的多區(qū)域測距感測器
- 具有4x4或8x8獨(dú)立區(qū)域的多區(qū)域測距輸出
- 具有中斷可程式化??值,可喚醒host的自主低功耗模式
- 最大4公尺的測距
· 具有視角(FoV)的完全整合微型模組
- 發(fā)射器:940 nm不可見光垂直腔面發(fā)射雷射(VCSEL)和整合式類比驅(qū)動器
- 在發(fā)射器和接收器上使用繞射光學(xué)元件(DOE)的63。對角方形FoV
- 尺寸:6.4 x 3.0 x 1.5 mm
· 易於整合
- 單一可回流元件
- 彈性的電源選項(xiàng),單一3.3V或2.8V操作或3.3V或2.8V AVDD與1.8V IOVDD的組合
擷取和標(biāo)記資料集
對於訓(xùn)練人工神經(jīng)網(wǎng)路模型而言,擷取充足、不同手勢的資料相當(dāng)重要。
使用Python開發(fā)的特定GUI,可以用手勢輕松擷取和標(biāo)記來自ToF感測器的原始資料,并建立自己的資料集。
資料集包含每個手勢的數(shù)千個樣本(展示中有8個樣本:向左滑動、向右滑動、點(diǎn)選、點(diǎn)兩下、順時針旋轉(zhuǎn)、逆時針旋轉(zhuǎn)、向上滑動、向下滑動)。
顯然地,可以使用相同工具為新的自定義手勢,并建立不同的資料集。
建立和訓(xùn)練神經(jīng)網(wǎng)路
針對神經(jīng)網(wǎng)路部分,開發(fā)者選擇簡單、彈性、強(qiáng)大的架構(gòu)Keras來建立NN。由於手勢是序列行為,因此選擇CNN + GRU層來建立模型。經(jīng)過大約50個epoch的訓(xùn)練後,訓(xùn)練集和驗(yàn)證集可達(dá)到95%以上的準(zhǔn)確度,而且loss僅約0.08。
針對測試資料集,每個手勢也達(dá)到良好的準(zhǔn)確度。F1 score可達(dá)到96%。
最後可將最隹模型和叁數(shù)另存為gesture.h5,以便在MCU端實(shí)作。
在MCU端實(shí)作手勢模型
事前準(zhǔn)備:需要在STM32CubeMX中安裝X-Cube-AI擴(kuò)充套件。目前的最新版本是7.2.0,其支援scikit-learn機(jī)器學(xué)習(xí)模型。
X-Cube-AI設(shè)定:設(shè)定使用的開發(fā)板後,可以從「Software Packs」->「Select Components」載入X-Cube-AI,也可以使用快速鍵Alt+O。
在「軟體套件元件選擇」視窗中,必須勾選X-Cube-AI/Core Bundle才能上傳NN模型并產(chǎn)生相關(guān)的STM32 NN 函式庫。然後按一下[確定]完成選擇。
啟用X-CUBE-AI元件:點(diǎn)擊 [STMicroelectronics X-CUBE-AI 7.2.0]開啟初始AI設(shè)定視窗,接著勾選 [Artificial Intelligence Core]以開啟X-CUBE-AI核心元件。此外,亦須勾選[Artificial Intelligence Application]才能新增附加AI應(yīng)用。
載入NN
1. 新增網(wǎng)路。
2. 將模型名稱變更為「gesture」。
3. 選取輸入模型類型為「Keras」。
4. 選取「Browse」鍵以選擇要實(shí)作gesture.h5的模型。
5. 點(diǎn)擊「Analyze」分析模型。
分析後,將顯示模型各層的詳細(xì)報告,以及此模型需要使用的MACC、快閃記憶體、RAM資訊。
最後在CubeMX中按下「Generate code」,這會在專案中建立一個X-CUBE-AI資料夾,使用者可以在此資料夾中找到一些實(shí)用檔案。
· gesture.c和gesture.h是模型拓樸檔案。
· gesture_data.c和gesture_data.h是叁數(shù)及bias檔案。
· app_x-cube-ai.c和app_x-cube-ai.h檔案亦提供通用的多網(wǎng)路推斷API,可供AI客戶端應(yīng)用程式使用。
如果需要更新模型叁數(shù)來達(dá)到更好的效能,只需要更新gesture_data.c和gesture_data.h檔案。
顯示結(jié)果
最後,將UART log顯示到電腦,在GUI端顯示我們的預(yù)測結(jié)果。若在ToF感測器前距離20-80公分處做出順時針旋轉(zhuǎn)手勢時,GUI將顯示預(yù)測結(jié)果,如下圖所示。百分比是這個手勢的機(jī)率。
現(xiàn)在,3D手勢展示已完成,而且此解決方案可以在下列幾個應(yīng)用中使用。
· 智慧家電可在使用者手不乾凈或潮濕時,利用手勢辨識控制不同設(shè)備。
· 互動娛樂,例如游戲機(jī)。
· 人機(jī)互動提升機(jī)器智慧化,使人更安全,特別是在COVID-19環(huán)境或一些危險環(huán)境中。