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.
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.
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!