999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于手勢識別的3D人機交互系統

2024-01-18 16:24:47陳敬宇徐金羅容張樂樂姜哲
現代信息科技 2023年22期

陳敬宇 徐金 羅容 張樂樂 姜哲

收稿日期:2023-04-04

DOI:10.19850/j.cnki.2096-4706.2023.22.019

摘? 要:隨著計算機視覺技術的發展,人與計算機的信息交互也是必不可少的一部分。因新冠病毒的傳播,“隔空”操作的方式得到多元化發展。該系統通過單目攝像頭捕捉手部位置信息,基于MediaPipe框架構建手部模型并完成手勢識別功能,達到“隔空”操控鼠標的效果,此外為展示更真實,該系統基于Unity軟件實現實時的手部3D效果展示。該系統手勢識別效率較高,達到了良好的性能及視覺效果。

關鍵詞:MediaPipe;虛擬鼠標;Unity3D;手勢識別

中圖分類號:TP391.4;TP311? 文獻標識碼:A? 文章編號:2096-4706(2023)22-0088-04

3D Human-computer Interaction System Based on Gesture Recognition

CHEN Jingyu, XU Jin, LUO Rong, ZHANG Lele, JIANG Zhe

(College of Computer and Information Engineering,Xinjiang Agriculture University, Urumqi? 830052, China)

Abstract: With the development of computer vision technology, the information interaction between human and computer is also an indispensable part. Due to the spread of COVID-19 virus, the “empty space” operation has been diversified. The system captures the hand position information through a monocular camera, uses the MediaPipe framework to build the hand model and complete the gesture recognition function, so as to achieve the effect of controlling the mouse from “empty space”. In order to display more realistically, the system realizes real-time hand 3D effect display based on Unity software. The system has high efficiency of gesture recognition and achieves good performance and visual effect.

Keywords: MediaPipe; virtual mouse; Unity3D; gesture recognition

0? 引? 言

隨著計算機視覺技術的迅速發展,人機交互的方式越來越豐富,其應用也更深入生活。傳統的人機交互一般是基于顯示器、鼠標和鍵盤的交互方式,人通過鼠標、鍵盤或其他輸入設備對機器發送指令信息,機器再嚴格按照指令行動,通過顯示器向人傳遞反饋信息。然而傳統的人機交互方式已不能滿足需求,人們追求更便捷、更簡單、更貼合現實生活的交互方式[1]。因新冠 病毒傳播,基于人工智能的“無接觸式”的人機交互方式興起,更是促進了手勢識別的發展。手勢作為一種符人們日常操作習慣的非接觸式信息交流和交互方式,與傳統的基于鼠標、鍵盤與觸摸屏等接觸式交互方式相比,不易造成設備污染,同時可進行遠距離交互。手勢識別也被認定為最自然最高效的交互方式[2]。

本文實現了基于手勢識別的3D人機交互系統,采用單目攝像頭實時讀取當前手部狀態信息并不斷跟蹤手部位置,通過分析手部位置變化信息來模擬鼠標的移動,達到了“隔空控制”鼠標,并使用三維結構視覺實時顯示手部變化的效果,捕獲桌面實時動畫并與3D手勢結合展示。

1? 技術介紹

1.1? MediaPipe

MediaPipe是一款由Google開發并開源的數據流處理機器學習應用開發框架[3],主要用于處理構建使用了多種形式的數據源(如視頻、音頻和各種其他傳感器數據和時間序列數據)[4]。MediaPipe手勢識別采用由多個模型組成的ML(機器學習)管道。其主要獲取手部位置,截取整個手掌的信息,返回進行下一步手部特征點的檢測,對于獲取的手掌完整信息,再一次細分獲取每個特征點的3D地標,通過獲取得到的21個手部特征點的3D地標。

1.2? Unity 3D

本系統需要通過攝像頭將獲取的手部位置信息以3D的形式展示到顯示器,Unity作為實時3D互動內容創作和運營平臺[5],其提供了豐富且強大的各類功能,幾乎市面上所有的主流游戲平臺Unity都支持,因此,選用Unity作為此次手部識別3D展示軟件。

2? 系統設計

2.1? 系統框架設計

通過OpenCV完成圖像及視頻數據的讀取,將幀數據傳入給MediaPipe,構建手部模型,標出手部21個3D地標顯示在圖像上。在圖像顯示框中單獨規劃出虛擬鼠標操作區域,其范圍大小與電腦顯示桌面成映射關系,因此可完成“隔空控制”效果,同時將手部位置信息和系統桌面的實時畫面數據傳輸到Unity軟件中,構建3D模型。圖1為功能原理圖。

