Kaltaisesi lukijat auttavat tukemaan MUO: ta. Kun teet ostoksen käyttämällä sivustollamme olevia linkkejä, voimme ansaita kumppanipalkkion. Lue lisää.

Voit käyttää monia projekteja vahvistaaksesi taitojasi tietokonenäön ja Pythonin alalla. Yksi näistä projekteista on yksinkertaisen push-up-laskurin luominen Pythonilla. Voit kirjoittaa tämän projektin ohjelman yhteen tiedostoon.

Ohjelma ottaa videosisääntulon tai reaaliaikaisen tulon kamerasta, suorittaa ihmisen asennon arvioinnin tulolle ja laskee henkilön tekemien punnerruuksien lukumäärän. Ihmisen asennon arvioinnissa ohjelma käyttää MediaPipe-ihmisasentoarviointimallia.

Se on Googlen kehittämä malli, joka seuraa 33 maamerkkiä ihmiskehossa. Se ennustaa myös koko kehon segmentoinnin, jota se edustaa kahden luokan segmentointina. Seuraava kuva näyttää kaikki maamerkit, jotka malli pystyy tunnistamaan. Numeroidut pisteet tunnistavat jokaisen maamerkin ja liittyvät toisiinsa viivoilla.

Kuvan luotto: MediaPipe/GitHub

Push-up-laskuriohjelmasi hyödyntää hartioiden ja kyynärpäiden asentoa. Yllä olevassa kuvassa olkapäät ovat 11 ja 12, kun taas kyynärpään maamerkit ovat 13 ja 14.

instagram viewer

Ympäristösi luominen

Sinun pitäisi olla jo tuttu Pythonin perusteet. Avaa Python IDE ja luo uusi Python-tiedosto. Suorita seuraava komento päätteessä asentaaksesi vastaavat paketit ympäristöösi:

pip asennus OpenCV-Python

Käytät OpenCV-Pythontia ottamaan videosyötteen ohjelmassasi ja käsittelemään sen. Tämä kirjasto tarjoaa ohjelman tietokonenäön ominaisuudet.

pip asennus MediaPipe

Käytät MediaPipeä ihmisen asennon arvioimiseen syötteelle.

pip install imutils

Käytät imutileja muuttaaksesi videotulon kokoa haluamaasi leveyteen.

Tuo kolme kirjastoa, jotka olet aiemmin asentanut ympäristöösi. Tämä mahdollistaa heidän riippuvuuksiensa käytön projektissa.

tuonti cv2
tuonti imutils
tuonti mediapipe kuten sp

Luo sitten kolme MediaPipe-objektia ja alusta ne vastaavilla funktioilla. Käytät mp.solutions.drawing_utilsfunction-funktiota erilaisten maamerkkien piirtämiseen tuloon. mp.solutions.drawing_styles muuttaa tyylejä, joissa maamerkkien piirustukset näkyvät, ja mp.solutions.pose, jota käytät näiden maamerkkien tunnistamiseen.

mp_draw = mp.solutions.drawing_utils
mp_draw_styles = mp.solutions.drawing_styles
mp_pose = mp.solutions.pose

Ihmisasennon arvioinnin suorittaminen

Ihmisen asennon havaitseminen on prosessi, jossa tunnistetaan hänen kehonsa suuntaus tunnistamalla ja luokittelemalla nivelet.

Muuttujien ilmoittaminen

Ilmoita muuttujat, joita käytät punnerrusten lukumäärän, olkapäiden ja kyynärpäiden sijainnin sekä videotulon tallentamiseen.

laske = 0
asema = Ei mitään
cap = cv2.VideoCapture("v4.mp4")

Alusta sijaintimuuttujan arvoksi Ei mitään. Ohjelma päivittää sen kyynärpäiden ja hartioiden asennon mukaan.

Kutsu MediaPipe-asennon arviointimalli, joka havaitsee ihmisen asennon syötteestä.

kanssa mp_pose. Aiheuttaa(
min_tunnistuksen_luottamus = 0.7,
min_tracking_ luottamus = 0.7) kuten aiheuttaa:

Havaitsemisluottamuksen ja seurantaluottamuksen alustukset edustavat mallilta tarvitsemaasi tarkkuustasoa. 0,7 vastaa 70 %:n tarkkuutta. Voit muuttaa sen haluamallesi tasolle.

Syötteen ottaminen ja esikäsittely

