手勢識別是計(jì)算機(jī)科學(xué)和語言技術(shù)領(lǐng)域的一個(gè)研究課題,其目的是通過數(shù)學(xué)算法解析人類手勢。它可以在機(jī)器和人類之間搭建更高效的溝通橋梁,讓生活更豐富多彩、更智能化。人們在基于圖像/視頻的手勢識別方面已經(jīng)做了大量研究(通常使用2D攝像機(jī)),今天我們將討論新的解決方案 - 基于ToF傳感器的3D手勢識別。
在新冠疫情肆虐的當(dāng)前形勢下,人們對“非接觸式”解決方案用戶界面的要求越來越高,同時(shí)保持社交距離正成為“新常態(tài)”;然而在日常生活中,我們?nèi)匀恍枰佑|公共場所中的多個(gè)目標(biāo),特別是使用ATM機(jī)、自動(dòng)售貨機(jī)、工廠機(jī)器等設(shè)備的界面。將意法半導(dǎo)體的新型傳感技術(shù)和強(qiáng)大的人工智能算法結(jié)合之后,我們可以通過3D手勢識別演示實(shí)現(xiàn)此解決方案。讓我們看看演示過程。
演示概述
該演示目前能夠識別8種手勢,包括:向左滑動(dòng)、向右滑動(dòng)、向上滑動(dòng)、向下滑動(dòng)、單擊、雙擊、順時(shí)針旋轉(zhuǎn)和逆時(shí)針旋轉(zhuǎn)。
我們采用意法半導(dǎo)體的最新飛行時(shí)間(ToF)8X8多區(qū)域測距傳感器VL53L5CX作為輸入,然后在STM32上運(yùn)行深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)算法,最后在PC GUI上顯示識別結(jié)果。
在硬件方面,我們組合運(yùn)用STM32F401RC Nucleo板和VL53L5 EVK擴(kuò)展板。
輸入傳感器
VL53L5CX是先進(jìn)的飛行時(shí)間(ToF)多區(qū)域測距傳感器,壯大了意法半導(dǎo)體的FlightSense產(chǎn)品陣容。該產(chǎn)品是意法半導(dǎo)體今年最新發(fā)布一款ToF傳感器。
? 特性:
快速、精確的多區(qū)域測距傳感器
– 多區(qū)域測距輸出可覆蓋4x4或8x8個(gè)單獨(dú)區(qū)域
– 自主低功耗模式,通過可編程中斷閾值喚醒主機(jī)
– 范圍可達(dá)400 cm
完全集成的微型模塊,具有寬視野(FoV)
– 發(fā)射器:940nm不可見光垂直腔面發(fā)射激光器(VCSEL)和集成模擬驅(qū)動(dòng)器
– 在發(fā)射器和接收器上使用衍射光學(xué)元件(DOE)的63 °對角視野FoV
– 大小:6.4 x 3.0 x 1.5 mm
方便集成
– 單回流焊元件
– 靈活的電源選擇,單個(gè)3.3 V或2.8 V操作或3.3 V或2.8 V AVDD與1.8 V IOVDD組合
采集與標(biāo)記數(shù)據(jù)集
獲取足夠數(shù)量的關(guān)于不同手勢的代表性數(shù)據(jù)對于訓(xùn)練人工神經(jīng)網(wǎng)絡(luò)模型是非常重要的。
當(dāng)執(zhí)行一個(gè)手勢動(dòng)作時(shí),我們可以通過使用Python語言開發(fā)的特定GUI輕松從ToF傳感器獲取并標(biāo)記原始數(shù)據(jù),并創(chuàng)建自己的數(shù)據(jù)集。
該數(shù)據(jù)集包含了每種手勢(我們的演示中有8種:向左滑動(dòng)、向右滑動(dòng)、單擊、雙擊、順時(shí)針旋轉(zhuǎn)、逆時(shí)針旋轉(zhuǎn)、向上滑動(dòng)、向下滑動(dòng))的數(shù)千個(gè)樣本,這些手勢由少數(shù)幾人提供。
顯然,如果你希望創(chuàng)建自定義的手勢,也可以使用相同的工具為這個(gè)手勢創(chuàng)建新的數(shù)據(jù)集。
構(gòu)建和訓(xùn)練神經(jīng)網(wǎng)絡(luò)
對于神經(jīng)網(wǎng)絡(luò)部分,我們選擇運(yùn)用簡單、靈活、功能強(qiáng)大的Keras框架構(gòu)建神經(jīng)網(wǎng)絡(luò)。因?yàn)槭謩菔且环N順序動(dòng)作,所以我們選擇CNN + GRU層來創(chuàng)建模型,經(jīng)過大約50個(gè)epoch的訓(xùn)練,我們訓(xùn)練和驗(yàn)證數(shù)據(jù)集的準(zhǔn)確率可達(dá)到95%以上,而損失僅有0.08左右,已經(jīng)很不錯(cuò)了。對于測試數(shù)據(jù)集,我們也可以針對每種手勢獲得不錯(cuò)的準(zhǔn)確率。F1評分可達(dá)96%。
最后,我們可以將訓(xùn)練效果更好的模型和權(quán)重保存為gesture.h5的模型,以便在MCU端實(shí)施。
在MCU端實(shí)施手勢模型
? 先決條件:
需要在STM32CubeMX中安裝X-Cube-AI擴(kuò)展包。目前的最新版本是7.0.0,它也支持sklearn機(jī)器學(xué)習(xí)模型轉(zhuǎn)化。
? X-Cube-AI配置向?qū)В?/span>
配置完使用哪塊板件后,可以從軟件包->選擇組件加載X-Cube-AI,或使用快捷鍵Alt+O。
需在“Software packs component selector”窗口選中X-Cube-AI/Core 這個(gè)選項(xiàng),才能調(diào)用神經(jīng)網(wǎng)絡(luò)模型并生成相關(guān)的STM32 NN庫。單擊[OK],完成選擇。如下圖所示:
? 啟用X-CUBE-AI組件:
單擊[STMicroelectronics X-CUBE-AI 7.0.0] 打開初始AI配置窗口。選中 [Artificial Intelligence X-CUBE-AI] ,啟用X-CUBE-AI內(nèi)核組件。還必須選中[Device Application],才能添加AI插件應(yīng)用程序。
? 加載神經(jīng)網(wǎng)絡(luò)(NN):
1.添加網(wǎng)絡(luò)。
2.將模型名稱改為“gesture”。
3.選擇“Keras”作為輸入模型類型。
4.點(diǎn)擊“Browse”按鈕以選擇要實(shí)現(xiàn)的模型。gesture.h5
5.點(diǎn)擊“Analyze”按鈕以分析模型。
分析完畢后,將顯示模型層詳細(xì)報(bào)告,還附有該模型需要使用的MACC、flash、ram信息。
最后,在CubeMX中點(diǎn)擊“生成代碼”,然后會(huì)在您的項(xiàng)目中創(chuàng)建一個(gè)X-CUBE-AI文件夾,可以在該文件夾中找到一些有用的文件。
包括拓?fù)渚W(wǎng)絡(luò)的gesture.c和gesture.h文件。
包括權(quán)重/偏差的gesture_data.c和gesture_data.h文件。
app_x-cube-ai.c and app_x-cube-ai.h 文件還提供AI客戶端應(yīng)用程序可以使用的通用多網(wǎng)絡(luò)推理API接口。
如果后續(xù)需要更新數(shù)據(jù)集或是重新訓(xùn)練更新權(quán)重以獲得更好的性能效果,只要更新gesture_data.c和gesture_data.h文件就可以。所以,更新過程很方便的。
顯示結(jié)果
最后,將uart日志打印到PC端,從而在GUI端顯示我們的預(yù)測結(jié)果。當(dāng)您在距離自己20~80cm的ToF傳感器前做一個(gè)順時(shí)針旋轉(zhuǎn)的手勢時(shí),GUI將會(huì)顯示預(yù)測結(jié)果,如下所示。百分比是該手勢的概率。
3D手勢演示到這里已經(jīng)結(jié)束,該解決方案可用于以下幾個(gè)應(yīng)用場景。
●智能家電:當(dāng)您的手上臟或濕的時(shí)候,通過手勢識別控制不同的家電。
●交互式娛樂:如游戲機(jī)。
●人機(jī)交互:讓機(jī)器更智能,讓人更安全,特別是在新冠病毒肆虐的環(huán)境或一些危險(xiǎn)環(huán)境中。
現(xiàn)在,您可以嘗試使用VL53L5傳感器、STM32開發(fā)板、以及強(qiáng)大的X-Cube-AI庫創(chuàng)建自己的手勢識別演示。我們正在一些活動(dòng)中展示該演示項(xiàng)目;如果您對我們的手勢演示感興趣,請聯(lián)系意法半導(dǎo)體的AI創(chuàng)新應(yīng)用中心,我們會(huì)選定目標(biāo)客戶根據(jù)產(chǎn)品的特定用例對該演示進(jìn)行產(chǎn)品級支持。