Az Önhöz hasonló olvasók támogatják a MUO-t. Amikor a webhelyünkön található linkek használatával vásárol, társult jutalékot kaphatunk. Olvass tovább.

A kézkövetés az a folyamat, amikor számítógépes látást használnak egy személy kézmozdulatainak valós időben történő észlelésére és követésére. A kézi követés legdominánsabb alkalmazása a virtuális valóság fejhallgatóiban van. A fejhallgatók lehetővé teszik, hogy a kezét használd bemenetként az érintővezérlők helyett. Ez viszont még magával ragadóbbá teszi az élményt.

Ismerje meg, hogyan követheti nyomon egy személy kezét a Python, az OpenCV számítógépes látáshoz és a MediaPipe segítségével.

A Google kifejlesztette a MediaPipe keretrendszert, amely számos gépi tanulási megoldást tartalmaz. Az egyik megoldás az ún. kéz- és ujjkövető megoldás MediaPipe kezek. A kezek követéséhez a MediaPipe Hands két folyamatot hajt végre: tenyérérzékelést és tereptárgyak észlelését.

Kéztenyér érzékelés

A MediaPipe azzal kezdődik, hogy azonosítja, hol vannak a tenyér a bemeneti képen. Mivel a merev tárgyak határolókereteinek becslése egyszerűbb, mint az összeillesztett ujjakkal rendelkező kezek azonosítása.

instagram viewer

Kézi tereptárgyak észlelése

A tenyérérzékelés után a MediaPipe végrehajtja a kézi tereptárgyak észlelését. A kézi tereptárgy-modell 21 pontos koordinátát képes megjósolni az egyes kézi tereptárgyak helyének.

A számok minden tereptárgy egyedi azonosítóját jelentik.

Környezetének beállítása

A projekt követéséhez ismernie kell a Python alapjai. Telepítse a következő könyvtárakat a környezetében:

  • OpenCV: Ezt a könyvtárat számítógépes látáshoz és képfeldolgozási technikák végrehajtásához fogja használni a bemeneti képen.
  • MediaPipe: Ezt a könyvtárat fogja használni a kézfelismerés és a bemeneti kép nyomon követésére.
  • imutils: Ezzel a könyvtárral átméretezheti a bemenet videokockáját.

Futtassa a következő parancsot a terminálon az OpenCV, MediaPipe és imutils könyvtárak telepítéséhez. Telepítse a pip-et – a Python csomagkezelőt- ha kell. Győződjön meg róla, hogy szóközzel tagolt listaként adja át a könyvtárakat.

pip telepítése OpenCV-Python MediaPipe imutils

Amikor a frissítés befejeződött, a környezet készen áll a kódolás megkezdésére.

A projekt teljes forráskódja elérhető a GitHub adattár.

A szükséges könyvtárak importálása

Importálnia kell a telepített könyvtárakat, hogy használni tudja őket. Nyissa meg bármelyik Python IDE, hozzon létre egy Python-fájlt, és adja hozzá a következő importálásokat:

import cv2
import mediapipe mint mp
import imutilok

Győződjön meg róla, hogy az OpenCV-t cv2-ként és a MediaPipe-ot kisbetűvel importálja. Ennek elmulasztása hibát jelez.

Az mpHands segítségével hívhatja meg a MediaPipe kézi megoldást, a hands objektum pedig a kézi bemenet észlelésére és nyomon követésére. Az mpDraw objektum segítségével megrajzolhatja az azonosított kezek tereptárgyai közötti kapcsolatokat.

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

Finomhangolhatja a MediaPipe kezek modelljét, ha különféle paramétereket ad át a Hands() konstruktornak. Az alapértelmezett értékek elég jók ehhez a projekthez, de kísérletezhet velük, hogy megtudja, hogyan befolyásolják a modellt:

Hagynod kell a static_image_mode hamisként, hogy biztosítsa, hogy a modell egyszer észlelje a kezeket, mielőtt elkezdi követni őket. Csak akkor ismétli meg a követési folyamatot, ha az észlelési megbízhatóság alacsonyabb, mint a deklarált paraméter, ami gyorsabbá teszi a teljes bemeneti feldolgozást.

Kézkövetés végrehajtása

A kézi követés végrehajtásához három funkcióra van szükség: az egyik a bemenet feldolgozásához, a másik a kézi tereptárgyak kapcsolatainak megrajzolásához és egy fő funkció a programfolyamat vezérléséhez.

