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