1.はじめに
今回ご紹介するのは、動画に映っている人物の3Dモデルをトラッキングする、PHALPという技術です。
*この論文は、2021.12に提出されました。
2.PHALPとは?
下記がPHALP(Predicting Human Appearance, Location and Pose for Tracking )の概要です。
各フレームのすべてのバウンディングボックスについて、人物の外観(Appearance)、ポーズ(Pose)、位置(Location)の3つをトラックレット(Tracklet)という形でまとめ、累積した情報を統合(Aggregation)します。
そして、この統合結果を元に予測した次のフレームのトラックレット(Prediction)と、次のフレームで検出したトラックレット(Detections)との関連付け(Association)によってトラッキングを行います。
3.コード
コードはGoogle Colabで動かす形にしてGithubに上げてありますので、それに沿って説明して行きます。自分で動かしてみたい方は、この「リンク」をクリックし表示されたノートブックの先頭にある「Colab on Web」ボタンをクリックすると動かせます。
まず、セットアップを行います。なお、この colab はオリジナル github の公式版(youtubeからダウンロードするデモ)を改造したものです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#@title #**セットアップ** # githubからコードを取得 PHALP_ROOT="PHALP" ! git clone https://github.com/cedro3/PHALP.git $PHALP_ROOT %cd PHALP # ライブラリーのインストール ! pip install pyrender ! pip install opencv-python ! pip install joblib ! pip install cython ! pip install scikit-learn==0.22 ! pip install scikit-image ! pip install git+https://github.com/facebookresearch/detectron2.git ! pip install git+https://github.com/brjathu/pytube.git ! pip install git+https://github.com/brjathu/NMR.git ! pip install chumpy ! pip install ipython ! pip install gdown ! pip install dill ! pip install scenedetect # 関数のインポート from function import * # フォルダの作成 reset_folder('_DEMO/youtube_data') |
movie フォルダの中にある動画(mp4)の中から1つ選んで movie: に記入して実行します。自分の用意した動画を使う場合は、事前に movie フォルダにアップロードしておいて下さい。ここでは、movie:dance.mp4 と設定して実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#@title #**トラッキング動画の作成** import shutil #@markdown ・音声付き動画を使用して下さい\ #@markdown ・HDで30秒以内が目安 movie = 'dance.mp4' #@param {type:"string"} shutil.copy('movie/'+movie, '_DEMO/youtube_data/youtube.mp4') # トラッキング動画の作成 !./scripts/_PHALP.sh # 音声の抽出・付加 clear_output() print('preparation for sound...') video_file = '_DEMO/youtube_data/youtube.mp4' out_file = 'out/Videos_v1/PHALP_youtube_data_mask.mp4' ! ffmpeg -y -i $video_file -loglevel error sound.mp3 ! ffmpeg -y -i $out_file -i sound.mp3 -loglevel error output.mp4 # 動画の再生 clear_output() display_mp4('output.mp4') |
踊っている3人が色分けされ、フォーメーションが変わっても、ちゃんとトラッキングされていることが分かります。なお、この動画はoutput.mp4に保存されていますので、必要に応じて手動でダウンロードして下さい。
では、また。
(オリジナルgithub)https://github.com/brjathu/PHALP
Colabでテストしてみたのですが、ライブラリの読み込みが極端に遅く、インストールがなかなか完了しません。
例えば、”! pip install scikit-learn==0.22″の行で6分かかりました。
Colabの仕様変更(Python3.9)による一時的な影響でしょうか。
また、次のセルでもエラーを吐き、完了しません。
ファイルがダウンロードできないことが主な要因かと存じますが、本家がv1.1を公開していることにも起因しますか。
参考▶https://github.com/brjathu/PHALP/tree/v1.1
以下がclear outputをコメントアウトして表示されたエラーメッセージです。
Downloading file: hmar_v2_weights.pth
Cached Downloading: _DATA/hmar_v2_weights.pth
Access denied with the following error:
Cannot retrieve the public link of the file. You may need to change
the permission to ‘Anyone with the link’, or have had many accesses.
You may still be able to access the file from the browser:
https://drive.google.com/uc?id=1_wZcPv8MxPoZyEGA9rI5ayXiB7Fhhj4b
Traceback (most recent call last):
File “/usr/lib/python3.9/shutil.py”, line 825, in move
os.rename(src, real_dst)
FileNotFoundError: [Errno 2] No such file or directory: ‘/root/.cache/gdown/tmpy7fwlnhj/dl’ -> ‘_DATA/hmar_v2_weights.pth’
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File “/content/PHALP/demo_online.py”, line 195, in
phalp_tracker = PHALP_tracker(opt)
File “/content/PHALP/PHALP.py”, line 29, in __init__
self.cached_download_from_drive()
File “/content/PHALP/PHALP.py”, line 342, in cached_download_from_drive
output = gdown.cached_download(url, “_DATA/” + file_name, fuzzy=True)
File “/usr/local/lib/python3.9/dist-packages/gdown/cached_download.py”, line 117, in cached_download
shutil.move(temp_path, path)
File “/usr/lib/python3.9/shutil.py”, line 845, in move
copy_function(src, real_dst)
File “/usr/lib/python3.9/shutil.py”, line 444, in copy2
copyfile(src, dst, follow_symlinks=follow_symlinks)
File “/usr/lib/python3.9/shutil.py”, line 264, in copyfile
with open(src, ‘rb’) as fsrc:
FileNotFoundError: [Errno 2] No such file or directory: ‘/root/.cache/gdown/tmpy7fwlnhj/dl’
preparation for sound…
out/Videos_v1/PHALP_youtube_data_mask.mp4: No such file or directory
—————————————————————————
FileNotFoundError Traceback (most recent call last)
in
20 # 動画の再生
21 #clear_output()
—> 22 display_mp4(‘output.mp4′)
/content/PHALP/function.py in display_mp4(path)
51 def display_mp4(path):
52 from base64 import b64encode
—> 53 mp4 = open(path,’rb’).read()
54 data_url = “data:video/mp4;base64,” + b64encode(mp4).decode()
55 display(HTML(“””
FileNotFoundError: [Errno 2] No such file or directory: ‘output.mp4’