偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

基于 mediapipe 做實時手部追蹤

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

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

項目設(shè)置

首先創(chuàng)建一個空的項目目錄。我強烈建議你使用虛擬環(huán)境管理器,例如Miniconda,以分離不同的Python項目。我喜歡通過在項目目錄中創(chuàng)建本地環(huán)境來設(shè)置我的環(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文件。首先導(dǎo)入所需的包,我們將使用opencv-python進(jìn)行網(wǎng)絡(luò)攝像頭視頻幀捕獲,以及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

接下來我們需要設(shè)置網(wǎng)絡(luò)攝像頭的VideoCapture。通過指定索引0,我們獲取第一個可用的網(wǎng)絡(luò)攝像頭。

cap = cv2.VideoCapture(index=0)

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

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)還是更復(fù)雜的模型(1)。復(fù)雜模型在檢測中通常具有更高的準(zhǔn)確性,但會犧牲延遲。max_num_hands指定將檢測到的手部數(shù)量的上限,例如,如果我們只想識別一只手,可以將其降低到1。min_detection_confidence和min_tracking_confidence分別指模型在首次檢測手部時以及在保持追蹤時的置信度。

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

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)手部關(guān)鍵點檢測及其可視化。唯一需要考慮的是,OpenCV以BGR(藍(lán)、綠、紅顏色通道順序)格式加載圖像,而模型是在RGB上訓(xùn)練的,因此為了獲得最佳結(jié)果,我們也應(yīng)該將幀轉(zhuǎn)換為RGB。

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

# 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ān)鍵點之間的連接以及關(guān)鍵點本身將被繪制出來。此外,指定的默認(rèn)繪圖規(guī)范允許對不同手指進(jìn)行明顯的著色。

# 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 工作原理

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

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

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

參考資料:

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

2019-08-22 10:48:56

谷歌開源開發(fā)者

2024-03-11 16:33:26

機器狗訓(xùn)練

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數(shù)據(jù)Redis

2019-08-21 20:08:34

人工智能手勢識別谷歌

2022-03-03 12:24:17

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

2022-01-24 16:06:58

Linux 5.17RTLA工具

2024-09-04 15:42:38

OpenCV開發(fā)Python

2014-03-25 14:21:18

WebSocket實時

2017-04-06 22:40:52

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

2024-12-24 07:00:00

MediaPipe面部識別

2021-07-13 07:04:19

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

2025-01-23 08:47:50

2021-03-22 11:10:09

Redis架構(gòu)MQ

2018-09-19 10:01:39

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

51CTO技術(shù)棧公眾號