Αναγνώστες σαν εσάς βοηθούν στην υποστήριξη του MUO. Όταν κάνετε μια αγορά χρησιμοποιώντας συνδέσμους στον ιστότοπό μας, ενδέχεται να κερδίσουμε μια προμήθεια θυγατρικών. Διαβάστε περισσότερα.

Μπορείτε να χρησιμοποιήσετε πολλά έργα για να ενισχύσετε τις δεξιότητές σας στην όραση υπολογιστών και την Python. Ένα από αυτά τα έργα είναι η δημιουργία ενός απλού μετρητή push-up χρησιμοποιώντας Python. Μπορείτε να γράψετε το πρόγραμμα αυτού του έργου σε ένα μόνο αρχείο.

Το πρόγραμμα θα λάβει μια είσοδο βίντεο ή μια είσοδο σε πραγματικό χρόνο από μια κάμερα, θα εκτελέσει εκτίμηση ανθρώπινης πόζας στην είσοδο και θα μετρήσει τον αριθμό των push-ups που κάνει το άτομο. Για να εκτελέσει εκτίμηση ανθρώπινης στάσης, το πρόγραμμα θα χρησιμοποιήσει το μοντέλο εκτίμησης ανθρώπινης στάσης MediaPipe.

Είναι ένα μοντέλο που αναπτύχθηκε από την Google που παρακολουθεί τριάντα τρία ορόσημα στο ανθρώπινο σώμα. Προβλέπει επίσης μια τμηματοποίηση ολόκληρου του σώματος την οποία αντιπροσωπεύει ως τμηματοποίηση δύο τάξεων. Η παρακάτω εικόνα δείχνει όλα τα ορόσημα που μπορεί να αναγνωρίσει το μοντέλο. Τα αριθμημένα σημεία προσδιορίζουν κάθε ορόσημο και συνδέονται μεταξύ τους με γραμμές.

instagram viewer

Πίστωση εικόνας: MediaPipe/GitHub

Το πρόγραμμα push-up counter θα χρησιμοποιήσει τις θέσεις των ώμων και των αγκώνων. Στην παραπάνω εικόνα, τα ορόσημα των ώμων είναι 11 και 12 ενώ τα ορόσημα του αγκώνα είναι 13 και 14.

Ρύθμιση του περιβάλλοντος σας

Θα πρέπει να είστε ήδη εξοικειωμένοι με τα βασικά της Python. Ανοίξτε ένα Python IDE και δημιουργήστε ένα νέο αρχείο Python. Εκτελέστε την ακόλουθη εντολή στο τερματικό για να εγκαταστήσετε τα αντίστοιχα πακέτα στο περιβάλλον σας:

pip εγκατάσταση OpenCV-Python

Θα χρησιμοποιήσετε το OpenCV-Python για να λάβετε την είσοδο βίντεο στο πρόγραμμά σας και να το επεξεργαστείτε. Αυτή η βιβλιοθήκη δίνει το πρόγραμμά σας δυνατότητες όρασης υπολογιστή.

pip εγκατάσταση MediaPipe

Θα χρησιμοποιήσετε το MediaPipe για να εκτελέσετε εκτίμηση ανθρώπινης πόζας στην είσοδο.

pip install imutils

Θα χρησιμοποιήσετε imutils για να αλλάξετε το μέγεθος της εισόδου βίντεο στο επιθυμητό πλάτος.

Εισαγάγετε τις τρεις βιβλιοθήκες που εγκαταστήσατε προηγουμένως στο περιβάλλον σας. Αυτό θα καταστήσει δυνατή τη χρήση των εξαρτήσεών τους στο έργο.

εισαγωγή cv2
εισαγωγή imutils
εισαγωγή mediapipe όπως και σ.τ

Στη συνέχεια, δημιουργήστε τρία αντικείμενα MediaPipe και αρχικοποιήστε τα χρησιμοποιώντας τις αντίστοιχες συναρτήσεις. Θα χρησιμοποιήσετε το mp.solutions.drawing_utilsfunction για να σχεδιάσετε τα διάφορα ορόσημα στην είσοδο. mp.solutions.drawing_styles για να αλλάξετε τα στυλ στα οποία εμφανίζονται τα σχέδια των ορόσημων και mp.solutions.pose ποιο είναι το μοντέλο που θα χρησιμοποιήσετε για να προσδιορίσετε αυτά τα ορόσημα.

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

