Website-Suche

Zählen Sie Liegestütze mit Python und der Kamera Ihres Computers


Erfahren Sie, wie Sie ein Programm schreiben, das Sie beim Training beobachtet und die Ergebnisse zählt.

Sie können viele Projekte nutzen, um Ihre Fähigkeiten in Computer Vision und Python zu stärken. Eines dieser Projekte ist die Erstellung eines einfachen Push-Up-Zählers mit Python. Sie können das Programm dieses Projekts in einer einzigen Datei schreiben.

Das Programm nimmt eine Videoeingabe oder eine Echtzeiteingabe von einer Kamera entgegen, führt anhand der Eingabe eine Schätzung der menschlichen Pose durch und zählt die Anzahl der Liegestütze, die die Person macht. Um eine Schätzung der menschlichen Pose durchzuführen, verwendet das Programm das MediaPipe-Modell zur Schätzung der menschlichen Pose.

Was ist das MediaPipe-Modell zur Schätzung der menschlichen Pose?

Dabei handelt es sich um ein von Google entwickeltes Modell, das 33 Orientierungspunkte am menschlichen Körper verfolgt. Es sagt auch eine Ganzkörpersegmentierung voraus, die es als Zwei-Klassen-Segmentierung darstellt. Das folgende Bild zeigt alle Orientierungspunkte, die das Modell identifizieren kann. Nummerierte Punkte kennzeichnen jeden Orientierungspunkt und verbinden ihn durch Linien miteinander.

Ihr Liegestütz-Konterprogramm nutzt die Positionen der Schultern und Ellbogen. Im obigen Bild sind die Orientierungspunkte für die Schulter 11 und 12, während die Orientierungspunkte für den Ellenbogen 13 und 14 sind.

Einrichten Ihrer Umgebung

Sie sollten bereits mit den Grundlagen von Python vertraut sein. Öffnen Sie eine Python-IDE und erstellen Sie eine neue Python-Datei. Führen Sie den folgenden Befehl auf dem Terminal aus, um die entsprechenden Pakete in Ihrer Umgebung zu installieren:

pip install OpenCV-Python

Sie verwenden OpenCV-Python , um die Videoeingabe in Ihr Programm aufzunehmen und zu verarbeiten. Diese Bibliothek verleiht Ihrem Programm Computer-Vision-Funktionen.

pip install MediaPipe

Sie verwenden MediaPipe, um anhand der Eingabe eine Schätzung der menschlichen Pose durchzuführen.

pip install imutils

Sie verwenden imutils, um die Größe des Videoeingangs auf die gewünschte Breite zu ändern.

Importe und MediaPipe-Initialisierungen

Importieren Sie die drei Bibliotheken, die Sie zuvor in Ihrer Umgebung installiert haben. Dadurch wird es möglich, ihre Abhängigkeiten im Projekt zu nutzen.

import cv2
import imutils
import mediapipe as mp

Anschließend erstellen Sie drei MediaPipe-Objekte und initialisieren diese mit den entsprechenden Funktionen. Sie verwenden die Funktion mp.solutions.drawing_utils , um die verschiedenen Orientierungspunkte auf der Eingabe zu zeichnen. mp.solutions.drawing_styles zum Ändern der Stile, in denen die Zeichnungen der Orientierungspunkte angezeigt werden, und mp.solutions.pose, das Modell, das Sie zum Identifizieren dieser Orientierungspunkte verwenden.

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

Durchführen der Schätzung der menschlichen Pose

Beim Erkennen der Körperhaltung eines Menschen wird dessen Körperausrichtung durch die Identifizierung und Klassifizierung seiner Gelenke ermittelt.

Deklarieren Sie Ihre Variablen

Deklarieren Sie die Variablen, die Sie zum Speichern der Anzahl der Liegestütze, der Position der Schultern und Ellbogen sowie der Videoeingabe verwenden.

count = 0
position = None
cap = cv2.VideoCapture("v4.mp4")

Initialisieren Sie die Positionsvariable auf „Keine“. Das Programm aktualisiert es abhängig von der Position der Ellbogen und Schultern.

Aufruf des MediaPipe-Pose-Schätzmodells

Rufen Sie das MediaPipe-Posenschätzungsmodell auf, das die menschliche Pose in der Eingabe erkennt.

with mp_pose.Pose(
    min_detection_confidence = 0.7,
    min_tracking_confidence = 0.7) as pose:

Die Initialisierungen der Erkennungskonfidenz und der Verfolgungskonfidenz stellen den Genauigkeitsgrad dar, den Sie vom Modell benötigen. 0,7 entspricht einer Genauigkeit von 70 %. Sie können es auf Ihr gewünschtes Niveau ändern.

Eingaben erfassen und vorverarbeiten

