Čtenáři jako vy pomáhají podporovat MUO. Když provedete nákup pomocí odkazů na našich stránkách, můžeme získat provizi přidružené společnosti. Přečtěte si více.

Sledování ruky je proces využití počítačového vidění k detekci a sledování pohybů ruky osoby v reálném čase. Nejdominantnější aplikace sledování ruky je v náhlavních soupravách pro virtuální realitu. Náhlavní soupravy vám umožňují používat ruce jako vstup místo dotykových ovladačů. Díky tomu je zážitek pohlcující.

Zjistěte, jak sledovat ruce osoby pomocí Pythonu, OpenCV pro počítačové vidění a MediaPipe.

Google vyvinul rámec MediaPipe, který obsahuje mnoho řešení pro strojové učení. Jedním z řešení je tzv. řešení pro sledování rukou a prstů Ruce MediaPipe. Pro sledování rukou provádí MediaPipe Hands dva procesy: detekci dlaní a detekci orientačních bodů.

Detekce dlaně ruky

MediaPipe začíná identifikací, kde jsou dlaně ve vstupním obrázku. Protože odhadování ohraničujících rámečků pro tuhé předměty je jednodušší než identifikace rukou se spojenými prsty.

instagram viewer

Ruční detekce orientačních bodů

Po detekci dlaně provede MediaPipe detekci orientačních bodů ruky. Model ručního orientačního bodu dokáže předpovědět 21 přesných souřadnic umístění každého orientačního bodu ruky.

Čísla představují jedinečný identifikátor pro každý orientační bod.

Nastavení vašeho prostředí

Chcete-li pokračovat v tomto projektu, měli byste být obeznámeni s základy Pythonu. Nainstalujte do svého prostředí následující knihovny:

  • OpenCV: Tuto knihovnu budete používat pro počítačové vidění a pro provádění technik zpracování obrazu na vstupním obrazu.
  • MediaPipe: Tuto knihovnu budete používat k provádění detekce a sledování ruky na vstupním obrázku.
  • imutils: Pomocí této knihovny změníte velikost snímku videa na vstupu.

Spusťte na svém terminálu následující příkaz a nainstalujte knihovny OpenCV, MediaPipe a imutils. Install pip – správce balíčků Pythonu-Pokud potřebuješ. Ujistěte se, že předáváte knihovny jako seznam oddělený mezerou.

pip install OpenCV-Python MediaPipe imutils

Po dokončení aktualizace je prostředí připraveno k zahájení kódování.

Úplný zdrojový kód tohoto projektu je k dispozici v něm úložiště GitHub.

Import požadovaných knihoven

Budete muset importovat knihovny, které jste nainstalovali, abyste je mohli používat. Otevřete libovolný Python IDE, vytvořte soubor Python a přidejte následující importy:

import cv2
import mediapipe tak jako t.t
import imutils

Ujistěte se, že importujete OpenCV jako cv2 a MediaPipe malými písmeny. Pokud tak neučiníte, dojde k chybě.

Budete používat mpHands k vyvolání řešení rukou MediaPipe a objekt hands k detekci a sledování vstupu z ruky. K nakreslení spojení mezi orientačními body identifikovaných rukou použijete objekt mpDraw.

mpHands = mp.solutions.hands
ruce = mpHands. Ruce()
mpDraw = mp.solutions.drawing_utils

Model rukou MediaPipe můžete doladit předáním různých parametrů konstruktoru Hands(). Výchozí hodnoty jsou pro tento projekt dostačující, ale můžete s nimi experimentovat a zjistit, jak ovlivňují model:

Měli byste opustit static_image_mode jako False, aby se zajistilo, že model jednou detekuje ruce, než je začne sledovat. Opakuje proces sledování pouze v případě, že spolehlivost detekce klesne pod deklarovaný parametr, takže celkové zpracování vstupu je rychlejší.

Provádění ručního sledování

K provádění sledování ruky potřebujete tři funkce: jednu pro zpracování vstupu, jednu pro kreslení spojení orientačních bodů ruky a hlavní funkci pro řízení toku programu.