Εκτέλεση της εκτίμησης ανθρώπινης στάσης

Η ανίχνευση της στάσης ενός ανθρώπου είναι η διαδικασία αναγνώρισης του προσανατολισμού του σώματός του με τον εντοπισμό και την ταξινόμηση των αρθρώσεων του.

Δήλωση των μεταβλητών σας

Δηλώστε τις μεταβλητές που θα χρησιμοποιήσετε για να αποθηκεύσετε τον αριθμό των pushups, τη θέση των ώμων και των αγκώνων και την είσοδο βίντεο.

καταμέτρηση = 0
θέση = Κανένας
cap = cv2.VideoCapture("v4.mp4")

Αρχικοποιήστε τη μεταβλητή θέσης σε Καμία. Το πρόγραμμα θα το ενημερώσει ανάλογα με τη θέση των αγκώνων και των ώμων.

Καλέστε το μοντέλο εκτίμησης στάσης MediaPipe το οποίο θα ανιχνεύσει την ανθρώπινη στάση στην είσοδο.

με mp_pose. Στάση(
ελάχιστη_ανίχνευση_εμπιστοσύνη = 0.7,
ελάχιστη_παρακολούθηση_σιγουριά = 0.7) όπως και στάση:

Οι αρχικοποιήσεις της εμπιστοσύνης ανίχνευσης και της εμπιστοσύνης παρακολούθησης αντιπροσωπεύουν το επίπεδο ακρίβειας που χρειάζεστε από το μοντέλο. Το 0,7 είναι παρόμοιο με το 70% ακρίβεια. Μπορείτε να το αλλάξετε στο επιθυμητό επίπεδο.

Λήψη και προεπεξεργασία της εισόδου

Πάρτε την είσοδο που θα μεταβιβάσετε αργότερα στο μοντέλο εκτίμησης πόζας. Αλλάξτε το μέγεθος του πλάτους της εισόδου βίντεο χρησιμοποιώντας τη βιβλιοθήκη imutils. Μετατρέψτε την είσοδο από BGR σε RGB καθώς το MediaPipe λειτουργεί μόνο με είσοδο RGB. Τέλος, περάστε τη μετατρεπόμενη είσοδο στο μοντέλο εκτίμησης ανθρώπινης στάσης για να προσδιορίσετε τα ορόσημα.

ενώ cap.isOpened():
επιτυχία, image=cap.read()

ανδεν επιτυχία:
Τυπώνω("κενή κάμερα")
Διακοπή

εικόνα = imutils.resize (εικόνα, πλάτος=500)
εικόνα = cv2.cvtColor (cv2.flip (εικόνα, 1), cv2.COLOR_BGR2RGB)
αποτέλεσμα = pose.process (εικόνα)

Μετά την επεξεργασία της εισαγωγής, έχετε αναγνωρίσει τα ορόσημα στην είσοδο.

Σχεδιάζοντας τα αναγνωρισμένα ορόσημα στην είσοδο

Δημιουργήστε μια κενή λίστα που θα αποθηκεύει τις συντεταγμένες κάθε ορόσημου. Χρησιμοποιήστε την κλάση draw_landmarks για να σχεδιάσετε μια κουκκίδα σε κάθε ορόσημο και τις μεταξύ τους συνδέσεις. Χρησιμοποιώντας έναν βρόχο for, επαναλάβετε τα ορόσημα και αποθηκεύστε το αναγνωριστικό και τις συντεταγμένες κάθε ορόσημου στη λίστα που δημιουργήσατε. Χρησιμοποιήστε την κλάση image.shape για να υπολογίσετε το πλάτος και το ύψος της εισόδου βίντεο.

lmList = []

