欲使用物件偵測方法於手勢辨識,首先需要有大量已標記之手勢資料,用以訓練辨識模型。然而,手動標記影像資料相當耗時費力,因此參考了[手勢自動標記及分類工具](https://chtseng.wordpress.com/2019/09/20/%E6%89%8B%E5%8B%A2%E8%87%AA%E5%8B%95%E6%A8%99%E8%A8%98%E5%8F%8A%E5%88%86%E9%A1%9E%E5%B7%A5%E5%85%B7/)作者的方法,實作自動標記工具。 ## 1. 手部偵測模型 首先,基於YOLOv7在手部公開資料集[EgoHands](http://vision.soic.indiana.edu/projects/egohands/)進行了手部偵測模型的訓練。該模型僅會偵測一種類別:手(hand)。 手部偵測結果如[影片](https://www.youtube.com/watch?v=bfMqAVhF2_0)所示: {%youtube bfMqAVhF2_0 %} 只訓練了100個epoch,最後的模型訓練結果mAP@.5為0.9808,mAP@.5:.95為0.792。看測試結果影片,發現偶爾還是會偵測到非手之物件。 ![](https://hackmd.io/_uploads/S1MtGsaY3.png) ## 2. 將手部偵測結果轉為手勢標記 接著,將原程式(`detect.py`)修改為**可即時儲存所接收之影像及其標記檔(類別與物件框)**,並且使用`label-cls`設定類別來更改標記檔中所紀錄的類別。 ``` python auto_label.py --weights .\runs\train\exp21\weights\best.pt --source 0 --save-txt --label-cls 1 ``` 下圖檔案依序為攝影機即時接收之每幀影像、辨識之標記檔、即時偵測之結果: ![](https://hackmd.io/_uploads/SJGIC9ptn.png) ![](https://hackmd.io/_uploads/S1B0ejTt3.png) ![](https://hackmd.io/_uploads/B1-2gspY2.png) 這邊用於手勢辨識之專案,label-cls有五個,參考[人體手勢與機器任務對應及應用流程](https://hackmd.io/IMf_uZVGRJ2fLRiXHGhGXg)中的手勢。重複多次後,即可蒐集所有不同類別之手勢的影像與標記檔。 ## 3. 檢查標記檔 因該自動標記工具相當仰賴Step1的手部辨識模型及其訓練資料品質,顯然還會有標記到非手物件的情形發生,因此會再另外人工檢查標記框。首先需要將目前的txt標記檔轉為ImgLabel工具可用的xml檔,再開啟檔案檢查。 雖然還是需要耗費人力檢查,但相較於蒐集影片資料後再進行每幀影像之手動標記,速度快很多也得以蒐集更多資料。 ## Reference [手勢自動標記及分類工具](https://chtseng.wordpress.com/2019/09/20/%E6%89%8B%E5%8B%A2%E8%87%AA%E5%8B%95%E6%A8%99%E8%A8%98%E5%8F%8A%E5%88%86%E9%A1%9E%E5%B7%A5%E5%85%B7/)