MediaPipe Pose Landmarker タスクでは、画像内の人体のランドマークを検出したり、 動画をご覧ください。このタスクを使用して、主な身体の位置の特定、姿勢の分析、 動きを分類できますこのタスクでは、次の条件を満たす機械学習(ML)モデルを使用します。 単一の画像または動画を使用できますこのタスクは、身体ポーズのランドマークを画像に出力します。 3 次元の世界座標で表します。
この手順で説明するコードサンプルは、 GitHub。 機能、モデル、構成オプションの詳細については、 概要をご覧ください。
サンプルコード
「Pose Landmarker」のサンプル コードでは、この実装方法を完全に実装できます。 タスクを示しています。このコードは、このタスクをテストして、 独自のポーズ ランドマーク ツールの作成に着手しました。特定のリソースを表示、実行、 編集 Pose Landmarker のサンプルコード できます。
Raspberry Pi 用にポーズのマーカーを実装する場合は、 Raspberry Pi の例 アプリ。
セットアップ
このセクションでは、開発環境をセットアップする主な手順と 特に Pose Landmarker を使用するためのコード プロジェクトがありました。一般的な情報については、 MediaPipe タスクを使用するための開発環境の設定 プラットフォーム バージョンの要件については、 Python のセットアップ ガイド
<ph type="x-smartling-placeholder">パッケージ
MediaPipe Pose Landmarker タスクには、mediapipe PyPI パッケージが必要です。 これらの依存関係は、次のコマンドでインストールしてインポートできます。
$ python -m pip install mediapipe
インポート
次のクラスをインポートして、Pose Landmarker タスクの関数にアクセスします。
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
モデル
MediaPipe 姿勢位置マーカー タスクには、これと互換性のあるトレーニング済みモデルが必要です タスクを実行します。位置マーカーで利用可能なトレーニング済みモデルについて詳しくは、以下をご覧ください。 タスクの概要のモデル セクションをご覧ください。
モデルを選択してダウンロードし、ローカル ディレクトリに保存します。
model_path = '/absolute/path/to/pose_landmarker.task'
BaseOptions
オブジェクトの model_asset_path
パラメータを使用してパスを指定する
モデルを定義します。コード例については、次のセクションをご覧ください。
タスクを作成する
MediaPipe Pose Landmarker タスクは、create_from_options
関数を使用して以下の操作を行います。
タスクを設定します。create_from_options
関数は値を受け入れる
処理する構成オプションを確認してください詳細については、次をご覧ください:
構成オプション。
次のコードは、このタスクをビルドして構成する方法を示しています。
これらのサンプルは、画像のタスク構成のバリエーションも示しています。 動画ファイル、ライブ ストリームです。
画像
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions PoseLandmarker = mp.tasks.vision.PoseLandmarker PoseLandmarkerOptions = mp.tasks.vision.PoseLandmarkerOptions VisionRunningMode = mp.tasks.vision.RunningMode options = PoseLandmarkerOptions( base_options=BaseOptions(model_asset_path=model_path), running_mode=VisionRunningMode.IMAGE) with PoseLandmarker.create_from_options(options) as landmarker: # The landmarker is initialized. Use it here. # ...
動画
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions PoseLandmarker = mp.tasks.vision.PoseLandmarker PoseLandmarkerOptions = mp.tasks.vision.PoseLandmarkerOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a pose landmarker instance with the video mode: options = PoseLandmarkerOptions( base_options=BaseOptions(model_asset_path=model_path), running_mode=VisionRunningMode.VIDEO) with PoseLandmarker.create_from_options(options) as landmarker: # The landmarker is initialized. Use it here. # ...
ライブ配信
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions PoseLandmarker = mp.tasks.vision.PoseLandmarker PoseLandmarkerOptions = mp.tasks.vision.PoseLandmarkerOptions PoseLandmarkerResult = mp.tasks.vision.PoseLandmarkerResult VisionRunningMode = mp.tasks.vision.RunningMode # Create a pose landmarker instance with the live stream mode: def print_result(result: PoseLandmarkerResult, output_image: mp.Image, timestamp_ms: int): print('pose landmarker result: {}'.format(result)) options = PoseLandmarkerOptions( base_options=BaseOptions(model_asset_path=model_path), running_mode=VisionRunningMode.LIVE_STREAM, result_callback=print_result) with PoseLandmarker.create_from_options(options) as landmarker: # The landmarker is initialized. Use it here. # ...
画像で使用する姿勢のランドマーク作成の詳細な例については、 コードサンプルをご覧ください。
構成オプション
このタスクには、Python アプリケーション用の次の構成オプションがあります。
オプション名 | 説明 | 値の範囲 | デフォルト値 |
---|---|---|---|
running_mode |
タスクの実行モードを設定します。3 つの
モード: IMAGE: 単一画像入力のモード。 VIDEO: 動画のデコードされたフレームのモード。 LIVE_STREAM: 入力のライブ配信のモード カメラからのデータなどです。 このモードでは、resultListener は 結果を受け取るリスナーを設定するために呼び出されます。 使用できます。 |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
num_poses |
地面マーカーのポーズ。 | Integer > 0 |
1 |
min_pose_detection_confidence |
姿勢検出に必要な最小信頼スコア 成功したとみなされます。 | Float [0.0,1.0] |
0.5 |
min_pose_presence_confidence |
ポーズの有無に関する最小信頼スコア スコアを記録しました。 | Float [0.0,1.0] |
0.5 |
min_tracking_confidence |
ポーズ トラッキングの最小信頼スコア 成功とみなされます。 | Float [0.0,1.0] |
0.5 |
output_segmentation_masks |
位置マーカーのセグメンテーション マスクが、検出された要素に対してセグメンテーション マスクを出力するかどうか ポーズを決めます。 | Boolean |
False |
result_callback |
ランドマークの結果を受け取るように結果リスナーを設定します。
Pose Landmarker がライブ ストリーム モードのときに非同期で配信されます。
実行モードが LIVE_STREAM に設定されている場合にのみ使用できます |
ResultListener |
N/A |
データの準備
入力を画像ファイルまたは numpy 配列として準備します。
mediapipe.Image
オブジェクトに変換します。入力が動画ファイルの場合
ライブ ストリームで配信する場合、
入力フレームを numpy として読み込むための OpenCV
あります
画像
import mediapipe as mp # Load the input image from an image file. mp_image = mp.Image.create_from_file('/path/to/image') # Load the input image from a numpy array. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)
動画
import mediapipe as mp # Use OpenCV’s VideoCapture to load the input video. # Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS # You’ll need it to calculate the timestamp for each frame. # Loop through each frame in the video using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
ライブ配信
import mediapipe as mp # Use OpenCV’s VideoCapture to start capturing from the webcam. # Create a loop to read the latest frame from the camera using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
タスクを実行する
ポーズマーカーでは、detect
、detect_for_video
、detect_async
を使用します。
推論をトリガーできますポーズのランドマークについては、以下の操作を行います。
入力データの前処理と画像内のポーズの検出です。
次のコードは、タスクモデルを使用して処理を実行する方法を示しています。
画像
# Perform pose landmarking on the provided single image. # The pose landmarker must be created with the image mode. pose_landmarker_result = landmarker.detect(mp_image)
動画
# Perform pose landmarking on the provided single image. # The pose landmarker must be created with the video mode. pose_landmarker_result = landmarker.detect_for_video(mp_image, frame_timestamp_ms)
ライブ配信
# Send live image data to perform pose landmarking. # The results are accessible via the `result_callback` provided in # the `PoseLandmarkerOptions` object. # The pose landmarker must be created with the live stream mode. landmarker.detect_async(mp_image, frame_timestamp_ms)
次の点にご留意ください。
- 動画モードまたはライブ配信モードで実行している場合 Pose Landmarker タスクに入力フレームのタイムスタンプを提供します。
- 画像モデルまたは動画モデルで実行する場合、[Pose Landmarker] タスクは 入力画像の処理が完了するまで、現在のスレッドをブロックします。 クリックします。
- ライブ ストリーム モードで実行している場合、[Pose LandMarker] タスクが 現在のスレッドをブロックしません。このメソッドは、 完了するたびに、その検出結果が 表示されます。[Pose Landmarker] タスクの実行時に検出関数が呼び出された場合 別のフレームの処理でビジー状態の場合、タスクは新しい入力フレームを無視します。
画像上でポーズ マーカーを表示する詳細な例については、 コードサンプル をご覧ください。
結果の処理と表示
ポーズのランドマーカーは、検出ごとに poseLandmarkerResult
オブジェクトを返します。
あります。結果のオブジェクトには、各ポーズ ランドマークの座標が含まれます。
このタスクからの出力データの例を次に示します。
PoseLandmarkerResult:
Landmarks:
Landmark #0:
x : 0.638852
y : 0.671197
z : 0.129959
visibility : 0.9999997615814209
presence : 0.9999984502792358
Landmark #1:
x : 0.634599
y : 0.536441
z : -0.06984
visibility : 0.999909
presence : 0.999958
... (33 landmarks per pose)
WorldLandmarks:
Landmark #0:
x : 0.067485
y : 0.031084
z : 0.055223
visibility : 0.9999997615814209
presence : 0.9999984502792358
Landmark #1:
x : 0.063209
y : -0.00382
z : 0.020920
visibility : 0.999976
presence : 0.999998
... (33 world landmarks per pose)
SegmentationMasks:
... (pictured below)
出力には、正規化された座標(Landmarks
)と世界の両方が含まれます。
各ランドマークの座標(WorldLandmarks
)があります。
出力には、次の正規化された座標(Landmarks
)が含まれます。
x
、y
: 0.0 ~ 1.0 の範囲で正規化されたランドマーク座標 画像の幅(x
)と高さ(y
)を指定します。z
: ランドマークの深さ。腰の中間点の深さが 含まれます。値が小さいほど、ランドマークがカメラに近づきます。「 z の大きさはx
とほぼ同じスケールを使用します。visibility
: 画像内にランドマークが見える可能性。
出力には、次のワールド座標(WorldLandmarks
)が含まれます。
x
、y
、z
: 実世界の 3 次元座標(メートル単位)。 中間点を起点とします。visibility
: 画像内にランドマークが見える可能性。
次の図は、タスク出力を可視化したものです。
セグメンテーション マスク(省略可)は、各ピクセルが帰属する可能性を表します。 通知します。次の画像は、画像のセグメンテーション マスクです。 タスクの出力:
「Pose Landmarker」サンプルコードは、 結果については、 コードサンプル をご覧ください。