基於視覺的動態手勢軌跡跟蹤

這個是我的綜合實踐與設計的課題,作爲畢設的一部分,因爲時間比較緊,做的很簡單。主要實現了在簡單背景下,利用筆記本攝像頭實時採集視頻,根據膚色檢測識別手部區域並跟蹤手部運動軌跡。

項目的GitHub地址:(採用C++,基於opencv)
https://github.com/1092366225/HandGestureRecognition
代碼百度網盤鏈接:
鏈接:https://pan.baidu.com/s/1Wh9qRPjjqY4pL5HrFfdwzg
提取碼:zd2w

效果如下:(畫五角星)
在這裏插入圖片描述

1.背景介紹

手勢分爲靜態手勢和動態手勢,靜態是指一個固定的手的形姿態,比如擺出“V”的pose,動態是指手部的位置或形態變化的含義,比如畫個圈。

手勢識別技術在人機交互領域有很大的作用和應用前景。目前已經發展地比較久了,有着很多的實現方案,但是仍然存在魯棒性不強,識別率不高或者是無法滿足實時性的問題。

手勢識別主要有基於計算機視覺、基於超聲波和基於慣性傳感器三種實現方式。我採用的是基於視覺的,通過處理真實的視頻圖像來識別手勢,分爲手勢分割、軌跡跟蹤和分類識別三個過程,這裏只實現了前兩步。

2.主要流程與算法

流程圖:
在這裏插入圖片描述

(1)手勢分割

利用人的膚色在YCrCb顏色空間的聚類性質,根據顏色來區分圖像中的手部和背景。先把圖像轉換到YCrCb顏色空間,然後採用otsu自適應閾值來對Cr通道進行劃分。當然也可以根據經驗值或者訓練值直接給出閾值,不過效果較差。

處理後的二值圖像如下:
在這裏插入圖片描述
這時候會發現有很多幹擾區域,所以先對圖像進行形態學處理,先膨脹後腐蝕,消除小的封閉空間。結果如下:
在這裏插入圖片描述
然後利用opencv中的相關算法來找出圖中的各個連通域的外接矩形,同時把面積較小的先排除。

之後圖像中最大的連通域有兩塊:手部和臉部。採用模板匹配的方法來排除臉部的干擾(也可以用其他方法,比如手指個數,膚色比例等),模板是用ps做的
在這裏插入圖片描述
這樣就可以劃分出手部區域:(圖中的紅色小矩形表示模板匹配最佳點的結果,綠色矩形爲手部區域的外接最大矩形)
在這裏插入圖片描述

(2)軌跡跟蹤

跟蹤手的運動軌跡可以採用圖像跟蹤算法,經典的有光流法、camshift等,或者目前比較主流的KCF、深度學習等。我原本想採用camshift,但是沒能成功,就直接利用每幀圖像中檢測到的手部位置來跟蹤軌跡。

用手部外接矩形的左上角座標來表示手的位置。然後等間隔採樣得到座標點序列,再根據每個座標與座標序列中心點的角度對其進行離散化,提取特徵向量用於後期的分類識別。

例如8連通鏈碼得到的特徵向量爲0-7的整數序列
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章