多人数人物認識を行うプログラムの実行方法

多人数人物認識を行うプログラムを実行するための環境構築の方法などを解説する。
皆さんは既に mediapipe の環境構築の経験があるのだから、解説は最低限のものとし手取り足取りの指導は行わない。

なお、皆さんの PC が GPU を搭載しているかどうかを問わず下記の内容は実行可能である。
ただし、GPU を搭載していない PC での動作はかなり遅く、実用には向かないことがわかるはずである。

また、ここに記すインストール方法などについてはこちらからのサポートは行わない。
学生同士で相談して解決して欲しい。

解説は以下の流れで進む。多人数認識が可能な手法が 4 つ紹介されていることがわかる。

GPU プログラム環境 CUDA のインストール

皆さんが GPU 搭載 PC を持っている場合は、その PC にCUDA というGPUプログラム開発環境をインストールする必要がある。
皆さんが GPU 搭載 PC を持っていない場合は、CUDA をインストールする必要はないのでこの過程をスキップしてよい。

まず、NVIDIA のサイトから CUDA 11.7 をダウンロードする。

Windows 11 の場合は下記の順でボタンをクリックすれば、ダウンロードファイルへのリンクが現れれる。
(Windows + x86_64 + 11 + exe(local))

約2.5GBの巨大なファイルがダウンロードされるので、ダブルクリックしてインストールする。
基本的にはデフォルトの選択肢のとおりにインストールする。

途中で Visual Studio に関するチェックを入れないと進めない場所があるが、チェックを入れて先に進んでよい。


Anaconda 上での PyTorch のセットアップ

CUDA をインストールしたら、あるいは GPU を用いないため CUDA のインストールをスキップしたなら、
Anaconda で PyTorch 用の仮想環境を構築しよう。PyTorch は、最近流行しているディープラーニング用ライブラリである。
Anaconda は既にインストール済であるとする。

以下では、Anaconda で pytorch という名前の仮想環境を作って実行する方法を解説する。

まず、Windows のスタートメニューから
Anaconda Prompt (無印または baseとかいてあるもの)
を起動する。

先頭に (base) と書いてあるプロンプトで以下を実行する。pytorch という名称の仮想環境を Python 3.8 で構築するのである。
 conda create -n pytorch python=3.8
「Proceed ([y]/n)? 」などと聞かれたら y をタイプして Enter キーを押す。

終了したら下記コマンドで pytorch 仮想環境に入る。
 conda activate pytorch
プロンプトの先頭が (pytorch) に代わるので、そのプロンプトで
下記コマンドを一つずつ順に実行。以下のコマンドは全て先頭が (pytorch) のプロンプトで実行すること。
conda install scikit-learn matplotlib pillow py-opencv spyder console_shortcut toml scikit-image tqdm pandas seaborn

conda install -c conda-forge pycocotools
次に、Pytorch をインストールするが、GPUを使うか使わないかで実行コマンドが異なる。

GPU を使う場合 (CUDA をインストールした場合) の PyTorch のインストール

GPU を使う場合、先頭が (pytorch) のプロンプトで以下を実行する。
conda install pytorch=2.0.1 torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
なお、このコマンドは PyTorch 公式サイトで生成することができる。
注意しなければならないのは、CUDA のバージョンと PyTorch のバージョンの結び付きが強いことで、
CUDA 11.7 を用いるときは PyTorch 2.0.1 を、CUDA 11.8 を用いるときは PyTorch 2.1 系をインストールしないと適切に GPU が使われない、などの問題が起こるようである。

GPU を使わない場合 (CUDA をインストールしなかった場合) の PyTorch のインストール

GPU を使わない場合、先頭が (pytorch) のプロンプトで以下を実行する。なお、GPU を使わないとは、代わりに CPU を使うということである。
conda install -c pytorch pytorch torchvision torchaudio cpuonly 

PyTorch のインストールが終わった後に最後に実行

PyTorch のインストールが終わったら、GPU を使う/使わないに関わらず、先頭が (pytorch) のプロンプトで以下を実行する。
 pip install opencv-python
OpenCV がインストールされる。多分これを実行しないとプログラム実行時に OpenCV に関するエラーが出るだろう。


多人数認識が可能な OpenPose の実行

ここから先は、最低限の内容しか記さない。一語見落とすだけで正しく実行できないので注意深く文章を読むこと。