2.2? 虛擬鼠標工作原理

鼠標是否移動判定方法如下:設定僅有食指伸出,其余手指握拳,則判定鼠標移動;設定當食指和中指同時伸出,其余手指握拳且兩指指尖距離大于70像素,則判定鼠標不移動,兩指指尖距離小于70像素,則判定鼠標左鍵點擊一下;當食指中指和無名指三指同時伸出,其余手指握拳,則判定鼠標右鍵點擊一下。

3? 功能實現

3.1? 構建手部模型

本系統核心部分是獲取21個手部特征點坐標,OpenCV庫將捕捉到的每一幀的圖像進行處理后獲取手部位置坐標,并對坐標進行處理。該模塊創建handDetector類,用于實現圖像處理方法,該類中包含了以下四個核心方法。下面將詳細介紹每個方法。

findHands()方法:該方法用于返回手部位置信息。通過OpenCV將幀圖像從BGR格式轉成RGB格式,將數據輸入MediaPipe框架內置方法獲取手部21個地標;然后通過畫線連接該21個地標,顯示手部“特征”形狀;最后返回當前幀圖像,顯示手部位置。

findPosition()方法:該方法繪制手部位置。在findHand()方法中取得的手部位置信息,分別放入x、y、z列表中,此特征點的坐標是以圖像左上角為原點的坐標系所獲取的,因此需要獲取當前圖像的長寬。根據OpenCV圖像的大小返回相對應的21個特征點的坐標,根據特征序列號,將特征點坐標及序列號有序放在列表中。方便用戶觀察手部位置,通過獲取的手部位置信息,提取21個橫縱坐標中的最大、小值,基于此數據繪制綠色顯示框,環繞在手部周圍,并返回相關列表信息。

fingersUp()方法:該方法判定手指是否伸出。MediaPipe框架提供的21特征點結構圖中4、8、12、16、20五個點位為五個手指的指尖。針對本系統,需要通過觀察手指的運動來判斷是點擊還是移動鼠標,因此作為手指代表的指尖,需要對其進行坐標數據分析。對于大拇指,其自然伸出方向并不平行于y軸,因此對其伸出或握拳的判定為與大拇指尖下方的3號特征點進行x軸坐標大小的比較。對于右手而言,自然條件下在圖像上,大拇指尖橫坐標比3號特征點的橫坐標要小,此時判定其自然伸出,當其橫坐標大于3號特征點,判定其握拳;對于其余四指,大都平行于y軸,因此當其指尖縱坐標小于指尖下方特征點的縱坐標時,判定其為握拳狀態,相反,判定為伸出狀態。創建列表fingers[],添加五個手指的當前狀態,用1表示伸出,0表示握拳,fingersUp()方法返回fingers列表。

findDistance()方法:該方法通過傳入兩特征點相對坐標,計算兩點之間的距離和中間點坐標。放大兩特征點的實心小球,在兩點的中點繪制紅色的小球,三點通過紅線相連。此方法用于鼠標點擊功能,由虛擬鼠標工作原理可知,僅食指伸出時,虛擬鼠標處于移動狀態;當食指和中指共同伸出,代表鎖定狀態。當兩點指尖距離小于或大于某一值時,兩點中點繪制的小球顏色發生變化,用來顯示虛擬鼠標點擊效果。

3.2? 虛擬鼠標功能

虛擬鼠標是一個持續性的實時過程,因此所有的操作都需要在循環中完成,通過OpenCV庫VideoCapture()方法打開攝像頭獲取實時狀態,并調用handDetector類的findHands()方法獲取當前手部狀態信息,在圖像上連出21個特征點的線圖。繼續調用findPosition()方法獲取21個手部特征點地標列表,將繪制手部位置顯示框且框選出當前手部的位置。

3.2.1? 鼠標移動

根據已有的特征點位置信息進行判斷,為了避免浪費系統資源,需要先對findPosition()方法返回的信息列表進行判斷,當存在特征點時,才啟動虛擬鼠標功能。當檢測到有手部的8號特征點(食指指尖),且僅有手部的8號特征點伸出時,8號特征點的紅色實心小球會被放大,此時桌面的鼠標會隨著手部的食指在操作區域的移動而移動。控制虛擬鼠標的前提即是檢測到手部信息。但在系統設計的過程中發現,當使用者想要控制鼠標到桌面最下方時,此時系統會因檢測不到手部信息而無法控制虛擬鼠標,僅食指存在的情況下,無法獲取完整的手部位置信息。因此繪制一個寬度小于OpenCV圖像的紅色操作框顯示在圖像中,當作虛擬鼠標的操作區域,即使手部位置超出矩形框也不會影響虛擬鼠標的移動。此外,因為攝像頭為鏡面效果,且此效果只針對x軸坐標,因此對獲取得到的x軸坐標,需進行取反操作,獲取當前攝像框的長寬,用攝像框的寬減去當前的x軸坐標,則可達到一個取反的效果。