Bemeneti feldolgozási funkció

Ez a funkció átveszi a bemenetet, szürkeárnyalatossá alakítja, és átadja a MediaPipe kézi modellnek, hogy észlelje és nyomon kövesse a bemenetben lévő mutatókat.

# A bemeneti kép feldolgozása
defprocess_image(img):
# A bemenet átalakítása szürkeárnyalatossá
gray_image = cv2.cvtColor (img, cv2.COLOR_BGR2RGB)
eredmények = hands.process (gray_image)

# Az észlelt kezek visszaállítása hívó funkcióba
Visszatérés eredmények

A függvény visszaadja az eredményeket, hogy voltak-e észlelt kezek a bemeneten.

A Handmark Connections Rajz funkció

Ez a funkció ellenőrzi, hogy a beviteli feldolgozás funkció észlelt-e kezet. Ha észlelt kezek vannak, minden tereptárgyon átfordul, és kört rajzol körülötte, nyomon követve a tereptárgyat a A Python felsorolás funkciója. Ezután megrajzolja a kapcsolatokat az eredeti videobemeneten lévő tereptárgyak között.

# Mérföldkőnek számító kapcsolatok rajzolása
defdraw_hand_connections(kép, eredmények):
ha results.multi_hand_landmarks:
számára handLms ban ben results.multi_hand_landmarks:
számára id, lm ban ben felsorol (handLms.landmark):
h, w, c = img.shape

# Az egyes tereptárgyak koordinátáinak megkeresése
cx, cy = int (lm.x * w), int (lm.y * h)

# Minden tereptárgy azonosítójának és koordinátájának kinyomtatása
# a terminálon
nyomtatás (id, cx, cy)

# Kör létrehozása minden tereptárgy körül
cv2.circle (img, (cx, cy), 10, (0, 255, 0),
cv2.FILLED)
# A mérföldkőnek számító kapcsolatok megrajzolása
mpDraw.draw_landmarks (img, handLms,
mpHands. HAND_CONNECTIONS)

Visszatérés img

A funkció az egyes tereptárgyak bekarikázásával kezdődik:

Ezután megrajzolja a kézi kapcsolatokat:

Végül visszaadja a kimenetét a hívó függvénynek.

A fő funkció

Hozzon létre egy fő funkciót, amely szabályozza a program folyamát. Fogja a bemenetet, és átméretezi a videokockát, hogy biztosítsa a kimenet konzisztenciáját. Adja át a bemenetet a feldolgozó funkciónak, amely ezután észleli és követi a kezeket. A visszaadott eredményeket vigye át a kézi tereptárgyak kapcsolatrajzi funkciójába, amely az eredeti videobemenetre rajzolja a kapcsolatot. Végül megjeleníti a kimenetet a felhasználó számára.

deffő-():
# Cserélje ki a 0-t a videó elérési útjával a használatához
# előre rögzített videó
cap = cv2.VideoCapture(0)

mígIgaz:
# A bemenet felvétele
siker, kép = cap.read()
kép = imutils.resize (kép, szélesség=500, magasság=500)
eredmények = process_image (kép)
draw_hand_connections (kép, eredmények)

# A kimenet megjelenítése
cv2.imshow("Kézi nyomkövető", kép)

# A program a q gomb megnyomásakor leáll
ha cv2.waitKey(1) == ord('q'):
cap.release()
cv2.destroyAllWindows()

Az utolsó lépés a program futtatása. Az alábbi kód biztosítja, hogy a program futtatásakor a fő funkció fusson először.

ha __név__ == "__fő__":
fő()

Amikor a program fut, a következő kimenetet állítja elő:

A program valós időben követi a kezeket.

Kézi követés a magával ragadó virtuális valóságért

A virtuális valóságban a kézi követés csábítóbbá teszi a technológiát. A virtuális valóság fejhallgatói elkezdték bevezetni a kézi követést, és a felfokozott valóság érzetét hozzák a virtuális világba. A headsetek lehetővé teszik a felhasználó számára, hogy virtuális kéz használatával parancsokat vigyen be.

A virtuális headsetek kézi követése ennek a technológiának csak egy alkalmazása. Kézi nyomkövetést beépíthet bármely tetszőleges területre.