Python+OpenCV手勢(shì)檢測(cè)與識(shí)別Mediapipe基礎(chǔ)篇
前言
本篇文章適合剛?cè)腴T(mén)OpenCV的同學(xué)們。文章將介紹如何使用Python利用OpenCV圖像捕捉,配合強(qiáng)大的Mediapipe庫(kù)來(lái)實(shí)現(xiàn)手勢(shì)檢測(cè)與識(shí)別;本系列后續(xù)還會(huì)繼續(xù)更新Mediapipe手勢(shì)的各種衍生項(xiàng)目,還請(qǐng)多多關(guān)注!
項(xiàng)目效果圖
視頻捕捉幀數(shù)穩(wěn)定在(25-30)
認(rèn)識(shí)Mediapipe
項(xiàng)目的實(shí)現(xiàn),核心是強(qiáng)大的Mediapipe ,它是google的一個(gè)開(kāi)源項(xiàng)目:
功能 | 詳細(xì) |
---|---|
人臉檢測(cè) FaceMesh | 從圖像/視頻中重建出人臉的3D Mesh |
人像分離 | 從圖像/視頻中把人分離出來(lái) |
手勢(shì)跟蹤 | 21個(gè)關(guān)鍵點(diǎn)的3D坐標(biāo) |
人體3D識(shí)別 | 33個(gè)關(guān)鍵點(diǎn)的3D坐標(biāo) |
物體顏色識(shí)別 | 可以把頭發(fā)檢測(cè)出來(lái),并圖上顏色 |
Mediapipe Dev:https://mediapipe.dev/
以上是Mediapipe的幾個(gè)常用功能 ,這幾個(gè)功能我們會(huì)在后續(xù)一一講解實(shí)現(xiàn)
Python安裝Mediapipe
pip install mediapipe==0.8.9.1
也可以用 setup.py 安裝
https://github.com/google/mediapipe
項(xiàng)目環(huán)境
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
實(shí)測(cè)也支持Python3.8-3.9
代碼
核心代碼
OpenCV攝像頭捕捉部分:
import cv2 cap = cv2.VideoCapture(0) #OpenCV攝像頭調(diào)用:0=內(nèi)置攝像頭(筆記本) 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) #關(guān)閉窗體
mediapipe 手勢(shì)識(shí)別與繪制
#定義并引用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) #繪制手部特征點(diǎn): mpDraw.draw_landmarks(img, handLms, mpHands.HAND_CONNECTIONS)
視頻幀率計(jì)算
import time #幀率時(shí)間計(jì)算 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的字號(hào),顏色等設(shè)置
完整代碼
# 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攝像頭調(diào)用:0=內(nèi)置攝像頭(筆記本) 1=USB攝像頭-1 2=USB攝像頭-2 #定義并引用mediapipe中的hands模塊 mpHands = mp.solutions.hands hands = mpHands.Hands() mpDraw = mp.solutions.drawing_utils #幀率時(shí)間計(jì)算 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) #繪制手部特征點(diǎn): mpDraw.draw_landmarks(img, handLms, mpHands.HAND_CONNECTIONS) ''''' 視頻FPS計(jì)算 ''' 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的字號(hào),顏色等設(shè)置 cv2.imshow("HandsImage", img) #CV2窗體 cv2.waitKey(1) #關(guān)閉窗體
項(xiàng)目輸出
結(jié)語(yǔ)
以此篇文章技術(shù)為基礎(chǔ),后續(xù)會(huì)更新利用此篇基礎(chǔ)技術(shù)實(shí)現(xiàn)的《手勢(shì)控制:音量,鼠標(biāo)》
項(xiàng)目下載地址https://github.com/BIGBOSS-dedsec/HandsDetection_Python
到此這篇關(guān)于Python+OpenCV手勢(shì)檢測(cè)與識(shí)別Mediapipe基礎(chǔ)篇的文章就介紹到這了,更多相關(guān)Python OpenCV手勢(shì)識(shí)別Mediapipe內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python使用淘寶API查詢(xún)IP歸屬地功能分享
- python使用在線(xiàn)API查詢(xún)IP對(duì)應(yīng)的地理位置信息實(shí)例
- python中mediapipe庫(kù)踩過(guò)的坑實(shí)戰(zhàn)記錄
- python使用mediapiple+opencv識(shí)別視頻人臉的實(shí)現(xiàn)
- ?Python使用Mediapipe對(duì)圖像進(jìn)行手部地標(biāo)檢測(cè)
- Python+MediaPipe實(shí)現(xiàn)檢測(cè)人臉功能詳解
- python使用IP歸屬地查詢(xún)API追蹤網(wǎng)絡(luò)活動(dòng)
相關(guān)文章
Python Django路徑配置實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Python Django路徑配置實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Python綜合應(yīng)用名片管理系統(tǒng)案例詳解
這篇文章主要介紹了Python綜合應(yīng)用名片管理系統(tǒng),結(jié)合具體案例形式詳細(xì)分析了Python名片管理系統(tǒng)相關(guān)步驟、原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2020-01-01利用python繪制數(shù)據(jù)曲線(xiàn)圖的實(shí)現(xiàn)
這篇文章主要介紹了利用python繪制數(shù)據(jù)曲線(xiàn)圖的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04