3.2.2? 鼠標點擊

實現虛擬鼠標的點擊,與虛擬鼠標的移動同理,當僅有食指與中指伸出的情況下,暫停虛擬鼠標的移動,當兩指尖的距離小于70像素時,鼠標左鍵點擊,兩指尖之間繪制的圓填充綠色。指尖距離大于70像素時,顯示為藍色。食指中指和無名指同時伸出時,代表鼠標右鍵點擊。關鍵代碼如下:

if left == 0:

if length < 70:

cv2.circle(img, (lineInfo[4], lineInfo[5]),15, (0, 255, 0), cv2.FILLED)

autopy.mouse.click()

left = 1;

if fingers[1] == fingers[2] == fingers[3] == 1 and fingers[0] == 0 and fingers[4] == 0:

length,img,lineInfo = detector.findDistance

(8,12,img)

if right == 0:

autopy.mouse.click(autopy.mouse.Button.RIGHT)

right = 1

3.3? MediaPipe與Untiy通信

當啟動系統時,同樣為避免浪費系統資源,通過findHands()方法判斷當前是否捕捉到手部信息,當有手部位置信息時,獲取包含手部位置坐標信息的列表。在Unity軟件中,其3D建模的坐標系中y軸方向與攝像框中y軸方向相反,因此對于所有特征點的y軸坐標均做取反處理,即獲取攝像框長寬,用長減去y軸縱坐標即可,將取反后的y軸坐標與x、z軸坐標重新添加至數據列表中。通過調用socket方法完成手部特征點坐標信息的傳輸。

3.4? Unity 3D建模

在Unity中,采用的是3D模型,因此其需要x、y、z三維坐標來完成建模。首先建立模型,一共有21個特征點,需要21個cube物體充當特征節點,節點之間同樣需要21個line來連接,因此對于每個line需要添加位置腳本LineCode,在其中初始化lineRender即線渲染器,聲明線起始位置與終止位置的寬度,以及定義初始位置和終止位置,此處每個line需要填寫0-20特征點。先前設置的21個cube和line都需要在一個父物體下,因為二者是一個相對關系,需要在一個父物體下才能隨著傳入的坐標數據顯示完整的手部模型,并且cube與line的數據是相通的。

通過調用UDPReceive腳本,添加到整個手部模型上。在此腳本中定義與服務器端口相同的端口號,開啟一個新線程用來不斷接收傳入的坐標數據,將接收到的數據添加至字節數組dataByte中,再對其進行轉譯處理,將字節數組轉成UTF-8編碼的字符串至data中。

手部模型上再次添加HandTracking腳本,用來更新21個坐標的位置信息,通過調用UDPReceive腳本,獲取data字符串,并對其數據進行分組處理,將數據從字符串型轉換成float類型。最后設置相對父節點的物體位置,不斷更新位置信息,完成3D手部模型的建立。

關鍵代碼如下:

client = new UdpClient(port);

IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, 0);

byte[] dataByte = client.Receive(ref anyIP);

data = Encoding.UTF8.GetString(dataByte);

3.5? Unity虛擬桌面

本系統中使用windows提供的Desktop Duplication API接口捕獲windows系統當前的桌面到unity的平面中進行顯示,搭建一個實時的虛擬桌面。因Desktop Duplication API是通過Microsoft DirectX Graphics Infrastructure(DXGI)來提供桌面圖像,因此需要獲取到IDXGI Output Duplication接口,也是最重要的一部分。調用接口中使用到了D3D11和DXGI兩個庫文件,先獲取D3D和DXGI設備并初始化。獲取適配器和適配器列表。獲取桌面圖像需調用AcquireNextFrame獲取當前桌面數據。因數據格式問題,并不能直接讀取IDGIResource格式的圖像,需要將圖像數據轉換成DX紋理形式后可在unity的平面中顯示。

4? 系統實現

在系統運行時,會顯示兩個界面,分別是手部識別界面和3D顯示界面,如圖2所示。在手部識別界面,識別手部信息,來完成虛擬鼠標的控制,實現鼠標移動、點擊等功能;在3D顯示界面中,包含桌面實時顯示和手部模型兩部分,顯示界面會實時更新windows桌面的數據;手部模型會同步單目攝像頭捕捉的手部動作信息,通過socket通信傳輸手部坐標信息到3D界面,此外手部模型也可完成簡單的3D動作,如揮拳,前后移動,握手等。

