基于卷積神經(jīng)網(wǎng)絡(luò)實時識別手勢動作
訪問【W(wǎng)RITE-BUG數(shù)字空間】_[內(nèi)附完整源碼和文檔]
使用方法 先用Train.py訓(xùn)練好模型參數(shù),然后運行CallFrame.py調(diào)用出界面窗口, 點擊窗口的相應(yīng)按鈕就可以在線檢測手勢動作,其中的執(zhí)行手勢按鈕是和下位機(jī)通信(如STM32單片機(jī)), 通過串口函數(shù)將識別結(jié)果傳給下位機(jī),實現(xiàn)根據(jù)手勢動作控制的功能。
利用卷積神經(jīng)網(wǎng)絡(luò)實時識別手勢動作
一共識別 5 種手勢動作
剪刀動作
2.石頭動作
3.布動作
4.OK 動作
5.good 動作
主要思路:
1.構(gòu)建數(shù)據(jù)集 2.建立神經(jīng)網(wǎng)絡(luò) 3.訓(xùn)練并調(diào)參 4.保存并調(diào)用
另外我還加了界面設(shè)計和機(jī)械臂控制(通過串口通信把判斷結(jié)果發(fā)給單片機(jī),所以代碼中有 serial 模塊)
訓(xùn)練集: 1~4 號動作各有 1300 張照片,5 號動作有 1450 張照片 測試集: 1~5 號動作各有 200 張照片
文件解釋:
data 文件里面存放 test 數(shù)據(jù)集,train 數(shù)據(jù)集,實時保存的圖像(用于在線檢測)。
ges_ico 文件里面存放界面窗口顯示的各種圖標(biāo)。
log 文件里面存放訓(xùn)練好的 CNN 網(wǎng)絡(luò)的模型參數(shù)。
CallFrame.py 是界面窗口的邏輯文件,用來調(diào)用界面文件并編寫信號與槽函數(shù)。
Frame.py 是界面窗口的界面文件,通過 PyQt5 的 designer 工具生成。
GetTestImage.py 是利用 OpenCV 獲取圖片并標(biāo)記,用來制作測試集。
GetTrainImage.py 是利用 OpenCV 獲取圖片并標(biāo)記,用來制作訓(xùn)練集。
SaveGesture.py 是利用 OpenCV 實時獲取圖片,并進(jìn)行預(yù)處理,用于在線檢測手勢。
TestGesture.py 是將實時獲取的圖片送入已訓(xùn)練好的 CNN 中判斷其手勢動作。
TestInTest.py 是將測試集送入已訓(xùn)練好的 CNN 中判斷該網(wǎng)絡(luò)模型的準(zhǔn)確率。
Train.py 是訓(xùn)練 CNN 模型函數(shù),并將訓(xùn)練好的模型參數(shù)保存在本地。
Train_inputdata.py 是用來讀取數(shù)據(jù)集的圖像和標(biāo)簽,并打包成 batch 形式。
Train_model.py 是模型結(jié)構(gòu),這里用的是 AlexNet 結(jié)構(gòu)。
使用方法:
先用 Train.py 訓(xùn)練好模型參數(shù),然后運行 CallFrame.py 調(diào)用出界面窗口, 點擊窗口的相應(yīng)按鈕就可以在線檢測手勢動作,其中的執(zhí)行手勢按鈕是和下位機(jī)通信(如 STM32),通過串口函數(shù)將識別結(jié)果傳給下位機(jī),實現(xiàn)根據(jù)手勢動作控制的功能。
測試結(jié)果:
使用該模型訓(xùn)練到 900 步的時候在測試集上正確率可以穩(wěn)定在 95% 左右。
(訓(xùn)練集:1,2,3,4 號動作各有 1300 張照片,5 號動作有 1450 張照片;測試集:每種動作各有 200 張照片)