αν result.pose_landmarks:
# Σχεδιάζει τα σημεία των ορόσημων και τα συνδέει
mp_draw.draw_landmarks (εικόνα, result.pose_landmarks,
mp_pose. POSE_CONNECTIONS)

Για id, im σε enumerate (result.pose_landmarks.landmark):
# Εύρεση του μήκους και του πλάτους της εισόδου βίντεο
h, w, _ = εικόνα.σχήμα

# Εύρεση των ακριβών συντεταγμένων των σημείων του σώματος
X, Y = int (im.x * w), int (im.y * h)
lmList.append([id, X, Y])

Το αναγνωριστικό είναι ο αριθμός που δίνεται σε ένα συγκεκριμένο ορόσημο από το μοντέλο εκτίμησης πόζας MediaPipe. Έχοντας εντοπίσει τη στάση του ανθρώπου στην είσοδο, πρέπει να μετρήσετε τον αριθμό των push-ups που κάνουν εάν υπάρχουν.

Μετρώντας τον αριθμό των Push-Ups

Δημιουργήστε μια κατάσταση που ελέγχει τη θέση των ώμων σε σχέση με τη θέση των αγκώνων. Όταν οι ώμοι του ατόμου στην είσοδο είναι ψηλότερα από τους αγκώνες, το άτομο είναι ψηλά. Όταν οι ώμοι είναι χαμηλότερα από τους αγκώνες, το άτομο είναι κάτω. Μπορείτε να το ελέγξετε αυτό συγκρίνοντας τα αναγνωριστικά των ορόσημων των ώμων με αυτά των ορόσημων των αγκώνων.

# Έλεγχος εάν υπάρχουν αναγνωρισμένα ορόσημα
αν len (lmList) != 0:
# Συνθήκη που προσδιορίζει την κάτω θέση
αν (lmList[12][2] και lmList[11][2] >= lmList[14][2] και lmList[13][2]):
θέση = "κάτω"

# Συνθήκη που προσδιορίζει την επάνω θέση
αν (lmList[12][2] και lmList[11][2] <= lmList[14][2] και lmList[13][2])
και θέση == "κάτω":
θέση = "πάνω"
μετρήστε +=1

Για να ολοκληρώσει ένα άτομο ένα πλήρες push-up, πρέπει να πάρει μια κάτω θέση και μετά να επιστρέψει στην επάνω θέση. Μετά από ένα πλήρες push-up, το πρόγραμμα μπορεί να ενημερώσει την καταμέτρηση κατά ένα.

Εμφάνιση της Εξόδου

Πρέπει να εμφανίσετε τον αριθμό των push-ups που έχει μετρήσει το πρόγραμμα. Εκτυπώστε την τιμή της καταμέτρησης στο τερματικό, κάθε φορά που ο χρήστης κάνει ένα πλήρες push-up. Τέλος, εμφανίστε την απόδοση του ατόμου που κάνει push-up με τα σημεία που σχεδιάζονται στο σώμα του.

 εκτύπωση (μέτρηση)

cv2.imshow("Push-up counter", cv2.flip (εικόνα, 1))
κλειδί = cv2.waitKey(1)

# Το πρόγραμμα τερματίζεται όταν πατηθεί το q
αν κλειδί == ord('q'):
Διακοπή

cap.release()

Η έξοδος θα πρέπει να μοιάζει κάπως έτσι:

Θα πρέπει να παρατηρήσετε μια ενημέρωση στο τερματικό καθώς το άτομο στην έξοδο κάνει ένα πλήρες push-up.

Ενισχύστε τις δεξιότητες όρασης στον υπολογιστή σας

Η όραση του υπολογιστή είναι ευρεία. Ο μετρητής push-up είναι ένα από τα πολλά έργα που μπορείτε να χρησιμοποιήσετε για να εφαρμόσετε τις δεξιότητές σας στην όραση του υπολογιστή σας. Ο καλύτερος τρόπος για να ενισχύσετε αυτές τις δεξιότητες είναι να δημιουργήσετε περισσότερα έργα που περιλαμβάνουν όραση υπολογιστή.

Όσο περισσότερα έργα θα φτιάξετε, τόσο περισσότερα θα μάθετε!