🌊

MediaPipe Pose をローカルのPythonで使う[備忘録]

2023/05/03に公開

はじめに

MediaPipeを用いたポーズ推定を,ローカルでPythonを用いて行う方法.
下記ページのコードを使用しています.
https://github.com/google/mediapipe/blob/master/docs/solutions/pose.md#resources
私が使用した環境やアプリケーションは以下の通りです.
・windows
・コマンドプロンプト
・python3.10.11

0.Pythonの保存場所の確認

  1. コマンドプロンプトを起動する.

    以下,全てのコードはコマンドプロンプトにて実行します.
     
  2. Pythonの保存場所を確認
where python

上記のコードを実行すると,

C:\xxx\xxx\xxx\Python3**\python.exe

このようなパスが表示されるので,『C:xxx\xxx\xxx\Python3**』の部分をメモしておく.パスが複数表示される場合があるが,『Python3**』が含まれる方を選択すること.このパスは後で使用します.

1.Pythonの仮想環境の作成

以下のコードを実行する.

py -m venv .(任意の名前)    #仮想環境の作成
.(任意の名前)\Scripts\activate.bat    #仮想環境の起動

私が実行したコードは以下の通り.

仮想環境を起動すると,

このようにコマンドプロンプトの画面が切り替わる.

2.MediaPipe Pythonパッケージのインストール

  1. https://pypi.org/project/mediapipe/ からパッケージをダウンロード

    「ファイルをダウンロード」をクリック.

    赤い丸印で示したパッケージをクリックすると,パッケージのダウンロードが始まる.『cp3**』はPythonのバージョンと対応しており,Python3.10xxを使用しているなら『cp310』のものを選べばよい.
     
  2. ダウンロードしたパッケージを移動させる
    1.でダウンロードしたパッケージを上記の『C:\xxx\xxx\xxx\Python3**』のフォルダへ移動させる.
     
  3. パッケージのインストール
    まず以下のコードを実行する.
py -m pip install (パッケージの名前).whl

次にpythonを起動する.

 py

最後に,必要なモジュールをインポートし,Poseのソリューションを呼び出す.

import mediapipe as mp
import cv2
import numpy as np
mp_drawing = mp.solutions.drawing_utils
mp_drawing_styles = mp.solutions.drawing_styles
mp_pose = mp.solutions.pose

3.MediaPipe Pose Solutionの実行

以下のコードを実行する.
※注意
ポーズ推定を行いたいローカルファイル上の動画のパスを指定する際は,これまでとは違ってファイルの区切りのバックスラッシュを2つにするここと.

cap = cv2.VideoCapture("ローカルファイル上の動画のパス")
with mp_pose.Pose(
    min_detection_confidence=0.5,
    min_tracking_confidence=0.5) as pose:
  while cap.isOpened():
    success, image = cap.read()
    if not success:
      print("Ignoring empty camera frame.")
      break
    image.flags.writeable = False
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    results = pose.process(image)
    image.flags.writeable = True
    image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
    mp_drawing.draw_landmarks(
        image,
        results.pose_landmarks,
        mp_pose.POSE_CONNECTIONS,
        landmark_drawing_spec=mp_drawing_styles.get_default_pose_landmarks_style())
    cv2.imshow('MediaPipe Pose', cv2.flip(image, 1))
    if cv2.waitKey(5) & 0xFF == 27:
      break

終える際は Ctrl+C を押した後,コマンドプロンプトにて

quit()

を実行すればよい.

Discussion