Skip to main content

Pilnveidota cilvēka pozes noteikšana: MediaPipe, OpenCV un Matplotlib praktiska ieviešana

Pozes novērtēšana ar MediaPipe un OpenCV

Cilvēka pozīcijas novērtēšana ir modernā datorredzes tehnoloģija, kas pārveido vizuālos datus par noderīgu informāciju par cilvēka kustībām. Izmantojot uzlabotus mašīnmācīšanās modeļus, piemēram, MediaPipe BlazePose, un jaudīgas bibliotēkas kā OpenCV, izstrādātāji var izsekot ķermeņa punktiem ar augstu precizitāti. Šajā pamācībā mēs apskatīsim, kā Python rāmjos var realizēt sarežģītu pozīciju noteikšanu dažādās jomās – no sporta analītikas līdz veselības uzraudzībai un interaktīvām lietotnēm.

Pamata bibliotēku instalēšana

Vispirms nepieciešams instalēt nepieciešamās bibliotēkas:

!pip install mediapipe opencv-python-headless matplotlib

Bibliotēku importēšana

Pēc tam importējam nepieciešamās bibliotēkas:

import cv2 
import mediapipe as mp 
import matplotlib.pyplot as plt 
import numpy as np

MediaPipe modeļa inicializēšana

Inicializējam MediaPipe Pose modeli statiskā attēla režīmā ar segmentāciju un minimālo noteikšanas ticamību 0.5. Tiek arī importētas palīgfunkcijas zīmēšanai.

mp_pose = mp.solutions.pose 
mp_drawing = mp.solutions.drawing_utils 
mp_drawing_styles = mp.solutions.drawing_styles 
 

pose = mp_pose.Pose(
static_image_mode=True,
model_complexity=1,
enable_segmentation=True,
min_detection_confidence=0.5
)

Pozes noteikšanas funkcija

Definējam funkciju detect_pose, kas nolasa attēlu, apstrādā to, lai noteiktu cilvēka pozīcijas punktus, un atgriež anotēto attēlu kopā ar atrastajiem punktiem.

def detect_pose(image_path): 
    image = cv2.imread(image_path) 
    image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) 
 
results = pose.process(image_rgb) 

annotated_image = image_rgb.copy() 
if results.pose_landmarks: 
    mp_drawing.draw_landmarks( 
        annotated_image, 
        results.pose_landmarks, 
        mp_pose.POSE_CONNECTIONS, 
        landmark_drawing_spec=mp_drawing_styles.get_default_pose_landmarks_style() 
    ) 

return annotated_image, results.pose_landmarks</code></pre></div></div>

Vizualizācija un punktu iegūšana

Funkcija visualize_pose parāda oriģinālo un anotēto attēlu blakus. Funkcija extract_keypoints pārveido atrastos punktus par vārdnīcu ar to koordinātām.

def visualize_pose(original_image, annotated_image): 
    plt.figure(figsize=(16, 8)) 
 
plt.subplot(1, 2, 1) 
plt.title('Oriģinālais attēls') 
plt.imshow(cv2.cvtColor(original_image, cv2.COLOR_BGR2RGB)) 
plt.axis('off') 

plt.subplot(1, 2, 2) 
plt.title('Pozes noteikšana') 
plt.imshow(annotated_image) 
plt.axis('off') 

plt.tight_layout() 
plt.show() 

def extract_keypoints(landmarks):
if landmarks:
keypoints = {}
for idx, landmark in enumerate(landmarks.landmark):
keypoints[mp_pose.PoseLandmark(idx).name] = {
'x': landmark.x,
'y': landmark.y,
'z': landmark.z,
'visibility': landmark.visibility
}
return keypoints
return None

Pozes analīzes piemērs

Noslogojam attēlu, apstrādājam to un izvadām rezultātus:

image_path = '/content/Screenshot 2025-03-26 at 12.56.05 AM.png' 
original_image = cv2.imread(image_path) 
annotated_image, landmarks = detect_pose(image_path) 
 

visualize_pose(original_image, annotated_image)

keypoints = extract_keypoints(landmarks)
if keypoints:
print("Atrastie punkti:")
for name, details in keypoints.items():
print(f"{name}: {details}")

Piemēra izvades attēls

Šajā pamācībā mēs apskatījām, kā izmantot MediaPipe un OpenCV cilvēka pozīcijas novērtēšanai. Izveidotā pieeja ļauj pārveidot attēlus detalizētās skeleta kartēs, kas noderīgas sporta analītikai, veselības uzraudzībai un citām jomām.


Pamācības Colab piezīmju grāmatiņu varat atrast šeit. Sekojiet mums arī Twitter un pievienojieties mūsu Telegram kanālam un LinkedIn grupai. Neaizmirstiet pievienoties mūsu 85k+ ML kopienai Reddit.

https://www.marktechpost.com/

Atbildēt

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti kā *

© 2025 AI LATVIA