Tādi lasītāji kā jūs palīdz atbalstīt MUO. Veicot pirkumu, izmantojot saites mūsu vietnē, mēs varam nopelnīt filiāles komisiju. Lasīt vairāk.

Rokas izsekošana ir datorredzes izmantošanas process, lai reāllaikā noteiktu un sekotu cilvēka rokas kustībām. Dominējošākais roku izsekošanas lietojums ir virtuālās realitātes austiņās. Austiņas ļauj izmantot rokas kā ievadi skārienjutīgo kontrolleru vietā. Tas, savukārt, padara pieredzi aizraujošāku.

Uzziniet, kā izsekot personas rokām, izmantojot Python, OpenCV datora redzei un MediaPipe.

Google izstrādāja MediaPipe sistēmu, kurā ir daudz mašīnmācības risinājumu. Viens no risinājumiem ir roku un pirkstu izsekošanas risinājums, ko sauc MediaPipe rokas. Lai izsekotu rokas, MediaPipe Hands veic divus procesus: plaukstas noteikšanu un orientieru noteikšanu.

Rokas plaukstu noteikšana

MediaPipe sākas ar plaukstu atrašanās vietas noteikšanu ievades attēlā. Tā kā stīvu objektu ierobežojošo rūtiņu noteikšana ir vienkāršāka nekā roku identificēšana ar savienotiem pirkstiem.

instagram viewer

Rokas orientieru noteikšana

Pēc plaukstas noteikšanas MediaPipe veic rokas orientieru noteikšanu. Rokas orientiera modelis var paredzēt 21 precīzu katra rokas orientiera atrašanās vietas koordinātu.

Cipari ir katra orientiera unikāls identifikators.

Jūsu vides iestatīšana

Lai turpinātu darbu ar šo projektu, jums ir jāzina Python pamati. Instalējiet savā vidē šādas bibliotēkas:

  • OpenCV: jūs izmantosit šo bibliotēku datora redzei un ievades attēla attēlu apstrādes paņēmienu veikšanai.
  • MediaPipe: jūs izmantosit šo bibliotēku, lai veiktu rokas noteikšanu un izsekošanu ievades attēlam.
  • imutils: šī bibliotēka mainīs ievades video kadra izmēru.

Palaidiet šo komandu savā terminālī, lai instalētu OpenCV, MediaPipe un imutils bibliotēkas. Instalējiet pip — Python pakotņu pārvaldnieku- ja vajag. Nodrošiniet, lai bibliotēkas tiktu nodotas kā saraksts ar atstarpi.

pip instalēt OpenCV-Python MediaPipe imutils

Kad atjaunināšana ir pabeigta, vide ir gatava kodēšanas sākšanai.

Pilns šī projekta pirmkods ir pieejams tajā GitHub repozitorijs.

Nepieciešamo bibliotēku importēšana

Jums būs jāimportē instalētās bibliotēkas, lai tās varētu izmantot. Atveriet jebkuru Python IDE, izveidojiet Python failu un pievienojiet šādus importētos failus:

imports cv2
imports mediju caurule mp
imports imutils

Importējiet OpenCV kā cv2 un MediaPipe ar mazajiem burtiem. Ja tas netiks izdarīts, tiks parādīta kļūda.

Jūs izmantosit mpHands, lai izsauktu MediaPipe roku risinājumu, un rokas objektu, lai noteiktu un izsekotu rokas ievadi. Jūs izmantosiet objektu mpDraw, lai izveidotu savienojumus starp identificēto roku orientieriem.

mpHands = mp.solutions.hands
rokas = mpRokas. Rokas ()
mpDraw = mp.solutions.drawing_utils

Jūs varat precīzi noregulēt MediaPipe roku modeli, nododot dažādus parametrus Hands() konstruktoram. Noklusējuma vērtības šim projektam ir pietiekami labas, taču varat ar tām eksperimentēt, lai redzētu, kā tās ietekmē modeli:

Jums vajadzētu atstāt statiskā_attēla_režīms kā False, lai nodrošinātu, ka modelis vienreiz atpazīst rokas, pirms tas sāk to izsekot. Tas atkārto izsekošanas procesu tikai tad, ja noteikšanas ticamība ir zemāka par deklarēto parametru, padarot kopējo ievades apstrādi ātrāku.

Rokas izsekošanas veikšana

