Varat izmantot daudzus projektus, lai stiprinātu savas prasmes datorredzē un Python. Viens no šiem projektiem ir vienkārša push-up skaitītāja izveide, izmantojot Python. Jūs varat rakstīt šī projekta programmu vienā failā.
Programma ņems video vai reāllaika ievadi no kameras, veiks cilvēka pozas aprēķinu ievadei un saskaitīs atspiešanos skaitu, ko persona veic. Lai veiktu cilvēka pozas novērtēšanu, programma izmantos MediaPipe cilvēka pozas novērtēšanas modeli.
Tas ir Google izstrādāts modelis, kas izseko trīsdesmit trīs cilvēka ķermeņa orientierus. Tas arī paredz visa ķermeņa segmentāciju, ko tas attēlo kā divu klašu segmentāciju. Nākamajā attēlā ir parādīti visi orientieri, kurus modelis spēj identificēt. Numurēti punkti identificē katru orientieri un savieno viens ar otru ar līnijām.
Jūsu push-up skaitītāju programma izmantos plecu un elkoņu pozīcijas. Iepriekš redzamajā attēlā plecu orientieri ir 11 un 12, bet elkoņa orientieri ir 13 un 14.
Jūsu vides iestatīšana
Jums jau vajadzētu būt pazīstamam Python pamati. Atveriet Python IDE un izveidojiet jaunu Python failu. Terminālī palaidiet šo komandu, lai savā vidē instalētu attiecīgās pakotnes:
pip instalēt OpenCV-Python
Jūs izmantosiet OpenCV-Python, lai savā programmā uzņemtu video ievadi un apstrādātu to. Šī bibliotēka sniedz jūsu programmu datora redzes iespējas.
pip instalēt MediaPipe
Jūs izmantosiet MediaPipe, lai veiktu cilvēka pozas novērtēšanu ievadē.
pip install imutils
Jūs izmantosiet imutils, lai mainītu video ievades izmērus vēlamajā platumā.
Importējiet trīs bibliotēkas, kuras iepriekš instalējāt savā vidē. Tas ļaus projektā izmantot viņu atkarības.
imports cv2
imports imutils
imports mediju caurule kā mp
Pēc tam izveidojiet trīs MediaPipe objektus un inicializējiet tos, izmantojot attiecīgās funkcijas. Jūs izmantosiet funkciju mp.solutions.drawing_utils, lai uzzīmētu dažādus orientierus ievadē. mp.solutions.drawing_styles, lai mainītu stilus, kādos tiek parādīti orientieru zīmējumi, un mp.solutions.pose, kas ir modelis, kuru izmantosit, lai identificētu šos orientierus.
mp_draw = mp.solutions.drawing_utils
mp_draw_styles = mp.solutions.drawing_styles
mp_pose = mp.solutions.pose
Cilvēka pozas noteikšanas veikšana
Cilvēka pozas noteikšana ir ķermeņa orientācijas noteikšanas process, identificējot un klasificējot locītavas.
Mainīgo deklarēšana
Deklarējiet mainīgos lielumus, kurus izmantosit, lai saglabātu atspiešanos skaitu, plecu un elkoņu stāvokli un video ievadi.
skaits = 0
pozīcija = Nav
cap = cv2.VideoCapture("v4.mp4")
Inicializējiet pozīcijas mainīgo uz Nav. Programma to atjauninās atkarībā no elkoņu un plecu stāvokļa.
Izsauciet MediaPipe pozas novērtēšanas modeli, kas ievadē atklās cilvēka pozu.
ar mp_pose. poza(
min_detection_dependent = 0.7,
min_tracking_uzticamība = 0.7) kā poza:
Noteikšanas ticamības un izsekošanas ticamības inicializācijas atspoguļo modelim nepieciešamo precizitātes līmeni. 0,7 ir līdzīga 70% precizitātei. Varat to mainīt uz vēlamo līmeni.
Ievadītās informācijas ņemšana un pirmapstrāde
Izmantojiet ievadi, ko vēlāk nodosit pozas aplēses modelim. Mainiet video ievades platumu, izmantojot imutils bibliotēku. Konvertējiet ievadi no BGR uz RGB, jo MediaPipe darbojas tikai ar RGB ievadi. Visbeidzot, nododiet pārveidoto ievadi cilvēka pozas novērtēšanas modelim, lai identificētu orientierus.
kamēr cap.isOpened():
panākumi, image=cap.read()janē panākumi:
drukāt ("tukša kamera")
pārtraukums
attēls = imutils.resize (attēls, platums =500)
attēls = cv2.cvtColor (cv2.flip (attēls, 1), cv2.COLOR_BGR2RGB)
rezultāts = poza.process (attēls)
Pēc ievades apstrādes esat identificējis ievades orientierus.
Identificēto orientieru zīmēšana uz ievades
Izveidojiet tukšu sarakstu, kurā tiks saglabātas katra orientiera koordinātas. Izmantojiet drag_landmarks klasi, lai uzzīmētu punktu katram orientierim un savienojumiem starp tiem. Izmantojot for cilpu, atkārtojiet orientierus un saglabājiet katra orientiera ID un koordinātas izveidotajā sarakstā. Izmantojiet klasi image.shape, lai aprēķinātu video ievades platumu un augstumu.
lmList = []
ja result.pose_landmarks:
# Uzzīmē orientieru punktus un savieno tos
mp_draw.draw_landmarks (image, result.pose_landmarks,
mp_pose. POSE_CONNECTIONS)priekš id, im iekšā uzskaitīt (result.pose_landmarks.landmark):
# Video ievades garuma un platuma atrašana
h, w, _ = attēls.forma
# Precīzu ķermeņa punktu koordinātu atrašana
X, Y = int (im.x * w), int (im.y * h)
lmList.append([id, X, Y])
ID ir numurs, ko MediaPipe pozas novērtēšanas modelis piešķir konkrētam orientierim. Kad ievadē ir identificēta cilvēka poza, jums jāsaskaita, cik atspiešanos viņš veic, ja tādi ir.
Atspiešanās sitienu skaita skaitīšana
Izveidojiet nosacījumu, kas pārbauda plecu stāvokli pret elkoņu stāvokli. Kad ievadītā cilvēka pleci ir augstāki par elkoņiem, persona ir augšā. Kad pleci ir zemāki par elkoņiem, cilvēks atrodas uz leju. Varat to pārbaudīt, salīdzinot plecu orientieru ID ar elkoņu orientieriem.
# Pārbauda, vai nav identificēti orientieri
ja len (lmList) != 0:
# Nosacījums, kas identificē leju pozīciju
ja (lmList[12][2] un lmList[11][2] >= lmList[14][2] un lmList[13][2]):
pozīcija = "lejā"
# Nosacījums, kas identificē augšējo pozīciju
ja (lmList[12][2] un lmList[11][2] <= lmList[14][2] un lmList[13][2])
un pozīcija == "lejā":
pozīcija = "augšā"
skaits +=1
Lai cilvēks varētu veikt vienu pilnu atspiešanos, viņam ir jāieņem pozīcija uz leju un pēc tam jāatgriežas augšējā pozīcijā. Pēc pilnīgas push-up programma var atjaunināt skaitu par vienu.
Izvades parādīšana
Jums jāparāda programmas saskaitīto atspiešanos skaits. Izdrukājiet skaitīšanas vērtību terminālī, katru reizi, kad lietotājs veic pilnīgu atspiešanos. Visbeidzot, parādiet personas, kas veic atspiešanos, rezultātus ar orientieriem, kas uzzīmēti uz viņa ķermeņa.
drukāt (skaitīt)
cv2.imshow("Atspiešanās skaitītājs", cv2.flip (attēls, 1))
atslēga = cv2.waitKey(1)# Programma tiek pārtraukta, kad tiek nospiests q
ja taustiņš == ord('q'):
pārtraukums
cap.release()
Izvadei vajadzētu izskatīties apmēram šādi:
Jums vajadzētu novērot termināļa atjauninājumu, jo persona, kas atrodas izvadā, veic pilnīgu atspiešanos.
Nostipriniet savas datora redzes prasmes
Datora redze ir plaša. Push-up skaitītājs ir viens no daudzajiem projektiem, ko varat izmantot, lai praksē izmantotu savas datorredzes prasmes. Labākais veids, kā nostiprināt šīs prasmes, ir veidot vairāk projektu, kas ietver datora redzi.
Jo vairāk projektu veidosit, jo vairāk uzzināsit!