Ota syöte, jonka siirrät myöhemmin asennonarviointimalliin. Muuta videotulon leveyttä käyttämällä imutils-kirjastoa. Muunna tulo BGR: stä RGB: ksi, koska MediaPipe toimii vain RGB-tulon kanssa. Välitä lopuksi muunnettu syöte ihmisen asennon arviointimalliin maamerkkien tunnistamiseksi.

sillä aikaa cap.isOpened():
menestys, image=cap.read()

josei menestys:
Tulosta("tyhjä kamera")
tauko

kuva = imutils.resize (kuva, leveys=500)
kuva = cv2.cvtColor (cv2.flip (kuva, 1), cv2.COLOR_BGR2RGB)
tulos = pose.process (kuva)

Kun olet käsitellyt syötteen, olet tunnistanut syötteen maamerkit.

Tunnistettujen maamerkkien piirtäminen tuloon

Luo tyhjä luettelo, joka tallentaa kunkin maamerkin koordinaatit. Käytä draw_landmarks-luokkaa piirtääksesi pisteen jokaiseen maamerkkiin ja niiden välisiin yhteyksiin. Käytä for-silmukkaa, iteroi maamerkkien yli ja tallenna kunkin maamerkin tunnus ja koordinaatit luomaasi luetteloon. Käytä image.shape-luokkaa laskeaksesi videotulon leveyden ja korkeuden.

lmList = []

jos result.pose_landmarks:
# Piirtää maamerkkien pisteet ja yhdistää ne
mp_draw.draw_landmarks (image, result.pose_landmarks,
mp_pose. POSE_CONNECTIONS)

varten id, im sisään luetella (result.pose_landmarks.landmark):
# Videotulon pituuden ja leveyden löytäminen
h, w, _ = kuva.muoto

# Kehon pisteiden tarkan koordinaatin löytäminen
X, Y = int (im.x * w), int (im.y * h)
lmList.append([id, X, Y])

Tunnus on MediaPipe-asennonarviointimallin tietylle maamerkille antama numero. Kun olet tunnistanut syötteessä olevan ihmisen asennon, sinun on laskettava mahdollisten punnerrusten määrä.

Push-Uppien määrän laskeminen

Luo ehto, joka vertaa hartioiden asentoa kyynärpäiden asentoon. Kun syötettävän henkilön hartiat ovat kyynärpäitä korkeammalla, henkilö on ylhäällä. Kun hartiat ovat kyynärpäitä alempana, henkilö on alhaalla. Tarkistat tämän vertaamalla olkapäiden maamerkkien tunnuksia kyynärpäiden maamerkkien tunnuksiin.

# Tarkistaa, onko tunnistettuja maamerkkejä
jos len (lmList) != 0:
# Ehto, joka tunnistaa ala-asennon
jos (lmList[12][2] ja lmList[11][2] >= lmList[14][2] ja lmList[13][2]):
asema = "alas"

# Ehto, joka ilmaisee yläasennon
jos (lmList[12][2] ja lmList[11][2] <= lmList[14][2] ja lmList[13][2])
ja asema == "alas":
asema = "ylös"
laske +=1

Jotta henkilö voi suorittaa yhden täyden punnerrusta, hänen on otettava ala-asento ja palattava sitten yläasentoon. Täydellisen painalluksen jälkeen ohjelma voi päivittää laskennan yhdellä.

Ulostulon näyttäminen

Sinun on näytettävä ohjelman laskemien punnerrusten määrä. Tulosta luvun arvo päätteelle aina, kun käyttäjä tekee täyden punnerrusta. Lopuksi näytä punnerruksia tekevän henkilön tulos ja maamerkit piirrettynä hänen kehoonsa.

 tulostaa (laskea)

cv2.imshow("Push-up laskuri", cv2.flip (kuva, 1))
avain = cv2.waitKey(1)

# Ohjelma päättyy, kun q painetaan
jos avain == ord('q'):
tauko

cap.release()

Tulosteen pitäisi näyttää suunnilleen tältä:

Sinun tulisi tarkkailla päivitystä terminaalissa, kun ulostulossa oleva henkilö tekee täydellisen push-up-työn.

Vahvista tietokonenäön taitojasi

Tietokonenäkökulma on laaja. Push-up-laskuri on yksi monista projekteista, joiden avulla voit toteuttaa tietokonenäkötaitosi käytännössä. Paras tapa vahvistaa näitä taitoja on rakentaa lisää projekteja, joihin liittyy tietokonenäköä.

Mitä enemmän projekteja rakennat, sitä enemmän opit!