Lai veiktu manuālu izsekošanu, ir nepieciešamas trīs funkcijas: viena, lai apstrādātu ievadi, viena, lai zīmētu rokas orientierus, un galvenā funkcija, lai kontrolētu programmas plūsmu.

Ievades apstrādes funkcija

Šī funkcija ņem ievadi, pārvērš to pelēktoņos un nodod to MediaPipe roku modelim, lai noteiktu un izsekotu ievadē esošās rokas.

# Notiek ievades attēla apstrāde
defprocess_image(attēls):
# Ievades pārveidošana pelēktoņos
gray_image = cv2.cvtColor (img, cv2.COLOR_BGR2RGB)
rezultāti = hands.process (grey_image)

# Noteikto roku atgriešana zvanīšanas funkcijai
atgriezties rezultātus

Funkcija atgriež rezultātus par to, vai ievadei ir konstatētas rokas.

Rokas orientiera savienojumu zīmēšanas funkcija

Šī funkcija pārbauda, ​​vai ievades apstrādes funkcija ir atklājusi rokas. Ja tiek atklātas kādas rokas, tas griežas pāri katram orientierim un apvelk to apli, sekojot līdzi orientierim, izmantojot Python uzskaitīšanas funkcija. Pēc tam tas izveido savienojumus starp orientieriem sākotnējā video ieejā.

# Orientējošu savienojumu zīmēšana
defdraw_hand_connections(attēls, rezultāti):
ja results.multi_hand_landmarks:
priekš handLms iekšā results.multi_hand_landmarks:
priekš id, lm iekšā uzskaitīt (handLms.landmark):
h, w, c = img.shape

# Katra orientiera koordinātu atrašana
cx, cy = int (lm.x * w), int (lm.y * h)

# Katra orientiera ID un koordinātu drukāšana
# terminālī
drukāt (id, cx, cy)

# Izveidojiet apli ap katru orientieri
cv2.circle (img, (cx, cy), 10, (0, 255, 0),
cv2.FILLED)
# Iezīmējošo savienojumu zīmēšana
mpDraw.draw_landmarks (img, handLms,
mpHands. HAND_CONNECTIONS)

atgriezties img

Funkcija sākas, apvelkot katru orientieri:

Pēc tam tas uzzīmē rokas savienojumus:

Beidzot tas atgriež savu izvadi zvanīšanas funkcijai.

Galvenā funkcija

Izveidojiet galveno funkciju, kas kontrolēs jūsu programmas plūsmu. Tas izmantos ievadi un mainīs video kadra izmēru, lai nodrošinātu izvades konsekvenci. Nododiet ievadi apstrādes funkcijai, kas pēc tam atklās un izsekos rokas. Pārvietojiet atgrieztos rezultātus uz rokas orientieru savienojuma zīmēšanas funkciju, kas izveidos savienojumu oriģinālajā video ieejā. Tas beidzot parādīs lietotājam izvadi.

defgalvenais():
# Aizstāt 0 ar video ceļu, lai izmantotu a
# iepriekš ierakstīts videoklips
cap = cv2.VideoCapture(0)

kamērTaisnība:
# Ievades datu ņemšana
panākumi, attēls = cap.read()
attēls = imutils.resize (attēls, platums =500, augstums=500)
rezultāti = process_image (attēls)
draw_hand_connections (attēls, rezultāti)

# Parāda izvadi
cv2.imshow("Rokas izsekotājs", attēls)

# Programma tiek pārtraukta, kad tiek nospiests taustiņš q
ja cv2.waitKey(1) == ord('q'):
cap.release()
cv2.destroyAllWindows()

Pēdējais solis ir programmas palaišana. Tālāk norādītais kods nodrošina, ka, palaižot programmu, galvenā funkcija tiek palaista pirmā.

ja __nosaukums__ == "__galvenais__":
galvenais ()

Kad programma darbojas, tā rada šādu izvadi:

Programma izseko rokas reāllaikā.

Rokas izsekošana iespaidīgai virtuālajai realitātei

Rokas izsekošana virtuālajā realitātē padara tehnoloģiju pievilcīgāku. Virtuālās realitātes austiņas ir sākušas ieviest roku izsekošanu, ienesot virtuālajā pasaulē paaugstinātas realitātes sajūtu. Austiņas ļauj lietotājam ievadīt komandas, izmantojot virtuālo roku.

Rokas izsekošana virtuālajās austiņās ir tikai viens šīs tehnoloģijas lietojums. Varat iekļaut roku izsekošanu jebkurā piemērotā apgabalā, kas jums patīk.