您好,登錄后才能下訂單哦!
這篇文章主要介紹了Python+OpenCV手勢檢測與識別Mediapipe的方法是什么的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Python+OpenCV手勢檢測與識別Mediapipe的方法是什么文章都會有所收獲,下面我們一起來看看吧。
項目的實現,核心是強大的Mediapipe ,它是google的一個開源項目:
功能 | 詳細 |
---|---|
人臉檢測 FaceMesh | 從圖像/視頻中重建出人臉的3D Mesh |
人像分離 | 從圖像/視頻中把人分離出來 |
手勢跟蹤 | 21個關鍵點的3D坐標 |
人體3D識別 | 33個關鍵點的3D坐標 |
物體顏色識別 | 可以把頭發檢測出來,并圖上顏色 |
Python安裝Mediapipe
pip install mediapipe==0.8.9.1
也可以用 setup.py 安裝
Python 3.7
Mediapipe 0.8.9.1
Numpy 1.21.6
OpenCV-Python 4.5.5.64
OpenCV-contrib-Python 4.5.5.64
實測也支持Python3.8-3.9
OpenCV攝像頭捕捉部分:
import cv2 cap = cv2.VideoCapture(0) #OpenCV攝像頭調用:0=內置攝像頭(筆記本) 1=USB攝像頭-1 2=USB攝像頭-2 while True: success, img = cap.read() imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #cv2圖像初始化 cv2.imshow("HandsImage", img) #CV2窗體 cv2.waitKey(1) #關閉窗體
mediapipe 手勢識別與繪制
#定義并引用mediapipe中的hands模塊 mpHands = mp.solutions.hands hands = mpHands.Hands() mpDraw = mp.solutions.drawing_utils while True: success, img = cap.read() imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #cv2圖像初始化 results = hands.process(imgRGB) # print(results.multi_hand_landmarks) if results.multi_hand_landmarks: for handLms in results.multi_hand_landmarks: for id, lm in enumerate(handLms.landmark): # print(id, lm) h, w, c = img.shape cx, cy = int(lm.x * w), int(lm.y * h) print(id, cx, cy) # if id == 4: cv2.circle(img, (cx, cy), 15, (255, 0, 255), cv2.FILLED) #繪制手部特征點: mpDraw.draw_landmarks(img, handLms, mpHands.HAND_CONNECTIONS)
import time #幀率時間計算 pTime = 0 cTime = 0 while True cTime = time.time() fps = 1 / (cTime - pTime) pTime = cTime cv2.putText(img, str(int(fps)), (10, 70), cv2.FONT_HERSHEY_PLAIN, 3, (255, 0, 255), 3) #FPS的字號,顏色等設置
# Coding BIGBOSSyifi # Datatime:2022/4/24 21:41 # Filename:HandsDetector.py # Toolby: PyCharm import cv2 import mediapipe as mp import time cap = cv2.VideoCapture(0) #OpenCV攝像頭調用:0=內置攝像頭(筆記本) 1=USB攝像頭-1 2=USB攝像頭-2 #定義并引用mediapipe中的hands模塊 mpHands = mp.solutions.hands hands = mpHands.Hands() mpDraw = mp.solutions.drawing_utils #幀率時間計算 pTime = 0 cTime = 0 while True: success, img = cap.read() imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #cv2圖像初始化 results = hands.process(imgRGB) # print(results.multi_hand_landmarks) if results.multi_hand_landmarks: for handLms in results.multi_hand_landmarks: for id, lm in enumerate(handLms.landmark): # print(id, lm) h, w, c = img.shape cx, cy = int(lm.x * w), int(lm.y * h) print(id, cx, cy) # if id == 4: cv2.circle(img, (cx, cy), 15, (255, 0, 255), cv2.FILLED) #繪制手部特征點: mpDraw.draw_landmarks(img, handLms, mpHands.HAND_CONNECTIONS) ''''' 視頻FPS計算 ''' cTime = time.time() fps = 1 / (cTime - pTime) pTime = cTime cv2.putText(img, str(int(fps)), (10, 70), cv2.FONT_HERSHEY_PLAIN, 3, (255, 0, 255), 3) #FPS的字號,顏色等設置 cv2.imshow("HandsImage", img) #CV2窗體 cv2.waitKey(1) #關閉窗體
關于“Python+OpenCV手勢檢測與識別Mediapipe的方法是什么”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Python+OpenCV手勢檢測與識別Mediapipe的方法是什么”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。