Sie können viele Projekte nutzen, um Ihre Fähigkeiten in Computer Vision und Python zu stärken. Eines dieser Projekte erstellt einen einfachen Push-Up-Counter mit Python. Sie können das Programm dieses Projekts in eine einzige Datei schreiben.
Das Programm nimmt eine Videoeingabe oder eine Echtzeiteingabe von einer Kamera, führt eine Schätzung der menschlichen Pose an der Eingabe durch und zählt die Anzahl der Liegestütze, die die Person macht. Um die Schätzung der menschlichen Pose durchzuführen, verwendet das Programm das MediaPipe-Modell zur Schätzung der menschlichen Pose.
Es ist ein von Google entwickeltes Modell, das dreiunddreißig 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 identifizieren jeden Orientierungspunkt und sind durch Linien miteinander verbunden.
Ihr Liegestütz-Counter-Programm nutzt die Positionen der Schultern und Ellbogen. Im obigen Bild sind die Schultermarkierungen 11 und 12, während die Ellbogenmarkierungen 13 und 14 sind.
Einrichten Ihrer Umgebung
Sie sollten bereits vertraut sein die Grundlagen von Python. Ö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 installiert OpenCV-Python
Sie verwenden OpenCV-Python, um die Videoeingabe in Ihrem Programm zu übernehmen und zu verarbeiten. Diese Bibliothek gibt Ihr Programm Computer-Vision-Fähigkeiten.
pip installiert MediaPipe
Sie verwenden MediaPipe, um die menschliche Posenschätzung für die Eingabe durchzuführen.
pip imutils installieren
Sie verwenden imutils, um die Größe des Videoeingangs auf die gewünschte Breite zu ändern.
Importieren Sie die drei Bibliotheken, die Sie zuvor in Ihrer Umgebung installiert haben. Dadurch wird es möglich, ihre Abhängigkeiten im Projekt zu verwenden.
importieren Lebenslauf2
importieren Imutile
importieren mediapipe als MP
Erstellen Sie dann drei MediaPipe-Objekte und initialisieren Sie diese mit den jeweiligen Funktionen. Sie verwenden mp.solutions.drawing_utilsfunction, um die verschiedenen Orientierungspunkte auf der Eingabe zu zeichnen. mp.solutions.drawing_styles, um die Stile zu ändern, in denen die Zeichnungen der Orientierungspunkte angezeigt werden, und mp.solutions.pose, das ist das Modell, das Sie verwenden, um diese Orientierungspunkte zu identifizieren.
mp_draw = mp.solutions.drawing_utils
mp_draw_styles = mp.solutions.Zeichnungsstile
mp_pose = mp.solutions.pose
Durchführen der Schätzung der menschlichen Pose
Die Erkennung der Pose eines Menschen ist der Prozess der Identifizierung seiner Körperorientierung durch Identifizierung und Klassifizierung seiner Gelenke.
Deklarieren Ihrer Variablen
Deklarieren Sie die Variablen, die Sie verwenden werden, um die Anzahl der Liegestütze, die Position der Schultern und Ellbogen und den Videoeingang zu speichern.
zählen = 0
Stelle = Keiner
cap = cv2.VideoCapture ("v4.mp4")
Initialisieren Sie die Positionsvariable auf None. Das Programm wird es abhängig von der Position der Ellbogen und Schultern aktualisieren.
Rufen Sie das MediaPipe-Poseschätzungsmodell auf, das die menschliche Pose in der Eingabe erkennt.
mit mp_pose. Pose(
min_detection_confidence = 0.7,
min_tracking_confidence = 0.7) als Pose:
Die Initialisierungen der Erkennungskonfidenz und der Verfolgungskonfidenz stellen den Genauigkeitsgrad dar, den Sie für das Modell benötigen. 0,7 entspricht einer Genauigkeit von 70 %. Sie können es auf Ihr gewünschtes Niveau ändern.
Aufnahme und Vorverarbeitung der Eingabe
Nehmen Sie die Eingabe, die Sie später an das Posenschätzungsmodell übergeben werden. Passen Sie die Breite des Videoeingangs mithilfe der imutils-Bibliothek an. Konvertieren Sie die Eingabe von BGR in RGB, da MediaPipe nur mit RGB-Eingabe funktioniert. Übergeben Sie schließlich die konvertierte Eingabe an das menschliche Haltungsschätzungsmodell, um die Orientierungspunkte zu identifizieren.
während cap.isOpened():
Erfolg, image=cap.read()Wennnicht Erfolg:
drucken("leere kamera")
brechen
image = imutils.resize (Bild, Breite=500)
image = cv2.cvtColor (cv2.flip (Bild, 1), cv2.COLOR_BGR2RGB)
result = pose.process (Bild)
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 der einzelnen Orientierungspunkte gespeichert werden. Verwenden Sie die draw_landmarks-Klasse, um einen Punkt auf jedem Orientierungspunkt und den Verbindungen zwischen ihnen zu zeichnen. Iterieren Sie mithilfe einer for-Schleife über die Orientierungspunkte und speichern Sie die ID und die Koordinaten der einzelnen Orientierungspunkte in der von Ihnen erstellten Liste. Verwenden Sie die image.shape-Klasse, um die Breite und Höhe der Videoeingabe zu berechnen.
lmListe = []
Wenn result.pose_landmarks:
# Zeichnet die Punkte der Orientierungspunkte und verbindet sie
mp_draw.draw_landmarks (Bild, result.pose_landmarks,
mp_pose. POSE_CONNECTIONS)für id, im In aufzählen (result.pose_landmarks.landmark):
# Ermitteln der Länge und Breite des Videoeingangs
h, w, _ = Bild.Form
# Ermitteln der genauen Koordinaten der Körperpunkte
X, Y = int (im.x * w), int (im.y * h)
lmList.append([ID, X, Y])
Die ID ist die Nummer, die das MediaPipe-Pose-Schätzungsmodell einem bestimmten Orientierungspunkt zuweist. Nachdem Sie die Pose des Menschen in der Eingabe identifiziert haben, müssen Sie die Anzahl der Liegestütze zählen, die er gegebenenfalls 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 sind als die Ellbogen, ist die Person oben. Wenn die Schultern tiefer als die Ellbogen sind, ist die Person unten. Sie überprüfen dies, indem Sie die IDs der Landmarken der Schultern mit denen der Landmarken der Ellbogen vergleichen.
# Überprüfen, ob es identifizierte Orientierungspunkte gibt
Wenn len (lmListe) != 0:
# Bedingung, die die untere Position identifiziert
Wenn (lmListe[12][2] Und lmListe[11][2] >= lmListe[14][2] Und lmListe[13][2]):
Stelle = "runter"
# Bedingung, die die obere Position identifiziert
Wenn (lmListe[12][2] Und lmListe[11][2] <= lmListe[14][2] Und lmListe[13][2])
Und Stelle == "runter":
Stelle = "hoch"
zählen +=1
Damit eine Person einen vollständigen Liegestütz ausführen kann, muss sie eine untere Position einnehmen und dann wieder in die obere Position zurückkehren. Nach einem vollständigen Liegestütz kann das Programm die Zählung um eins aktualisieren.
Anzeigen der Ausgabe
Sie müssen die Anzahl der Liegestütze anzeigen, die das Programm gezählt hat. Drucken Sie den Wert der Zählung jedes Mal, wenn der Benutzer einen vollständigen Liegestütz macht, auf dem Terminal aus. Zeigen Sie schließlich die Leistung der Person an, die Liegestütze mit den auf ihrem Körper gezeichneten Orientierungspunkten macht.
drucken (zählen)
cv2.imshow("Push-up-Zähler", cv2.flip (Bild, 1))
key = cv2.waitKey(1)# Das Programm wird beendet, wenn q gedrückt wird
Wenn key == ord('Q'):
brechen
cap.release()
Die Ausgabe sollte in etwa so aussehen:
Sie sollten eine Aktualisierung am Terminal beobachten, da die Person am Ausgang einen vollständigen Liegestütz macht.
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!