290 likes | 473 Views
南台科技大學 電子工程研究所 使用 Android 手機 實現 手勢辨識 指導 教授 : 薛雲太 研究生 : 許育豪. 班級 : 碩研資管二甲 學號 : MA290110 姓名 : 陳靜宜. 目錄. 緒論 文獻探討 系統架構 實 作 結論. 緒論. 研究動機: 智慧型產品大多使用「體驗筆」或「觸控」方式。 手勢 辨識可以應用於「瘖啞人士」。 臉部辨識、車牌辨識以及監視器紀錄人數之使用。 研究目的 : 打破限制將手勢辨識帶出門。. 文獻探討 2.1 影像構成. 影像: 長*寬 = 像素。 像素: R 、 G 、 B 三種顏色構成。
E N D
南台科技大學 電子工程研究所使用Android手機實現手勢辨識指導教授:薛雲太研究生:許育豪 班級:碩研資管二甲 學號:MA290110 姓名:陳靜宜
目錄 • 緒論 • 文獻探討 • 系統架構 • 實作 • 結論
緒論 研究動機: • 智慧型產品大多使用「體驗筆」或「觸控」方式。 • 手勢辨識可以應用於「瘖啞人士」。 • 臉部辨識、車牌辨識以及監視器紀錄人數之使用。 研究目的: • 打破限制將手勢辨識帶出門。
文獻探討2.1影像構成 • 影像:長*寬=像素。 • 像素:R、G、B三種顏色構成。 • 色相(H):基本屬性,顏色名稱。 飽和度(S):色彩的純度,越高顏色越濃烈,越低越黯淡。 明度(V):反光之強度,取0-100%。
2.2灰階影像 • 影像由Camera所拍攝之彩色影像轉為灰階影像,以便做邊緣偵測。 • 顏色比例:由人眼對綠色的亮度感最大,而對藍色最小。 • 舉例:像素(27,129,67),套用公式轉換為91.434,電腦判 定色階91。
2.3邊緣偵測2.3.1邊緣偵測簡介 • 目的:尋找物體輪廓及辨識影像中變化明顯的點。 • 方格與方格之間變化較大,容易用邊緣偵測找到邊緣。 • 深度上不連續。 • 表面方向不連續。 • 物質屬性變化。 • 物體光線變化。 邊界: • 影像灰階落差較大的地方。 • 主要辨別物體粗估形狀或結果。
2.3.2 梯形 • 梯度的計算:假設一個二維影像的灰階值函數,那麼灰階變化梯度為斜率變化的向量。 • 計算梯度方法:對於不連續的數位影像有三種方法。 水平方向 垂直方向 第一種方法 對影像進行迴旋積而得到近似結果
第二種方法 所得到 第三種方法 可以讓計算所得之梯形剛好是f(x,y)
2.3.3邊緣偵測種類介紹 梯形運算方式:Sobel、Prewitt、Robert、Laplacian及LoG。 • Robert:設計簡單,容易受雜訊干擾。 • Laplacian:常常出現雙邊緣。 • Prewitt:可偵測八個方向的梯形值。 • Sobel:與Prewitt相似,常用運算方法。 理想邊緣偵測: • 好的檢測:演算法能盡量得多標示出實際正確邊緣。 • 好的定位:演算法所認定出來的邊界與實際物體邊界越近越好。 • 最小影響:想像中的邊界只會標記一次。
2.3.4Canny邊緣偵測 • 傳統的邊緣偵測只能滿足檢測和好定位。 • 以較大的值去除偵測到的雜訊。 • 以較小的值去偵測變化較不明顯的邊緣達到去除雜訊,又把較不明顯的邊緣忽略掉達到最佳的結果。
2.4特徵提取 • 特徵點分為不同的「集」。 • 相同特徵的點為一個集。 • 其他相似之特徵的數點再歸類為一個「集」。 • 邊緣:影像之輪廓,區別物體與背景的像素。 • 角:先偵測邊緣,再開始分析邊緣的方向尋找變化極大的地方。 • 脊:長條形之物體都稱為脊。 • 區域:區域檢測可以代替角檢測器檢測那些對於角檢測太過平滑的區域。
2.5Fast特徵偵測 • Fast特偵提取:速度最快的檢測方法,只利用周圍的像素比較訊息就可得特徵點。 • 中心點與周圍選中的點灰度值差別大的時候,則認為該點為一個特徵點。
2.6特徵描述與比對 • 特徵描述: 分辦所有的特徵點為什麼為「集」。 特徵點讓程式判斷,而要可以讓程式判斷就要先對特徵點做描述。 • 特徵比對: 不同的角度或光源下得到的兩張影像,把這兩張影像的特徵點互相對應到一樣的特徵點。 • 檢測器:決定哪個點是特徵點,較不會產生錯誤的比對地方,找出特徵點在哪。 • 描述:特徵描述後,才能對兩個以上的點做特徵點比對。 • 角偵測:一個角定義兩個邊緣的交叉點。
2.7 OpenCV • 跨平台的機器視覺函式庫。 • 可使用在學術領域及商業且免費。 • 主要以C++語言所撰寫。 • 支援C#、CH、Ruby。 • 運用: • 人機互動 • 物體識別 • 影像分割 • 人臉辨識 • 動作辨別 • 運動跟蹤 • 機器人
2.8Android智慧型手機 • 免費且開放原始碼之作業系統。 • 分為「應用層、應用框架層和函式庫層」。
2.9人機介面 • 人們與電腦或3C產品的溝通。 • 大部分運用於工業及商業,略分「輸入」和「輸出」。 • 互動:至少包含兩點,「使用者」和「系統」。 • Norman互動模式: • 訂立目標 • 組成意圖 • 標明行動順序 • 執行 • 觀察系統 • 詮釋系統狀態 • 評估
系統架構 特徵辨識 手指辨識
2.邊緣偵測架構流程 1.開啟Camera架構流程 OpenCV內Canny函式庫
3.特徵提取之架構流程 4.特徵描述之架構流程 特徵提取的影像 手勢特徵 標準手勢特徵
5.特徵比對 6.最大輪廓之流程與架構 函式庫
7.尋找手掌中心點及角度 6.尋找指尖架構與流程 JavaCV裡的cvMoment(),使用Moment尋找出中心點再找出手指出現之合理角度。 計算面積 計算中心點 計算中心點
四、實作 1.尋找手掌中心點及角度 • 不儲存則將Camera偵測到的影像回傳當成拍照的preview。 2.邊緣偵測 • 透過cvCanny處裡影像為灰階再將影像轉為RGBA格式完成邊緣偵測。
3.特徵提取 • 本文以Fast,速度較快、可靠度也較高加上在手機上運行速度的要求比較高。 4.特徵描述與比對 • 拍攝一張影像來跟標準手勢做比對。
5.尋找最大輪廓 • 程式判斷白點為手掌而找出手掌的所在位置,之後將手掌之邊緣白點回傳即可找到手掌輪廓。 6.尋找中心點 • JavaCV裡的Moment()。 • 參數為:m00,m10,m01,m11,m20,02所有白點總和。 • M10:白點x座標總和。 • M01:白點y座標總和。 • x座標中心點: (m10/m00)。 • y座標中心點: (m01/m00)。
7.尋找指尖 • 判斷指尖與凹陷的地方則用任兩點連接起來。 • 連線中心點不在手掌內判斷為凹陷。 • 反之則判斷指尖。 8.命名手指 • 幫手指標上相對應的名字使用labelTumbIndex()。 • 參數:指尖(fingerTip)和事先命名(nameFingers),將自動對應。 • 食指和拇指另寫一副程式getNewt()。
9.劃出手指名稱 實現辦別手指與標上對應之手指名稱 手勢二(勝利)之手勢辨識失敗 手勢五之手勢辨識失敗圖 手勢一之手勢辨識成功 手勢二(勝利)之手勢辨識成功 手勢一之手勢辨識失敗
五、結論 • 手機上實現手勢辨識。 未來展望: • 瘖啞人士能使用手勢辨識啟動電器用品。 • 製作手機上手勢辨識遊戲。