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/