5? 結? 論

本系統基于MediaPipe的機器學習框架,實現了虛擬鼠標及3D效果展示功能。其核心部分為手勢識別的21個特征點坐標的獲取,在此基礎上,對手部信息進行處理,判斷當前手部狀態,使用者在虛擬鼠標的操作區域實現移動選擇、點擊等功能,反應靈敏、延遲較低。在日常生活中使用本作品來實現遠程控制虛擬鼠標已然滿足使用需求。

本系統可廣泛應用在多個場景,如醫院無接觸使用電子設備,銀行的業務辦理機等公共場合、VR沉浸式應用、手語交流等場景。本系統同步3D效果展示延時較低,可更好的結合VR虛擬設備,實現最自然的人機交互,給使用者帶來最自然真實的交互體驗。

參考文獻:

[1] 宋一凡,張鵬,劉立波.基于視覺手勢識別的人機交互系統 [J].計算機科學,2019,46(S2):570-574.

[2] 崔虎. 面向動態手勢識別的異步特征表示與時空正則化算法研究 [D].貴陽:貴州大學,2022.

[3] 李輝,蘆利斌,金國棟.基于手勢識別的四旋翼控制系統 [J].現代計算機:專業版,2015(25):56-59+67.

[4] 方霽,鄭倩,王一梅,等.關于云導播臺交互方式的探討 [J].廣播電視信息,2021,28(8):22-25.

[5] 張俊,魏寧宇.基于數字孿生技術的《機械手驅動技術》應用 [J].數字技術與應用,2022,40(12):120-122.

作者簡介:陳敬宇(2003—),男,河南濮陽人,本科

在讀,主要研究方向:物聯網工程。通訊作者:徐金(1989—),女,新疆伊犁人,講師,專任教師,碩士研究生,主要研究方向:人工智能。

主站蜘蛛池模板: а∨天堂一区中文字幕| 中文一区二区视频| hezyo加勒比一区二区三区| 亚洲码一区二区三区| 又大又硬又爽免费视频| 免费av一区二区三区在线| h网站在线播放| 国产午夜人做人免费视频| 国产精品女主播| 亚洲第一综合天堂另类专| 国产玖玖视频| 久久一日本道色综合久久| 色婷婷国产精品视频| 成人小视频网| 呦视频在线一区二区三区| 成人国产免费| 亚洲精品无码专区在线观看| 国产91蝌蚪窝| 91精品啪在线观看国产| 美女高潮全身流白浆福利区| 亚洲欧美综合精品久久成人网| 国产成人免费视频精品一区二区| 国产精品免费入口视频| 欧美日韩在线亚洲国产人| 国产三级a| 激情综合五月网| 国产女人在线| a级高清毛片| 日韩av电影一区二区三区四区| 亚洲欧美成aⅴ人在线观看| 熟女成人国产精品视频| 欧美性精品| 日韩a级片视频| 欧美一区二区自偷自拍视频| 中文字幕首页系列人妻| 亚洲成aⅴ人片在线影院八| 国产激情无码一区二区APP| 一级爱做片免费观看久久 | 亚洲欧美日韩成人在线| 国产区91| 亚洲av片在线免费观看| 97se亚洲| 欧美在线国产| 国产精品第5页| 中文字幕不卡免费高清视频| 蜜桃视频一区二区三区| 无码专区第一页| 亚洲欧洲日韩综合色天使| 亚洲日韩高清无码| 青青草原国产一区二区| 色婷婷在线播放| 91在线丝袜| 亚洲综合二区| 制服丝袜一区| 一级做a爰片久久免费| 日韩精品无码免费一区二区三区 | 亚洲天堂视频在线播放| 欧美日韩va| 亚洲天堂网在线观看视频| 丝袜高跟美脚国产1区| 欧美成人一区午夜福利在线| 国产AV无码专区亚洲精品网站| 一级一毛片a级毛片| 99中文字幕亚洲一区二区| 国产乱人乱偷精品视频a人人澡| 日韩在线视频网站| 国产91九色在线播放| 久久夜夜视频| 久久久久久久97| 99999久久久久久亚洲| 成人亚洲视频| 国产理论最新国产精品视频| 亚洲午夜福利在线| 欧美第一页在线| 国产激情无码一区二区APP | 久久久噜噜噜| 亚洲第一黄色网址| 国产精品区网红主播在线观看| 国产成人精品视频一区二区电影 | 九九视频免费看| 国产美女无遮挡免费视频网站| 老司机精品久久|