pytorch-openpose から、「Code」→「Download ZIP」で圧縮されたプログラムをダウンロードする。

zip ファイルを右クリックで「すべて展開」を選択して、プログラムを展開する。

さらに、上記ページの DropBox へのリンクから body_pose_model.pth と hand_pose_model.pth をダウンロードし、
pytorch-openpose フォルダ内にある model フォルダ内に保存する。

Windows のスタートメニューから Spyder (pytorch) を起動し、pytorch-openpose フォルダ内にある demo_camera.py を開く。
実行時は「ファイルごとの設定」で「カスタム設定でファイルを実行」→「外部システムターミナルで実行」を選択した上で実行する。
終了時は映像上で「q」をタイプして終了。

なお、GPU を用いず CPU を用いるときは、15 行目の print 文の先頭に「#」を書いてコメントアウトする必要がある。

また、手と体の両方を認識しているのだが、27 行目から 36行目の手認識の部分をコメントアウトすれば体のみの認識になり少し速い。

さらに、カメラを変更したい場合は 17 行目の以下の数字を直接書き換えるしかない。
cap = cv2.VideoCapture(0)



多人数認識が可能な Lightweight OpenPose の実行

lightweight-human-pose-estimation.pytorch から、「Code」→「Download ZIP」で圧縮されたプログラムをダウンロードする。

zip ファイルを右クリックで「すべて展開」を選択して、プログラムを展開する。

さらに、上記ページにリンクがある checkpoint_iter_370000.pth をダウンロードし、 lightweight-human-pose-estimation.pytorch フォルダ内にある models フォルダに保存する。

Windows のスタートメニューから Spyder (pytorch) を起動し、lightweight-human-pose-estimation.pytorch フォルダ内にある demo.py を開く。
実行時は「ファイルごとの設定」で「カスタム設定でファイルを実行」→「外部システムターミナルで実行」を選択する。
さらに、一般設定のコマンドラインオプションは以下に設定する。
--checkpoint-path models/checkpoint_iter_370000.pth --video 0
なお、CPU を用いる場合は以下である。
--checkpoint-path models/checkpoint_iter_370000.pth --cpu --video 0
なお、video の番号はカメラ番号のこと。
終了するときは映像上で「ESC」キーをタイプして終了。


多人数認識が可能な YOLO v.7 の実行

yolov7-pose-estimation から、「Code」→「Download ZIP」で圧縮されたプログラムをダウンロードする。

zip ファイルを右クリックで「すべて展開」を選択して、プログラムを展開する。

さらに、上記ページの「pose estimation weights」と書かれた付近にリンクがある yolov7-w6-pose.pt をダウンロードし、 yolov7-pose-estimation フォルダ内の Python プログラムがある位置と同じ位置に保存する。

Windows のスタートメニューから Spyder (pytorch) を起動し、yolov7-pose-estimation フォルダ内にある pose-estimate.py を開く。
実行時は「ファイルごとの設定」で「カスタム設定でファイルを実行」→「外部システムターミナルで実行」を選択する。
さらに、一般設定のコマンドラインオプションは以下に設定する。
--source 0 --view-img --device 0
なお、CPU を用いる場合は以下である。
--source 0 --view-img --device cpu
このプログラムでは「source」がカメラ指定、device が cpu/gpu 指定なので注意。
キーボードでは終了しないと思うので黒い画面を閉じて強制終了。


多人数認識が可能な PoseNet の実行

posenet-pytorch から、「Code」→「Download ZIP」で圧縮されたプログラムをダウンロードする。

zip ファイルを右クリックで「すべて展開」を選択して、プログラムを展開する。

Windows のスタートメニューから Spyder (pytorch) を起動し、posenet-pytorch フォルダ内にある webcam_demo.py を開く。
実行時は「ファイルごとの設定」で「カスタム設定でファイルを実行」→「外部システムターミナルで実行」を選択して実行
必要なファイルは初回実行時に自動的にダウンロードされる。
終了時は映像上で「q」をタイプして終了。

なお、カメラを変更したければ、一般設定のコマンドラインオプションで以下で設定可能である。
--cam_id 0
また、CPUで実行する場合は、以下の変更をしなければならない。
19行目の
model = model.cuda() 
の先頭に「#」をつけてコメントアウトで無効化。
33行目の
input_image = torch.Tensor(input_image).cuda()
input_image = torch.Tensor(input_image)
に変更。