【この記事で出来るようになること】
え? 今って、こんなことまでオープンソースで出来ちゃうんですか!?
出来ちゃうんですね~これが。
出来ちゃうんで、さっそくやっていきましょう!
準備
モジュールの導入
本記事では、Pythonに以下のモジュールを使用し、導入には【pip】を使用いたします。
以下のモジュールをpipでインストールしてください。(Python本体が3.7以上であるかも合わせて確認してください)
【OpenCV】
pip install opencv-python
【MediaPipe】
pip install mediapipe
【MediaPipeとは】
Googleが開発している『多種多様な物体認識を遅延なく実行できるように作られたモジュール』です。
本記事で扱う『人間の姿勢(ポーズ)の認識』の他にも、『顔のパーツの認識』『物体の検出』『物体の姿勢推定』など、多くの機能を持っています。
気付けば、こんな代物が一般人でも使える時代に・・・すごい。
また別の記事でもご紹介しますので、興味の湧いた方は、ぜひ。(記事の最後にアウトプットも置いておきます)
動画の用意(Webカメラでも可)
人間の全身、もしくは上半身が映った動画を用意してください。
その際、一人だけが映っているものが望ましいです。(複数人を認識するには工夫が必要です)
形式は、OpenCVが読み取れる形式であれば問題ありませんが、こだわりがなければ【.mp4】にしましょう。
以下に、本記事で使用した動画のダウンロード先を示します。
無題(ボクシング練習)-Anthony Shkrada氏 ※可能であれば、下の公式HPで検索してダウンロードしましょう!
無料の写真素材-Pexels-公式ホームページ ※検索したら、左上のボタンで【動画】の閲覧に切り替えられます。ボクシングと検索しました。
Webカメラを使用する場合は、PCに接続しておいてください。
コードの入手・導入
以下のページより、【pose.py】を入手してください。
MediaPipeSetup-GitHub ダウンロードページ
入手したコードで実行ファイルを作成したら、先ほど用意した動画と同じ階層(同じフォルダ)に置いてください。
もちろん、ディレクトリを引数に入れる際のルールをご存じであれば、その限りではありません。
コードの加工
動画を読み込ませるためにコードを加工しましょう。(この辺を理解している方はスキップして構いません)
【7行目:動画 or Webカメラの読み込み】
Webカメラの方は変更不要です。
動画ファイルの場合は、以下のように引数に入れると読み込まれます。
### 7行目 ###
# 変更前
cap = cv2.VideoCapture(0) # プログラム実行でWebカメラ起動
# 引数の使い方
cap = cv2.VideoCapture("動画ファイル名.mp4")
# 変更後の例:
cap = cv2.VideoCapture("pose_test_1.mp4") # 同じフォルダにあるpose_test_1.mp4を読み込む。
【29,30行目:描画の設定を挿入】
冒頭の動画にある通り、今回の処理では人間の骨格に合わせて緑色の線を描きますが、通常では線が細く見にくいです。
そこで、描画の設定を引数に挿入します。
※挿入する変数はまだ作っていませんが、行数で説明するためにコチラを先に説明しています。
### 29, 30行目 ###
# コチラの引数を以下のように挿入してください。
connection_drawing_spec = drawing_spec
# 修正前
mp_drawing.draw_landmarks(
image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS)
# 修正後
mp_drawing.draw_landmarks(
image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS, connection_drawing_spec = drawing_spec)
【4行目の下:描画の設定インスタンスの作成】
4行目の下に、以下のコードを挿入してください。
thicknessの値を変更することで、線の太さを変更できるようになります。
### 4行目の下に挿入 ###
drawing_spec = mp_drawing.DrawingSpec(thickness = 10, circle_radius = 1)
以上で、コードの準備は完了です。
実行する
それでは実行してください。
冒頭のような映像になったでしょうか。
なれば、完了です。
もしも、ならない場合は、お知らせ願えれば幸いです。使用環境に応じて検討いたします。
おまけ:MediaPipeでつくったアウトプット達
いつの日か、今よりも画像処理も動画編集も上達して、『あの時はこんなだったんだな~』とかつぶやくのが楽しみですね~。
最後までお付き合い頂き、本当にありがとうございました!
それでは、また次回お会いしましょう!