Funkce zpracování vstupu

Tato funkce převezme vstup, převede jej na stupně šedi a předá jej modelu rukou MediaPipe, aby detekoval a sledoval ruce na vstupu.

# Zpracování vstupního obrázku
defproces_obraz(img):
# Převod vstupu na stupně šedi
gray_image = cv2.cvtColor (img, cv2.COLOR_BGR2RGB)
výsledky = hands.process (grey_image)

# Vrácení detekovaných rukou do funkce volání
vrátit se Výsledek

Funkce vrací výsledky o tom, zda na vstupu byly nějaké detekované handy.

Funkce kreslení spojů mezníku ruky

Tato funkce kontroluje, zda funkce zpracování vstupu detekovala nějaké ruce. Pokud jsou detekovány nějaké ruce, otočí se přes každý orientační bod a nakreslí kolem něj kruh, přičemž sleduje orientační bod pomocí Funkce výčtu Pythonu. Poté vykreslí spojení mezi orientačními body na původním video vstupu.

# Kreslení orientačních spojů
defdraw_hand_connections(img, výsledky):
-li results.multi_hand_landmarks:
pro handLms v results.multi_hand_landmarks:
pro id, lm v vyjmenovat (handLms.landmark):
v, š, c = obr. tvar

# Nalezení souřadnic každého orientačního bodu
cx, cy = int (lm.x * w), int (lm.y * h)

# Tisk každého ID orientačního bodu a souřadnic
# na terminálu
tisknout (id, cx, cy)

# Vytvoření kruhu kolem každého orientačního bodu
cv2.circle (img, (cx, cy), 10, (0, 255, 0),
cv2.FILLED)
# Kreslení spojů orientačních bodů
mpDraw.draw_landmarks (img, handLms,
mpHands. HAND_CONNECTIONS)

vrátit se img

Funkce začíná zakroužkováním každého orientačního bodu:

Poté nakreslí spojení rukou:

Nakonec vrátí svůj výstup volající funkci.

Hlavní funkce

Vytvořte hlavní funkci, která bude řídit tok vašeho programu. Převezme vstup a změní velikost snímku videa, aby byla zajištěna konzistence výstupu. Předejte vstup do funkce zpracování, která pak detekuje a sleduje ruce. Přeneste vrácené výsledky do funkce kreslení připojení orientačních bodů, která nakreslí připojení na původní video vstup. Nakonec zobrazí výstup uživateli.

defhlavní():
# Chcete-li použít a, nahraďte 0 cestou videa
# předem nahrané video
cap = cv2.VideoCapture(0)

zatímcoSkutečný:
# Přebírání vstupu
úspěch, obrázek = cap.read()
image = imutils.resize (obrázek, šířka=500, výška=500)
výsledky = proces_image (obrázek)
draw_hand_connections (obrázek, výsledky)

# Zobrazení výstupu
cv2.imshow("Sledovač rukou", obraz)

# Program se ukončí stisknutím tlačítka q
-li cv2.waitKey(1) == ord('q'):
cap.release()
cv2.destroyAllWindows()

Posledním krokem je spuštění vašeho programu. Níže uvedený kód zajišťuje, že při spuštění programu se nejprve spustí hlavní funkce.

-li __jméno__ == "__hlavní__":
hlavní()

Když program běží, vytváří výstup takto:

Program sleduje ruce v reálném čase.

Sledování ruky pro pohlcující virtuální realitu

Sledování ruky ve virtuální realitě dělá technologii lákavější. Náhlavní soupravy pro virtuální realitu začaly zavádět sledování ruky, čímž přinášejí do virtuálního světa pocit zvýšené reality. Náhlavní soupravy umožňují uživateli zadávat příkazy pomocí virtuální ruky.

Sledování ruky ve virtuálních náhlavních soupravách je jen jednou aplikací této technologie. Sledování ruky můžete začlenit do libovolné oblasti, která se vám líbí.