스포츠가 잘되고 싶다・・・그렇다, 자세 추정하고 능숙한 사람과의 차이를 잡으면・・・! ! ~초급편:colaboratory, openpose로 간단 동영상의 자세 추정~

소개



볼더링을 시작했지만 전혀 능숙하지 않다… 그렇다! ! 자세 추정하고 다른 사람에 비해 나쁜 곳을 구체적으로 보이는 형태로 하면 좋다!

라고 하는 곳에서, 우선은 colaboratory에서 자세 추정(openpose)을 해 보려고 되었습니다.

동영상 링크 결과↓(전혀 추정할 수 없다...)


시스템 구성



이번 시스템 구성은 이런 느낌입니다.
주로 사용하는 것은 Google Drive 및 google colaboratory입니다.
모두 클라우드상이므로, 브라우징용의 빈약한 PC만 있으면 OK입니다.



Tips:colaboratory란?
무료로 사용할 수 있으며 대부분의 주요 브라우저에서 작동하는 구성 불필요한 Jupyter 노트북 환경입니다. Google이 기계 학습의 교육, 연구용으로 사용되는 것을 목적으로 무료 제공하고 있습니다.
인용구 : 초속으로 무료 GPU 사용】심층 학습 실습Tips on Colaboratory

그럼 바로 구현합시다.



이번에는 아래 기사의 내용을 주로 참고하고 있습니다. 나나코 님 감사합니다.
tensorflow (tf-openpose)로 이미지에서 골격 추정

손쉽게 코드를 보고 싶은 분은 아래를 부탁드립니다!
htps : // 기주 b. 코 m/바로 포코/오펜포세_모ゔぃ에/bぉb/마s테 r/오펜포세_도ぃぃ에. 이 pyn b

공동체에 액세스! (처음의 방향)



먼저 이 URL을 방문해 보세요.
htps : // 코 b. 레세아 rch. 오, ぇ. 코 m / 노보보 ks / ぇ l 코메. 아니 pyb? hl = 그럼

그리고 "파일 → python3의 새로운 노트북"을 클릭하십시오.


그러면 아래와 같은 새 페이지가 표시됩니다.
이제 준비 OK입니다!

여기에 코드를 작성하여 "Shift + enter"로 python 스크립트를 쉽게 실행할 수 있습니다.


자, 개발 환경 정비합시다.



Openpose를 작동시키기 위해서는 5가지 작업이 필요합니다.

OpenPose_movie.ipynb
# SWIG を準備
!apt-get -q -y install swig

# TF-openposeをクローン
!git clone https://www.github.com/ildoonet/tf-openpose

#  ------- 変更点:ここから 挿入 ------- 
# クローンしたディレクトリに入る
%cd tf-openpose
#  ------- 変更点:ここまで 挿入 ------- 

# openpose動作のための、ライブラリをインストール
!pip3 install -r requirements.txt

# Openposeのモデルをダウンロード
%cd models/graph/cmu
!bash download.sh
%cd ../../../

# pafprocessをインストール
%cd tf_pose/pafprocess
!ls
!swig -python -c++ pafprocess.i && python3 setup.py build_ext --inplace
%cd ../../

실험! !



우선은 정지화상으로 실험해 본다.



이런 일이 가능하면 성공입니다!


OpenPose_movie.ipynb
# ネットから画像DL
!wget https://www.pakutaso.com/shared/img/thumb/150415022548_TP_V.jpg

# 実行!!
%run -i run.py --model=mobilenet_thin --resize=432x368 --image=150415022548_TP_V.jpg

그런 다음 동영상에서 실행



여기에 버릇이 있었기 때문에, 조금 고생했습니다.

우선 Google 드라이브에서 동영상을 로드하는 작업



아래의 코드를 실행.

OpenPose_movie.ipynb
from google.colab import drive
drive.mount('./gdrive')
drive_root_dir="./gdrive/My Drive/Colab Notebooks/"

URL에 액세스해 다음을 연타해 가면 URL이 또 표시되므로, 그것을 입력.
이런 화면이 나오면 OK.


Google 드라이브에서 colab로 동영상 복사



아래와 같은 명령을 입력하여 복사할 수 있습니다. 디렉토리는 개별적으로 다르므로 놓고 있는 동영상의 위치에 따라 변경하세요.

OpenPose_movie.ipynb
!cp './gdrive/My Drive/Colab Notebooks/movies/climbing2.mp4' "./"

마지막으로, 실행입니다! !



원래, run_video.py라고 잘 실행할 수 없었으므로 스크립트를 개조하고 실행합니다.
조금 까다로운 것이, DNN에 입력하는 사이즈는 16의 배수를 전제로 하고 있는 곳입니다.
그래서 스크립트에서 W는 540 -> 544로 변경되었습니다. 그러나 동영상을 저장할 때는 원래 크기로!

OpenPose_movie.ipynb
import argparse
import logging
import time
import os

import cv2
import numpy as np
import matplotlib.pyplot as plt

from tf_pose import common
from tf_pose.estimator import TfPoseEstimator
from tf_pose.networks import get_graph_path, model_wh

movie_name = 'climbing2'

img_outdir = './img'
os.makedirs(img_outdir, exist_ok=True)

# 動画作成
fourcc = cv2.VideoWriter_fourcc('m','p','4', 'v')
video  = cv2.VideoWriter('ImgVideo2.mp4', fourcc, 30.0, (540, 960))


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='tf-pose-estimation Video')

    outimg_files = []
    count = 0
    w = 544 
    h = 960
    e = TfPoseEstimator(get_graph_path('mobilenet_thin'), target_size=(w, h))

    # 動画出力先
    cap = cv2.VideoCapture('climbing2.mp4')

    # 動画用の画像作成
    while True:
        ret, image = cap.read()

        if ret == True:
            # 1フレームずつ処理
            count += 1
            if count % 100 == 0:
                print('Image No.:{0}'.format(count))

            humans = e.inference(image, resize_to_default=(w > 0 and h > 0), upsample_size=4)
            image = TfPoseEstimator.draw_humans(image, humans, imgcopy=False)

            # 画像出力
            outimg_file = '{}/{:05d}.jpg'.format(img_outdir, count)
            cv2.imwrite(outimg_file, image)
            video.write(image)       

        else:
            break
    video.release()

마지막으로 저장



마지막으로 Google 드라이브 사본으로 끝납니다.

OpenPose_movie.ipynb
!cp './ImgVideo2.mp4' "./gdrive/My Drive/Colab Notebooks/movies/"

요약



OpenPose로 전혀 추정할 수 없었기 때문에, 어떻게 개선해 나갈지 생각하지 않으면 안됩니다. . .
예를 들어, 데이터 세트를 늘리거나? (아니 아니 힘든...)

아래의 기사와 같이 야구의 스윙이라고 잡히고 있습니다만. . .
htps : // 코 m / 나나코 _ t / ms / 1 아 9 세 5d4 에카 672b38d2d

좋은 아이디어와 논문을 아는 분 모집하고 있습니다! !

하지만,
자세 추정의 장애물은 높지 않으므로, 여러분 시험에 해 봅시다! !
python, colaboratory의 초보자도 몇 시간 만에 할 수 있습니다.

좋은 웹페이지 즐겨찾기