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

基于 mediapipe 做實時手部追蹤

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

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

項目設置

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

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

安裝Mediapipe

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

pip install mediapipe

代碼

現在我們可以開始創建一個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)

現在我們需要創建一個手部追蹤對象。通過使用with語句,我們在幀捕獲循環周圍創建一個上下文,以便可以使用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指定將檢測到的手部數量的上限,例如,如果我們只想識別一只手,可以將其降低到1。min_detection_confidence和min_tracking_confidence分別指模型在首次檢測手部時以及在保持追蹤時的置信度。

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

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()

現在唯一剩下要做的就是實現手部關鍵點檢測及其可視化。唯一需要考慮的是,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常量,手部關鍵點之間的連接以及關鍵點本身將被繪制出來。此外,指定的默認繪圖規范允許對不同手指進行明顯的著色。

# 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。因此,該模型將完整圖像的像素值作為輸入,并輸出描述圖像中手掌可能位置的邊界框以及每個框的置信度分數。這里使用了一些技巧,例如將錨框(在網絡中創建的分類前的提議)限制為正方形圖像。

第二部分,手部關鍵點模型,是一個回歸模型,它將手掌檢測的邊界框中的裁剪圖像作為輸入,并返回手部所有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

谷歌開源開發者

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

2024-04-26 08:00:00

開源人體姿勢跟蹤

2015-01-21 09:47:59

2024-04-09 10:02:13

Spring數據Redis

2019-08-21 20:08:34

人工智能手勢識別谷歌

2022-03-03 12:24:17

暗碼追蹤數字水印打印機

2022-01-24 16:06:58

Linux 5.17RTLA工具

2024-09-04 15:42:38

OpenCV開發Python

2014-03-25 14:21:18

WebSocket實時

2017-04-06 22:40:52

數據分析追蹤系統微信

2024-12-24 07:00:00

MediaPipe面部識別

2021-07-13 07:04:19

Flink數倉數據

2025-01-23 08:47:50

2021-03-22 11:10:09

Redis架構MQ

2018-09-19 10:01:39

MSSQL列存儲實時分析
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: h在线| 黄色一级大片视频 | 日本高清视频在线播放 | 在线啊v| 精品国产一二三区 | 日韩精品成人在线 | 91精品国产91久久久久久吃药 | 国产成人免费视频网站视频社区 | 国产一区二区视频在线 | 亚洲色欧美另类 | 国产精品网址 | 久久久91精品国产一区二区精品 | 老熟女毛片 | 亚洲欧美日韩成人在线 | 我想看一级黄色毛片 | 中文在线a在线 | 中文字幕一区在线观看视频 | av电影一区 | 天天干天天干 | 毛片大全 | 亚洲欧美视频 | www.av在线 | 久久国产精品-国产精品 | 精品国产伦一区二区三区观看体验 | 久久国产精品一区二区 | 精品1区2区 | 国产91av视频在线观看 | 欧美日韩一区二区三区四区 | 中文字幕在线网 | 日韩中文一区二区三区 | 欧美极品在线观看 | 中文字幕第十五页 | 日韩伦理一区二区 | 久久久久久国产 | 国产欧美日韩综合精品一区二区 | 欧产日产国产精品99 | 日韩人体在线 | 色综合一区二区 | 欧美综合一区二区三区 | 综合久久99| 99成人|