Čitatelia ako vy pomáhajú podporovať MUO. Keď uskutočníte nákup pomocou odkazov na našej stránke, môžeme získať pridruženú províziu. Čítaj viac.

Sledovanie rúk je proces používania počítačového videnia na detekciu a sledovanie pohybov ruky osoby v reálnom čase. Najdominantnejšia aplikácia sledovania rúk je v náhlavných súpravách pre virtuálnu realitu. Slúchadlá vám umožňujú používať ruky ako vstup namiesto dotykových ovládačov. To zase robí zážitok pohlcujúcim.

Zistite, ako sledovať ruky osoby pomocou Pythonu, OpenCV pre počítačové videnie a MediaPipe.

Google vyvinul rámec MediaPipe, ktorý obsahuje mnoho riešení strojového učenia. Jedným z riešení je riešenie sledovania rúk a prstov tzv Ruky MediaPipe. Na sledovanie rúk vykonáva MediaPipe Hands dva procesy: detekciu dlaní a detekciu orientačných bodov.

Detekcia dlane ruky

MediaPipe začína identifikáciou, kde sú dlane na vstupnom obrázku. Pretože odhadovanie ohraničujúcich polí pre tuhé predmety je jednoduchšie ako identifikácia rúk so spojenými prstami.

instagram viewer

Ručná detekcia orientačných bodov

Po detekcii dlane MediaPipe vykoná detekciu orientačných bodov ruky. Model ručného orientačného bodu dokáže predpovedať 21 presných súradníc polohy každého ručného orientačného bodu.

Čísla predstavujú jedinečný identifikátor pre každý orientačný bod.

Nastavenie vášho prostredia

Ak chcete pokračovať v tomto projekte, mali by ste byť oboznámení s základy Pythonu. Nainštalujte si do svojho prostredia nasledujúce knižnice:

  • OpenCV: Túto knižnicu budete používať na počítačové videnie a na vykonávanie techník spracovania obrazu na vstupnom obrázku.
  • MediaPipe: Túto knižnicu použijete na vykonanie detekcie a sledovania rúk na vstupnom obrázku.
  • imutils: Pomocou tejto knižnice zmeníte veľkosť video rámca vstupu.

Spustite nasledujúci príkaz na svojom termináli a nainštalujte knižnice OpenCV, MediaPipe a imutils. Install pip – správca balíkov Pythonu- ak potrebujete. Uistite sa, že odovzdávate knižnice ako zoznam oddelený medzerou.

pip nainštalovať OpenCV-Python MediaPipe imutils

Po dokončení aktualizácie je prostredie pripravené na spustenie kódovania.

Úplný zdrojový kód tohto projektu je k dispozícii v ňom úložisko GitHub.

Import požadovaných knižníc

Aby ste ich mohli používať, budete musieť importovať nainštalované knižnice. Otvorte ľubovoľné Python IDE, vytvorte súbor Python a pridajte nasledujúce importy:

importovať cv2
importovať mediapipe ako t.t
importovať imutils

Uistite sa, že importujete OpenCV ako cv2 a MediaPipe malými písmenami. Ak tak neurobíte, zobrazí sa chyba.

Na volanie riešenia rúk MediaPipe použijete mpHands a na detekciu a sledovanie ručného vstupu použijete objekt rúk. Na kreslenie spojení medzi orientačnými bodmi identifikovaných rúk použijete objekt mpDraw.

mpHands = mp.solutions.hands
ruky = mpHands. ruky ()
mpDraw = mp.solutions.drawing_utils

Model rúk MediaPipe môžete doladiť odovzdaním rôznych parametrov konštruktorovi Hands(). Predvolené hodnoty sú pre tento projekt dostatočne dobré, ale môžete s nimi experimentovať a zistiť, ako ovplyvňujú model:

Mali by ste opustiť static_image_mode ako False, aby sa zabezpečilo, že model raz deteguje ruky predtým, ako ich začne sledovať. Proces sledovania sa zopakuje iba vtedy, ak spoľahlivosť detekcie klesne pod deklarovaný parameter, čím sa zrýchli celkové spracovanie vstupu.

Vykonávanie sledovania rúk

Na vykonávanie sledovania rúk potrebujete tri funkcie: jednu na spracovanie vstupu, jednu na kreslenie spojení orientačných bodov ruky a hlavnú funkciu na ovládanie toku programu.