Nehmen Sie die Eingabe, die Sie später an das Posenschätzungsmodell übergeben. Ändern Sie die Breite des Videoeingangs mithilfe der Imutils-Bibliothek. Konvertieren Sie die Eingabe von BGR in RGB, da MediaPipe nur mit RGB-Eingaben funktioniert. Übergeben Sie abschließend die konvertierte Eingabe an das Modell zur Schätzung der menschlichen Pose, um die Orientierungspunkte zu identifizieren.

while cap.isOpened():
    success, image=cap.read()
    if not success:
        print("empty camera")
        break
    image = imutils.resize(image, width=500)
    image = cv2.cvtColor(cv2.flip(image, 1), cv2.COLOR_BGR2RGB)
    result = pose.process(image)

Nach der Verarbeitung der Eingabe haben Sie die Orientierungspunkte auf der Eingabe identifiziert.

Zeichnen der identifizierten Orientierungspunkte auf der Eingabe

Erstellen Sie eine leere Liste, in der die Koordinaten jedes Orientierungspunkts gespeichert werden. Verwenden Sie die Klasse draw_landmarks, um einen Punkt auf jedem Orientierungspunkt und den Verbindungen zwischen ihnen zu zeichnen. Durchlaufen Sie mithilfe einer for-Schleife die Orientierungspunkte und speichern Sie die ID und Koordinaten jedes Orientierungspunkts in der von Ihnen erstellten Liste. Verwenden Sie die Klasse image.shape, um die Breite und Höhe der Videoeingabe zu berechnen.

lmList = []
if result.pose_landmarks:
    # Draws the landmarks' points and connects them
    mp_draw.draw_landmarks(image, result.pose_landmarks,
                               mp_pose.POSE_CONNECTIONS)
    for id, im in enumerate(result.pose_landmarks.landmark):
        # Finding the length and width of the video input
        h, w, _ = image.shape
        # Finding the exact coordinates of the body points
        X, Y = int(im.x * w), int(im.y * h)
        lmList.append([id, X, Y])

Die ID ist die Nummer, die einem bestimmten Orientierungspunkt vom MediaPipe-Posenschätzungsmodell zugewiesen wird. Nachdem Sie die Pose des Menschen in der Eingabe identifiziert haben, müssen Sie gegebenenfalls die Anzahl der Liegestütze zählen, die er macht.

Zählen der Anzahl der Liegestütze

Erstellen Sie eine Bedingung, die die Position der Schultern mit der Position der Ellbogen vergleicht. Wenn die Schultern der Person in der Eingabe höher als die Ellbogen sind, befindet sich die Person oben. Wenn die Schultern tiefer als die Ellenbogen sind, liegt die Person unten. Sie überprüfen dies, indem Sie die IDs der Orientierungspunkte der Schultern mit denen der Orientierungspunkte der Ellenbogen vergleichen.

# Checking whether there are any identified landmarks
if len(lmList) != 0:
    # Condition that identifies the down position
    if (lmList[12][2] and lmList[11][2] >= lmList[14][2] and lmList[13][2]):
        position = "down"
    # Condition that identifies the up position
    if (lmList[12][2] and lmList[11][2] <= lmList[14][2] and lmList[13][2])
    and position == "down":
         position = "up"
         count +=1

Damit eine Person einen vollständigen Liegestütz ausführen kann, muss sie eine untere Position einnehmen und dann in die obere Position zurückkehren. Nach einem vollständigen Push-Up kann das Programm die Zählung um eins aktualisieren.

Ausgabe anzeigen

Sie müssen die Anzahl der Liegestütze anzeigen, die das Programm gezählt hat. Drucken Sie den Wert der Zählung jedes Mal auf dem Terminal aus, wenn der Benutzer einen vollständigen Push-up ausführt. Zeigen Sie abschließend die Leistung der Person an, die Liegestütze macht, indem Sie die Orientierungspunkte auf ihren Körper zeichnen.

            print(count)
    cv2.imshow("Push-up counter", cv2.flip(image, 1))
    key = cv2.waitKey(1)
    # Program terminates when q is pressed
    if key == ord('q'):
        break
cap.release()

Die Ausgabe sollte etwa so aussehen:

Sie sollten eine Aktualisierung am Terminal beobachten, da die Person am Ausgang einen vollständigen Liegestütz ausführt.

Stärken Sie Ihre Computer Vision-Fähigkeiten

Computer Vision ist breit gefächert. Ein Liegestützzähler ist eines der vielen Projekte, mit denen Sie Ihre Computer-Vision-Fähigkeiten in die Praxis umsetzen können. Der beste Weg, diese Fähigkeiten zu stärken, besteht darin, mehr Projekte zu entwickeln, die Computer Vision beinhalten.

Je mehr Projekte Sie erstellen, desto mehr werden Sie lernen!

Verwandte Artikel: