成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

基于 mediapipe 做實時手部追蹤

開發(fā)
在本文中,我將向你展示如何使用Python和網絡攝像頭輕松開始手部追蹤算法,所有操作都在你的計算機本地運行。我們將直接使用mediapipe手部追蹤解決方案,并了解其基本工作原理。

隨著越來越多的資源和框架針對各種任務進行定制,開始計算機視覺應用從未如此簡單。其中一個任務就是手部追蹤,它在虛擬現(xiàn)實、手語翻譯以及許多其他人機交互相關應用中有著廣泛的用途。在本文中,我將向你展示如何使用Python和網絡攝像頭輕松開始手部追蹤算法,所有操作都在你的計算機本地運行。我們將直接使用mediapipe手部追蹤解決方案,并了解其基本工作原理。

項目設置

首先創(chuàng)建一個空的項目目錄。我強烈建議你使用虛擬環(huán)境管理器,例如Miniconda,以分離不同的Python項目。我喜歡通過在項目目錄中創(chuàng)建本地環(huán)境來設置我的環(huán)境,以避免弄亂我的全局Conda環(huán)境。

conda create -p ./env python=3.12 
conda activate ./env

安裝Mediapipe

接下來我們需要安裝mediapipe pip包。這非常簡單,它會自動安裝所有所需的依賴項。

pip install mediapipe

代碼

現(xiàn)在我們可以開始創(chuàng)建一個main.py文件。首先導入所需的包,我們將使用opencv-python進行網絡攝像頭視頻幀捕獲,以及mediapipe手部解決方案及其繪圖工具。

import cv2
import mediapipe.python.solutions.hands as mp_hands
import mediapipe.python.solutions.drawing_utils as mp_drawing
import mediapipe.python.solutions.drawing_styles as mp_drawing_styles

接下來我們需要設置網絡攝像頭的VideoCapture。通過指定索引0,我們獲取第一個可用的網絡攝像頭。

cap = cv2.VideoCapture(index=0)

現(xiàn)在我們需要創(chuàng)建一個手部追蹤對象。通過使用with語句,我們在幀捕獲循環(huán)周圍創(chuàng)建一個上下文,以便可以使用hands對象。這確保在with語句的上下文結束時,所有與追蹤相關的資源都能正確清理。

with mp_hands.Hands(
    model_complexity=0,
    max_num_hands=2,
    min_detection_confidence=0.5,
    min_tracking_confidence=0.5,
) as hands:
  # TODO: video Frame loop

這里我們有幾個配置選項。model_complexity定義是使用簡單模型(0)還是更復雜的模型(1)。復雜模型在檢測中通常具有更高的準確性,但會犧牲延遲。max_num_hands指定將檢測到的手部數(shù)量的上限,例如,如果我們只想識別一只手,可以將其降低到1。min_detection_confidence和min_tracking_confidence分別指模型在首次檢測手部時以及在保持追蹤時的置信度。

為了創(chuàng)建視頻幀循環(huán),我們使用一個while循環(huán),只要視頻捕獲打開,它就會運行。我們從視頻捕獲中讀取最新的幀,如果成功,我們將其顯示出來。請注意,我們水平翻轉圖像以獲得類似鏡子/自拍的效果。我們還會檢查每一幀是否按下了鍵q,然后退出循環(huán)。最后在循環(huán)結束后,我們通過釋放視頻捕獲資源來清理它。

with mp_hands.Hands(
    model_complexity=0,
    max_num_hands=2,
    min_detection_confidence=0.5,
    min_tracking_confidence=0.5,
) as hands:
    while cap.isOpened():
        success, frame = cap.read()
        if not success:
            print("Ignoring empty camera frame...")
            continue

        # TODO: check frame for hands
        # TODO: draw detected hand landmarks on frame

        cv2.imshow("Hand Tracking", cv2.flip(frame, 1))
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break

cap.release()

現(xiàn)在唯一剩下要做的就是實現(xiàn)手部關鍵點檢測及其可視化。唯一需要考慮的是,OpenCV以BGR(藍、綠、紅顏色通道順序)格式加載圖像,而模型是在RGB上訓練的,因此為了獲得最佳結果,我們也應該將幀轉換為RGB。

注意:你也可以嘗試在不轉換為RGB的情況下運行檢測。在我的情況下,它仍然有效,但檢測的準確性要低得多。

# Check the frame for hands
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
results = hands.process(frame_rgb)

為了檢查這是否有效,我們可以在檢測到手部時添加一個打印語句:

if results.multi_hand_landmarks is None:
    print("No hands detected")
else:
    print(f"Number of hands detected: {len(results.multi_hand_landmarks)}")

最后,我們可以使用mediapipe提供的繪圖工具在幀上注釋,以可視化幀中的手部。通過指定HAND_CONNECTIONS常量,手部關鍵點之間的連接以及關鍵點本身將被繪制出來。此外,指定的默認繪圖規(guī)范允許對不同手指進行明顯的著色。

# Draw the hand annotations on the image
if results.multi_hand_landmarks:
    for hand_landmarks in results.multi_hand_landmarks:
        mp_drawing.draw_landmarks(
            image=frame,
            landmark_list=hand_landmarks,
            connections=mp_hands.HAND_CONNECTIONS,
            landmark_drawing_spec=mp_drawing_styles.get_default_hand_landmarks_style(),
            connection_drawing_spec=mp_drawing_styles.get_default_hand_connections_style(),
        )

mediapipe 工作原理

手部追蹤的架構主要由兩個階段組成,一個是手掌檢測,粗略地檢測手部的位置,然后是手部關鍵點檢測,更精確地定位手部和手指的不同部分。

第一階段的手掌檢測模型基于SSD。因此,該模型將完整圖像的像素值作為輸入,并輸出描述圖像中手掌可能位置的邊界框以及每個框的置信度分數(shù)。這里使用了一些技巧,例如將錨框(在網絡中創(chuàng)建的分類前的提議)限制為正方形圖像。

第二部分,手部關鍵點模型,是一個回歸模型,它將手掌檢測的邊界框中的裁剪圖像作為輸入,并返回手部所有21個關鍵點的3D坐標。

參考資料:

  • mediapipe解決方案:https://mediapipe.readthedocs.io/en/latest/solutions/hands.html
  • SSD論文:https://arxiv.org/abs/1512.02325
  • 完整代碼:https://github.com/trflorian/hand-tracker
責任編輯:趙寧寧 來源: 小白玩轉Python
相關推薦

2019-08-22 10:48:56

谷歌開源開發(fā)者

2024-03-11 16:33:26

機器狗訓練

2015-10-09 13:42:26

hbase實時計算

2022-07-29 09:35:25

WAF溯源識別

2023-10-16 23:43:52

云原生可觀測性

2010-03-12 15:07:08

2019-08-21 20:08:34

人工智能手勢識別谷歌

2024-04-26 08:00:00

開源人體姿勢跟蹤

2015-01-21 09:47:59

2024-04-09 10:02:13

Spring數(shù)據(jù)Redis

2022-03-03 12:24:17

暗碼追蹤數(shù)字水印打印機

2024-09-04 15:42:38

OpenCV開發(fā)Python

2014-03-25 14:21:18

WebSocket實時

2022-01-24 16:06:58

Linux 5.17RTLA工具

2024-12-24 07:00:00

MediaPipe面部識別

2017-04-06 22:40:52

數(shù)據(jù)分析追蹤系統(tǒng)微信

2021-07-13 07:04:19

Flink數(shù)倉數(shù)據(jù)

2024-06-12 15:59:59

前端JavaScrip識別

2025-01-23 08:47:50

2021-03-22 11:10:09

Redis架構MQ
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美成人一区二区 | 亚洲精品国产综合区久久久久久久 | 久久久久久久久久久久一区二区 | 亚洲精品久久久久avwww潮水 | 日韩精品一区二区三区在线 | 色女人天堂 | 国产精品久久久久久妇女6080 | 亚洲欧美中文日韩在线v日本 | 91精品国产高清一区二区三区 | 孕妇一级毛片 | 国产片侵犯亲女视频播放 | 毛片在线免费 | 成人亚洲一区 | 欧美日韩三区 | 99pao成人国产永久免费视频 | av天空 | 亚州精品天堂中文字幕 | 黄色毛片免费看 | 国产成人高清 | 国产成人精品免高潮在线观看 | 日韩精品免费在线观看 | 欧美一区二区久久 | www.成人.com | 欧美日韩中文字幕 | 一本一道久久a久久精品综合蜜臀 | 成人三级视频在线观看 | 91精品一区二区三区久久久久 | 国产精品国产三级国产aⅴ中文 | 日本久久福利 | 国产精品一区二区三区在线 | 日日夜夜av | 亚洲免费网址 | 午夜国产在线 | 又爽又黄axxx片免费观看 | 91视频进入 | 国产视频二区 | 999www视频免费观看 | 午夜电影福利 | 欧美一区二区大片 | 中文字幕影院 | 91视频免费视频 |