完整代碼見我的GitHub地址:https://github.com/xingjianzhang1997/gesture-recognition
主要思路:1.構建數據集 2.建立神經網絡 3.訓練並調參
另外我還加了界面設計和機械臂控制(通過串口通信把判斷結果發給單片機)
效果演示:
project清單:
一共識別5種手勢動作 1. 剪刀動作 2.石頭動作 3.布動作 4.OK動作 5.good動作
訓練集: 1~4號動作各有1300張照片,5號動作有1450張照片 測試集: 1~5號動作各有200張照片
文件解釋:
1.data文件裏面存放test數據集,train數據集,實時保存的圖像(用於在線檢測)。
2.ges_ico文件裏面存放界面窗口顯示的各種圖標。
3.log文件裏面存放訓練好的CNN網絡的模型參數。
4.CallFrame.py是界面窗口的邏輯文件,用來調用界面文件並編寫信號與槽函數。
5.Frame.py是界面窗口的界面文件,通過PyQt5的designer工具生成。
6.GetTestImage.py是利用OpenCV獲取圖片並標記,用來製作測試集。
7.GetTrainImage.py是利用OpenCV獲取圖片並標記,用來製作訓練集。
8.SaveGesture.py是利用OpenCV實時獲取圖片,並進行預處理,用於在線檢測手勢。
9.TestGesture.py是將實時獲取的圖片送入已訓練好的CNN中判斷其手勢動作。
10.TestInTest.py是將測試集送入已訓練好的CNN中判斷該網絡模型的準確率。
11.Train.py是訓練CNN模型函數,並將訓練好的模型參數保存在本地。
12.Train_inputdata.py是用來讀取數據集的圖像和標籤,並打包成batch形式。
13.Train_model.py是模型結構,這裏用的是Alexnet結構。
使用方法: 先用Train.py訓練好模型參數,然後運行CallFrame.py調用出界面窗口, 點擊窗口的相應按鈕就可以在線檢測手勢動作,其中的執行手勢按鈕是和下位機通信(如STM32),通過串口函數將識別結果傳給下位機,實現根據手勢動作控制的功能。
測試結果: 使用該模型訓練到900步的時候在測試集上正確率可以穩定在95%左右。