01
設計概述?
Design Introduction
1.1 設計背景 隨著信息技術的發(fā)展,人機交互技術逐漸由以鍵盤、鼠標等基于圖形用戶界面的方式,轉變?yōu)橐?a href="http://wenjunhu.com/analog/" target="_blank">模擬和類似人類感知傳輸?shù)男畔㈩愋?。其中,手勢識別因其具有的自然、直接、有效的交互特點,越來越受到研究人員的關注。傳統(tǒng)的手勢識別,需要借助配置有傳感器的手套來確定具體的手勢形態(tài),成本高且操作不便,不具有推廣性。基于機器視覺的手勢識別技術,突破硬件局限,從模式識別算法層面革新人機交互方式,更適應未來人機交互發(fā)展趨勢。機械臂作為現(xiàn)代工業(yè)領域自動化智能加工中最常見的執(zhí)行終端,通過各個關節(jié)的協(xié)調運動與機械末端的配合,可進行多自由度模擬仿真。通過對舵機進行控 制設計,使機械臂能夠完成抓取分揀、連續(xù)動作,從而使其具有比人手更好的動 作組合靈活性和指令完成準確性。
1.2 作品概述
本作品基于機器視覺,聚焦手勢識別,利用攝像頭獲取單目圖像信息,基于 PYNQ 實現(xiàn)手勢分割、手勢建模、手勢形狀特征提取,對八種不同手勢圖像進行識別,以舵機控制的機械臂模塊作為響應終端,借助手勢變化來控制機械臂執(zhí)行兩種功能:一是按指令分揀物體,二是“井字游戲”人機大戰(zhàn)。
1.3? 應用領域
本作品將手勢識別作為人機交互方式,以機械臂作為響應終端,設計了兩種基于上述交互方式和響應終端的展示功能。按指令分揀物體,本質上是對機械臂進行開環(huán)控制,延長人手作用范圍,對于操控大型機械進行物體分揀的工業(yè)自動化領域或物流行業(yè),都有極好的應用前景?!熬钟螒颉比藱C大戰(zhàn),僅僅是將手勢識別結合機械臂控制、簡單的人工智能技術進行組合開發(fā)的例子,“手勢識別 +”的探索永無止境,在娛樂領域、醫(yī)療領域、教育領域、智能家居領域都有著廣泛的應用前景。?
02
系統(tǒng)組成及功能說明
System Construction & Function Description
2.1 系統(tǒng)組成 ?
本系統(tǒng)以 Xilinx ZYNQ SoC 作為主控制芯片,分為處理器模塊、攝像頭模塊、顯示器模塊、舵機驅動模塊、通訊傳輸模塊。通過攝像頭模塊捕捉手勢圖像信息,在處理器模塊中完成手勢分割、手勢建模、手勢形狀特征提取、手勢識別,手勢識別的過程及結果通過顯示器展示,通過處理器內部不同功能的邏輯運算,將對應的動作指令通過相應的 PWM 信號輸出給各個舵機,驅動六自由度機械臂完成要求動作,從而實現(xiàn)對應的組合功能。
2.2 手勢識別核心算法
本作品所采用的是靜態(tài)手勢識別算法,算法核心主要由手勢特征分析、手勢特征建模及手勢識別三部分組成,整體框架如上圖所示。首先通過圖像采集設備來獲取手勢圖像,通過手勢建模將獲取的手勢圖像用數(shù)學模型描述出來,最后根據得到的手勢識別所需要的模型參量判別出具體的手勢形態(tài)。 ?
2.2.1 圖像預處理
圖像預處理,由四個主要步驟組成,分別為定義識別區(qū)域、顏色空間轉換、 膨脹處理、高斯濾波。定義識別區(qū)域,主要用來減小識別區(qū)域面積,從而提高識 別效率。顏色空間轉換,通過將攝像頭捕捉到的 RGB 顏色空間下的圖像信息轉 化為 HSV 顏色空間下的圖像信息,便利后續(xù)對背景和手部進行顏色分割。膨脹 操作,使得識別區(qū)域高亮區(qū)域增長,消除手部內的噪聲點。高斯濾波,通過加權 求和的方式,消除圖像內的高斯噪聲點。
2.2.2? 手勢分析
利用道格拉斯-普克(Douglas-Pucker)算法,將手部輪廓擬合為多邊形曲線, 同時計算面積,以得到輪廓內手部面積最大的手部輪廓。在此基礎上,分別計算 出輪廓總面積(areacnt)、輪廓中手的面積(areahull)、以及手的面積占輪廓總面 積的百分比(arearatio)。與此同時,得到最大輪廓面積中的凸缺陷(即凹陷)數(shù) (defects),并通過計算凸缺陷中起始點、終點、離起始點終點連線最遠處的點構 成的三角形的高(d)和頂角(angle)值,來去除因噪聲而得到的凸缺陷點,得 到消除噪聲點后的凸缺陷數(shù)(l)。 2.2.3 手勢識別 ?
由手勢分析后得到的模型參量通過上述手勢識別流程圖后,輸出“0”“1” “2”“3”“4”“5”“ok”“best of luck”八種手勢識別結果,以便后續(xù)對結果進行使用。
? 2.3 “井字游戲”人機大戰(zhàn)算法設計
2.3.1 游戲規(guī)則及數(shù)字化設置 游戲規(guī)則 游戲對戰(zhàn)的雙方執(zhí)不同棋子,輪流在 3×3 的九宮格中落子,但凡在橫排、 豎排、對角線上出現(xiàn)三子相同的情況,則執(zhí)該子的一方勝。 數(shù)字化設置 現(xiàn)在對九宮格的九個位置編碼為九個二維坐標(x,y)(x=1,2,3;y=1, 2,3),并賦值為 1,效果如下圖所示。
一方執(zhí)“0”,一方執(zhí)“2”,落在哪個坐標位置上,就把那個坐標位置對應的 值改為“0”或“2”。每次落子后,分別對每排、每列、每對角線上的三個值求和(和可取 0,1,2,3,4,5,6),如果出現(xiàn)“0”則執(zhí)“0”的一方勝,如果出 現(xiàn)“6”則執(zhí)“2”的一方勝。 ? 2.3.2 機器端落子優(yōu)先級設計 假設人執(zhí)“0”子,機器執(zhí)“1”子 (1)中間、邊上、角上三種位置的獲勝方式分別為
所以優(yōu)先落中間,其次落角上,最后落邊上。
(2)情況優(yōu)先級
第一優(yōu)先級:如果出現(xiàn)“1”,立即將(0,0,1)中的“1”置 2,攔截人勝利。 第二優(yōu)先級:如果出現(xiàn)“5”,立即將(1,2,2)中的“1”置 2,機器取得游戲勝利。 第三優(yōu)先級:如果出現(xiàn)“4”,且不是“死路”的情況,則將(1,1,2)中任 意一個“1”置 2。 ? 2.3.3 算法流程圖 ?
?
2.4 模塊介紹
2.4.1 處理器模塊 ? ?
本作品采用基于 ZYNQ-7020 芯片的 PYNQ-Z2 開發(fā)板進行系統(tǒng)開發(fā)。ZYNQ 分為 PS(Processing System)和 PL(Programmable Logic)兩部分,在 PS 上運 行 Linux 操作系統(tǒng),在 Linux 操作系統(tǒng)上運行 Python,通過調用 PYNQ 中的庫Overlay,對連接到 PS 端的接口進行解析,進而控制 FPGA 邏輯資源,加速系統(tǒng) 數(shù)據處理。
對于本作品中所設計的基于機器視覺的手勢識別算法和“井字游戲”人機大 戰(zhàn)算法,直接利用硬件語言進行編寫在邏輯上十分復雜,故采用 Python 進行編程實現(xiàn),利用 FPGA 對圖像處理部分進行硬件加速,不僅提高了圖像處理速度, 還更好地擴展了圖像應用。
2.4.2 攝像頭(圖像采集)模塊
本作品的手勢指令輸入由攝像頭采集完成。采用奧尼 C11 款的高清攝像頭對手勢進行畫面捕捉,通過 USB 完成圖像輸入。相比于傳統(tǒng)的傳感器手套對手勢姿態(tài)的采集,攝像頭減輕了硬件端的負擔,使得整個系統(tǒng)可推廣性更好。
2.4.3 機械臂(舵機)模塊 本作品使用的機械臂,是 Learm 公司開發(fā)的一款六自由度機械臂,能通過上 位機對其進行動作設計,通過 PWM 控制舵機運轉,從而完成抓取和連續(xù)復雜動作兩種不同的模式功能。舵機(機械臂)模塊與處理器的模塊采用 UART 串行通信,采用下述通信協(xié)議進行指令交互。
2.4.4 顯示器(圖像輸出)模塊 ?
采用顯示屏作為圖像輸出端,展示手勢識別圖像處理過程及結果,不僅利于 過程中的算法調試與驗證,并且具有更好地視覺效果。 2.5? 功能說明 ? 2.5.1 ?手勢識別 本作品可以對常用的八種手勢進行識別處理,分別為“0”“1”、“2”、“3”、 “4”、“5”、“Best of luck”、“ok”。啟動系統(tǒng)后,在攝像頭端擺出相應手勢,及完 成手勢輸入,顯示器會顯示出對應的識別結果。顯示器畫面,有矩形框定位識別區(qū)域,在該矩形框中會有多邊形框出手部輪廓,右上方會顯示識別結果。當識別區(qū)域沒有放入手進行識別時,顯示器畫面靜止。
2.5.2 ?機械臂驅動 機械臂動作設計及存儲機制
機械臂內部封裝有存儲“動作組”的部件,用來存儲動作指令。用戶如果要 進行動作設計,在機械臂通電的情況下,通過 USB 通信與電腦端上位機進行連接,在上位機中設置傳輸給六個舵機的 PWM 值,形成一個包含這個動作指令的 “動作組”,下載進存儲部件以便后續(xù)調用。
機械臂驅動機制
通過 UART(串口通信)的方式來調用“動作組”,進而驅動機械臂完成相 應動作。這里需要注意的是,必須將處理器模塊與機械臂模塊進行“共地”操作, 否則二者無法完成通信,機械臂不能按指令動作。
2.5.3 功能 1:按指令分揀物體 預設四個不同的區(qū)域,分別編號為“1”“2”“3”“4”,作為一組一維位置坐 標。設計機械臂在四個不同區(qū)域內抓取、放開動作,共八個動作組。手勢輸入“ok”, 告訴系統(tǒng)下一個輸入的是初始坐標。待控制板上亮起指示燈后,通過人眼觀測物 體初始位置坐標,通過手勢輸入該坐標(可輸入“1”、“2”、“3”、“4”)。待控制板上亮起指示燈后,手勢輸入“5”,告訴系統(tǒng)下一個輸入的是初始坐標。待控制板上亮起指示燈后,通過手勢輸入目標位置坐標(可輸入“1”、“2”、“3”、“4”)。用戶端操作結束,發(fā)送指令給機械臂完成分揀全過程。機械臂依次完成抓取、移動、放下,即完成一次按指令分揀。
2.5.4 功能 2:“井字游戲”人機大戰(zhàn) 游戲規(guī)則參看“2.3‘井字游戲’人機大戰(zhàn)算法設計”。手勢輸入“ok”,告訴 系統(tǒng)接下來輸入人落子的坐標區(qū)域(x,y)。待控制板上亮起指示燈后,手勢輸 入“5”,告訴系統(tǒng)接下來輸入橫向坐標(可輸入“1”、“2”、“3”),待控制板上 亮起指示燈后,輸入縱向坐標(可輸入“1”、“2”、“3”)。用戶端操作結束,可 以發(fā)送指令給機械臂完成人落子的操作,機械臂完成在棋盤上的人落子操作后, 繼續(xù)完成機器落子操作。依次進行下去,直至出現(xiàn)有一方勝利。亮紅燈表示“人 贏”,亮綠燈表示“機器贏”,亮白燈表示“平局”。
03
作品成效總結與分析
Summary?and?Analysis?of?the?Effect?of the Works
3.1 系統(tǒng)測試性能指標
3.1.1 手勢識別
本作品算法下的手勢識別功能,在 FPGA 加速下能較好地平衡識別次數(shù)和識 別時間的沖突。根據測試結果,本作品取 60 作為整個作品的手勢識別循環(huán)次數(shù)。
3.1.2 機械臂驅動 機械臂能通過用戶端“動作組”的設計,進行抓取、移動等連續(xù)復雜動作, 具有很好的靈活性。作為機電設計的響應終端,能很好地完成多種功能的指令要求。
3.1.3 ?按指令分揀物體 ?
“按指令分揀物體”能很好地完成初始坐標輸入、目標位置輸入,同時能在 較短的時間內快速完成抓取與投遞。 ? 3.1.4 “井字游戲”人機大戰(zhàn) ?
“井字游戲”算法能很好地遍歷所有可能結果,所以人和機器對戰(zhàn)只會出現(xiàn) “平局”、“機器贏”兩種結果。并且,較為穩(wěn)定、準確的機器識別以及人工智能 算法,能夠使整個游戲流暢進行?!笆謩葑R別”結合“機械臂”具有很強的視覺觀賞性,與此同時,游戲的模式使整個功能更具有趣味性。 ? 3.2? 成效得失對比分析
本作品整體而言,不僅將手勢識別功能實現(xiàn),還在此基礎上結合機械臂運動特點進行了多功能開發(fā),總體完成度較高,視覺效果較好,兼具靈活性、趣味性及可拓展性。開發(fā)本作品采用的手勢識別算法,為了得到較高的識別精度,必須要以延長識別時間、增加單次識別次數(shù)作為犧牲,使得在應用開發(fā)時增加較多的時間負擔,不能夠凸顯人機交互的便利性。從手勢識別算法及對識別結果的處理技術層面出發(fā),整個作品還有較大提升空間。
3.3? 創(chuàng)新特色總結展望 本作品使用最新的基于機器視覺的手勢識別技術作為人機交互方式,革新人 機交互的使用體驗,具有極佳的技術前瞻性。使用機械臂作為執(zhí)行終端,貼近目前工業(yè)設計的最新潮流。在設計功能時,基于數(shù)學建模,設計出更具有人機互動性質的小游戲,體現(xiàn)人工智能的靈活與智慧。 機電一體化開發(fā),充分發(fā)揮基于 Python 編程的代碼靈活的特點,以實現(xiàn)復 雜算法,利用 FPGA 硬件加速的優(yōu)勢,提高視覺處理速度。 在本作品的基礎上,優(yōu)化識別算法,加快識別速度,提高識別精度,“手勢 識別+”將在未來發(fā)揮出自身更強的優(yōu)勢,在教育領域、娛樂領域、工業(yè)領域、 醫(yī)療領域、智能家居領域都具有越來越廣闊的應用前景。 ?
審核編輯:黃飛
?
評論
查看更多