Day12 身體關鍵點檢測 Pose Landmark Detection


🟡 先看看程式的效果

今天的程式是利用 OpenCV 和 MediaPipe 來進行即時偵測人體姿勢關鍵點, 是這類人體姿勢偵測程式的基本型, 之後連續幾天會建基於這個程式逐步增加不同的功能。

Today’s program utilizes OpenCV and MediaPipe to perform real-time detection of human pose key points. This is a basic version of human pose detection programs, and over the next few days, additional features will be incrementally added to this program.


🟡 學習目標

這個程式展示了如何進行即時的視頻處理和人體姿勢分析。這種即時處理在許多實際應用中都非常重要,比如動作遊戲等。

🔻以下是 Mediapipe 對人體姿勢辨識的 Landmarks 以及其編號。


🟡 程式碼

請先下載 “Pose Landmark Detection 身體關鍵點檢測.py”
請按此下載

'''

Python + AI in 21 days
https://jasonworkshop.com/python

Designed by Jason Workshop

[請勿修改以上內容]

---

預備工作:

首先,請確保已安裝 opencv-python, mediapipe 模組
如不確定可直接在 Windows 的 cmd prompt 執行以下指定
pip install opencv-python mediapipe

'''

import cv2
import mediapipe as mp

# 初始化 MediaPipe Pose 模組
mp_pose = mp.solutions.pose
pose = mp_pose.Pose(static_image_mode=False, model_complexity=1, enable_segmentation=False, min_detection_confidence=0.5) # min_detection_confidence 為最低可信度
mp_drawing = mp.solutions.drawing_utils

# 開啟攝影機
cap = cv2.VideoCapture(0)

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    # 轉換 BGR 圖像到 RGB
    rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

    # 偵測身體姿勢
    result = pose.process(rgb_frame)

    # 繪製身體關鍵點和連線
    if result.pose_landmarks:
        mp_drawing.draw_landmarks(
            image=frame,
            landmark_list=result.pose_landmarks,
            connections=mp_pose.POSE_CONNECTIONS,
            landmark_drawing_spec=mp_drawing.DrawingSpec(color=(0, 255, 0), thickness=2, circle_radius=2),
            connection_drawing_spec=mp_drawing.DrawingSpec(color=(255, 255, 255), thickness=1, circle_radius=2))

    # 顯示圖像
    cv2.imshow('Pose Landmark Detection', frame)

    if cv2.waitKey(1) & 0xFF == 27: # 按下 ESC 鍵退出
        break

# 釋放攝影機並關閉所有視窗
cap.release()
cv2.destroyAllWindows()

🟡 小小挑戰一下

大家可以嘗試進行一些修改或改良喔! 例如:
✌️添加一些特定姿勢的檢測,比如檢測是否站立、坐下或舉手等。
✌️計算關鍵點之間的角度,可以用來分析運動姿勢是否正確。

😁 明天見!

按這裏回到 Python + AI 的 21 天挑戰