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