Funkcia spracovania vstupu

Táto funkcia prevezme vstup, skonvertuje ho do odtieňov sivej a odovzdá ho modelu rúk MediaPipe na detekciu a sledovanie rúk vo vstupe.

# Spracovanie vstupného obrazu
defproces_obrázok(img):
# Konverzia vstupu do odtieňov sivej
gray_image = cv2.cvtColor (img, cv2.COLOR_BGR2RGB)
výsledky = hands.process (gray_image)

# Vrátenie rozpoznaných rúk do funkcie volania
vrátiť výsledky

Funkcia vráti výsledky o tom, či na vstupe boli nejaké detekované ruky.

Funkcia kreslenia spojení ručných orientačných bodov

Táto funkcia kontroluje, či funkcia spracovania vstupu rozpoznala nejaké ruky. Ak sa nájdu nejaké ruky, prejde cez každý orientačný bod a nakreslí okolo neho kruh, pričom sleduje orientačný bod pomocou Enumeračná funkcia Pythonu. Potom nakreslí spojenia medzi orientačnými bodmi na pôvodnom video vstupe.

# Kreslenie orientačných spojení
defdraw_hand_connections(img, výsledky):
ak results.multi_hand_landmarks:
pre handLms v results.multi_hand_landmarks:
pre id, lm v enumerate (handLms.landmark):
h, w, c = obr

# Nájdenie súradníc každého orientačného bodu
cx, cy = int (lm.x * w), int (lm.y * h)

# Tlač ID a súradníc každého orientačného bodu
# na termináli
tlačiť (id, cx, cy)

# Vytvorenie kruhu okolo každého orientačného bodu
cv2.circle (img, (cx, cy), 10, (0, 255, 0),
cv2.FILLED)
# Kreslenie orientačných spojení
mpDraw.draw_landmarks (img, handLms,
mpHands. HAND_CONNECTIONS)

vrátiť img

Funkcia začína zakrúžkovaním každého orientačného bodu:

Potom nakreslí spojenia rúk:

Nakoniec vráti svoj výstup volajúcej funkcii.

Hlavná funkcia

Vytvorte hlavnú funkciu, ktorá bude riadiť tok vášho programu. Prevezme vstup a zmení veľkosť snímky videa, aby sa zabezpečila konzistencia výstupu. Odovzdajte vstup do funkcie spracovania, ktorá potom rozpozná a sleduje ruky. Preneste vrátené výsledky do funkcie kreslenia spojenia orientačných bodov ruky, ktorá nakreslí spojenie na pôvodný video vstup. Nakoniec zobrazí výstup používateľovi.

defHlavná():
# Ak chcete použiť a, nahraďte 0 cestou videa
# vopred nahrané video
cap = cv2.VideoCapture(0)

zatiaľ čoPravda:
# Prevzatie vstupu
úspech, obrázok = cap.read()
image = imutils.resize (obrázok, šírka=500, výška=500)
výsledky = process_image (image)
draw_hand_connections (obrázok, výsledky)

# Zobrazenie výstupu
cv2.imshow("Sledovač rúk", obrázok)

# Program sa ukončí stlačením klávesu q
ak cv2.waitKey(1) == ord('q'):
cap.release()
cv2.destroyAllWindows()

Posledným krokom je spustenie programu. Nižšie uvedený kód zaisťuje, že pri spustení programu sa najprv spustí hlavná funkcia.

ak __meno__ == "__Hlavná__":
Hlavná()

Keď program beží, produkuje výstup takto:

Program sleduje ruky v reálnom čase.

Sledovanie rúk pre pohlcujúcu virtuálnu realitu

Sledovanie rúk vo virtuálnej realite robí technológiu lákavejšou. Slúchadlá pre virtuálnu realitu začali zavádzať sledovanie rúk, čím vnášajú do virtuálneho sveta pocit zvýšenej reality. Náhlavné súpravy umožňujú používateľovi zadávať príkazy pomocou virtuálnej ruky.

Sledovanie rúk vo virtuálnych náhlavných súpravách je len jednou aplikáciou tejto technológie. Sledovanie rúk môžete začleniť do akejkoľvek oblasti, ktorá sa vám páči.