Anaconda で機械学習用の環境を作り、mediapipe による骨格認識を試してみる

本ページでは、Anaconda というツールをインストールし、Windows 上でプログラミング言語 Python (パイソン) を用いて機械学習を行う環境を作成する。

作成した環境を用いて、mediapipe と呼ばれるライブラリを用いた骨格認識を試してみる。

なお、本ページの内容はWindowsのユーザー名に日本語文字や半角スペースなどが含まれていると実行できない
ユーザー名に問題のある文字が含まれているかどうかはわかりにくいので、ページの途中で示す確認方法で確認すること。
この問題を回避するには、Windowsで名前がアルファベットと記号のみのユーザーを作り直すしかないので注意すること。

Anaconda のインストール

まず、Pythonという言語で機械学習用のプログラムを実行する環境である Anaconda ダウンロードしてインストールしよう。
下記のリンクをクリックして Anaconda のダウンロード用ページにアクセスする。
現われたページの下記の部分、すなわち「Skip registration」をクリックする。



すると、以下のようにダウンロードページが現われる。
多くの学生は 64ビット版 Windows を用いているあろうから、Python 3.11 用の「64-Bit Graphical Installer」をクリックし、インストール用のファイルをダウンロードする。



ダウンロードが完了すると、「ダウンロード」フォルダなどにインストール用のファイルがダウンロードされている。
Windows 版は執筆時点では「Anaconda3-2023.03-1-Windows-x86_64.exe」だったが、バージョンアップのたびに日付けの部分の数字が更新されていくだろう。

ファイルをダブルクリックし、Anaconda のインストールを行おう。
基本的には、現れた画面で促されるままに「Next」、「I Agree」、「Next」、「Next」、「Install」、「Next」、「Next」、「Finish」とボタンをクリックして行くだけで良い。

なお、インストール中に下記のエラーが出る場合、冒頭で触れた「ユーザー名に問題のある文字が含まれている」という問題がある
このまま先に進めてもうまくいかないので、Windowsでに日本語文字を含まないユーザーを作り直すしかない。
「Microsoftアカウント」でユーザーを作成すれば、登録したメールアドレスの先頭数文字がユーザー名となるため安全だと思う(メールアドレスには日本語文字は含まれないため)。
Error: Due to incompatibility with several Python libraries, 'Destination Folder' cannot contain non-ascii characters (special characters or diacritics). Please choose another location.



Anaconda への機械学習用ツールのインストール

ここからは、Anaconda 上で機械学習を用いたプログラムを実行するためのツールをインストールする。

Anaconda のインストールが終わったら、スタートメニューの「A」の項目に下図のように「Anaconda3 (64bit)」という項目が増えている。
なお、Windows 11 の場合、このアルファベット順のアプリケーション一覧を表示するには、
スタートメニュー上で「すべてのアプリ」を一度クリック
する必要がある。
一覧から、「Anaconda Prompt」をクリックして実行しよう。



現れた下記の画面がプロンプトであり、ここでコマンド(命令)を実行することで、各種ツールのインストールを行う。「kanamaru」の部分はユーザー名であるので人により異なる。
本ページ冒頭で「Windowsのユーザー名に日本語文字や半角スペースなどが含まれていると実行できない」と述べたが、このユーザー名の部分に日本語文字などを含んではいけない、という意味である。
日本語文字などを含んだまま先に進めてもうまくいかないので、Windowsでに日本語文字を含まないユーザーを作り直すしかない。
「Microsoftアカウント」でユーザーを作成すれば、登録したメールアドレスの先頭数文字がユーザー名となるため安全だと思う(メールアドレスには日本語文字は含まれないため)。



さて、プロンプト上で下記のコマンドを入力して実行して、「仮想環境」と呼ばれるものを作成する。
「仮想環境」とは、Anacondaのデフォルトの環境とは別に、本ページの演習を実行するために作成する環境である。
なお、仮想環境に「tf2」という名称を付けているが、これは「TensorFlow と呼ばれるディープラーニング用ツールのバージョン2を利用するための仮想環境」という意味で付けている。
また、仮想環境 tf2 で用いる Python のバージョンは 3.10 や 3.9 ではなく 3.8 としている。バージョンが新しいことより、動作が安定していることを重視したためである。
conda create -n tf2 python=3.8
なお、以後長いコマンドが続く。ブラウザ上で上のコマンドをコピーし、
下図のようにプロンプトの左上のアイコンをクリックして現れるメニューから「貼り付け」を選択すればコマンドを楽に実行できるので活用すべきである。
以下でその方法を解説する。

下図は、上に記した実行すべきコマンドをコピーした後、プロンプト上に貼り付けようとしているところである。
プロンプト左上のアイコンをクリックして「編集」→「貼り付け」とたどっていることがわかる。
Windows 11 では、このようなメニューは現われないことが多いので、素直にキーボードで Ctrl-V を入力して貼り付ければ良い



貼り付けが完了した状態が下図である。この状態でキーボードの「Enter」キーを押すことで、コマンドを楽に実行できるわけである。



「Enter」キーを押してコマンドを実行すると、仮想環境の作成が始まる。
このとき、下図のように「Proceed (y/[n])?」などと聞かれるので、
キーボードで「y」をタイプして「Enter」キーを押すことで作業が進む。



仮想環境の作成が完了したら、引続きそのプロンプト上で下記のコマンドを実行して作成し、仮想環境「tf2」に入る。
先程解説したように、コピー&貼り付けをうまく活用すること。
conda activate tf2
その結果、下図の状態になる。プロンプトの行頭が「(base)」から「(tf2)」に変化しており、環境が「base」から「tf2」に変わったことがわかる。



次に、冒頭が「(tf2)」となったプロンプト上で下記のコマンドを実行して、必要なツールを仮想環境にインストールしよう。
このコマンドは特に長いので、注意してコピーして実行する必要がある。
先ほどと同様、「Proceed (y/[n])?」と聞かれたときはキーボードで「y」をタイプして「Enter」キーを押して作業を進めること。
conda install scikit-learn matplotlib pillow py-opencv tensorflow keras numpy spyder console_shortcut toml
様々なツールのインストール作業が終わった後、最後に「done」と表示されていればここでのインストール作業は成功している (ただしまだ終わりではなく続きがある)。
下記のようなデバッグメッセージが現れた場合でも、最後に「done」と表示されているので、ここまでのインストール作業は問題なく完了している。
/ DEBUG menuinst_win32:__init__(198): Menu: name: 'Anaconda${PY_VER} ${PLATFORM}', prefix: 'C:\Users\kanamaru\anaconda3\envs\tf2', env_name: 'tf2', mode: 'user', used_mode: 'user'
DEBUG menuinst_win32:create(323): Shortcut cmd is %windir%\System32\cmd.exe, args are ['"/K"', 'C:\\Users\\kanamaru\\anaconda3\\Scripts\\activate.bat', 'C:\\Users\\kanamaru\\anaconda3\\envs\\tf2']
DEBUG menuinst_win32:__init__(198): Menu: name: 'Anaconda${PY_VER} ${PLATFORM}', prefix: 'C:\Users\kanamaru\anaconda3\envs\tf2', env_name: 'tf2', mode: 'user', used_mode: 'user'
DEBUG menuinst_win32:create(323): Shortcut cmd is C:\Users\kanamaru\anaconda3\pythonw.exe, args are ['C:\\Users\\kanamaru\\anaconda3\\cwp.py', 'C:\\Users\\kanamaru\\anaconda3\\envs\\tf2', 'C:\\Users\\kanamaru\\anaconda3\\envs\\tf2\\pythonw.exe', 'C:\\Users\\kanamaru\\anaconda3\\envs\\tf2\\Scripts\\spyder-script.py']
DEBUG menuinst_win32:create(323): Shortcut cmd is C:\Users\kanamaru\anaconda3\python.exe, args are ['C:\\Users\\kanamaru\\anaconda3\\cwp.py', 'C:\\Users\\kanamaru\\anaconda3\\envs\\tf2', 'C:\\Users\\kanamaru\\anaconda3\\envs\\tf2\\python.exe', 'C:\\Users\\kanamaru\\anaconda3\\envs\\tf2\\Scripts\\spyder-script.py', '--reset']
done


最後に、プロンプト (先頭に (tf2) と記されているもの) で下記のコマンドを実行して、mediapipe というライブラリをインストールしよう。骨格認識に必要なライブラリである。
pip install mediapipe
しばらく待てば mediapipe のインストールは完了する。

mediapipe のインストールが終わったらツールのインストールは完了であるので、プロンプトを右上の×ボタンで閉じて構わない。


サンプルプログラムのダウンロードと展開

Anaconda および Anaconda で用いるツールのセットアップが終わったので、
次は、Anaconda 上で実行するためのプログラムをダウンロードしよう。

用いるのは、映像中の人間の顔や手、物体等を機械学習により認識するためのライブラリである MediaPipe である。
公式ページの画像を見れば、何を実現するためのツールであるかはイメージできるだろう。
ちなみに、上記ページの「See demo」ボタンをそれぞれクリックすると、ブラウザ上で MediaPipe のデモを見ることが出来る。

この MediaPipe を、ブラウザ上ではなく、皆さんが先程インストールした Anaconda 上で、Python という言語で動かすのが次の目標である。
そのために、Kazuhito00 氏により作成されたサンプルプログラムを下記のサイトから以下の解説にしたがってダウンロードしよう。 ただし、上記ページでは「最新のプログラム」をダウンロードできるものの、
皆さんが3年生の春にダウンロードしたプログラムとはかなり変わってしまっている。

皆さんが3年生の春にダウンロードしたプログラムは、以下の手順でダウンロードできる。
まず、下記のページにアクセスしよう。 リンク先で、「Source code (zip)」をクリックすると、mediapipe-python-sample-0.8.9.zip というファイルがダウンロードされる。
これには皆さんが3年生の春にダウンロードしたプログラムが含まれているので、以下ではこれを用いよう。

さて、ダウンロードされた圧縮ファイル (ZIPファイル) は、そのままでは利用できないので、展開する必要がある。
(「展開」のことを「解凍」と呼ぶこともある)。

「圧縮されたファイルは、利用時には展開しなければならない」というのは Windows を使う上では常識であるので、
知らなかった学生はここで確実に覚えておくこと


さて、圧縮ファイル (ZIP ファイル) を展開するための最も基本的な方法は、
圧縮ファイル (ここでは「mediapipe-python-sample-main.zip」) を右クリックして 「すべて展開」を選択することである。
すると、圧縮ファイルを展開するための画面が開くので、指示にしたがって行けば最終的に複数のファイルを格納したフォルダが現れる。
それで展開終了である。



なお、ファイルを右クリックしたときに「すべて展開」と言う項目が現れない場合がある。
そのようなことが起こるのは、Windows にファイル展開ソフトウェアが別途インストールされている場合である。
そのような場合でも、右クリックメニューに「展開」や「解凍」などというキーワードを含む項目がみつかるはずなので、
それらを選択し、ファイルを展開しよう。

いずれにせよ、圧縮ファイルが適切に展開されていない限り、以下のプログラムの実行はできないので注意して欲しい。


Anaconda 上の Spyder によるサンプルプログラムの実行

さてここからは、冒頭でインストールした Anaconda を用い、いまダウンロードして展開したサンプルプログラムを実行してみよう。

Anaconda 上での仮想環境 tf2 の作成が終わっていると、スタートメニューの「Anaconda3 (64bit)」の項目に
下図のように「Anaconda Prompt (tf2)」や「Spyder (tf2)」が追加されている。 (アイコンのデザインはインストール時期により異なる)

どちらも、仮想環境 tf2 で必要となるツールである。「Anaconda Prompt (tf2)」は仮想環境 tf2 へツールをインストールしたいときに、
「Spyder (tf2)」は仮想環境 tf2 でPythonプログラムを実行したいときに用いる。

ここで「Spyder (tf2)」をクリックし、Spyder を起動しよう。
このとき、「Kite をインストール (Insall Kite)」とか「Start Tour」などという画面が現れたら、「無視 (Dismiss)」 を選択すること。




Python プログラムを実行するための環境である Spyder が起動する。

通常は何のエラーも出ないのであるが、2023/6/12 に Spyder をインストールすると、下記のようなエラーが現われた。
(ちなみに、2023/6/15 以降に Spyder をインストールした場合、このエラーは現われない)



この問題を解決したい場合、「Anaconda Prompt (tf2)」を起動し、先頭に「(tf2)」がかかれたプロンプトで以下の2つの命令を順に実行すればよい。
これは、cryptography というライブラリのバージョンを一旦下げ、その後またバージョンを元に戻す働きがある。
conda install cryptography=38.0.4

上のコマンドが終了したら次のコマンドを実行。
「Proceed (y/[n])?」という質問には y を入力する必要がある。

conda install cryptography=39.0.1
さて、Spyder はデフォルトではメニューなどの文字が英語なのではないかと思う。
その場合、設定によりメニューを日本語に変更するとよい。

まず、メニューから「Tools」→「Preferences」を選択する。
下図のように現れたウインドウで「Application」→「Advanced settings」を選択してLanguageを日本語に設定する。
すると Spyder の再起動を促されるので、それに従えばメニュー等の文字が日本語になる。



さて、Spyder (tf2) が起動したら、メニューの「ファイル」→「開く」を選択しよう。
そこで、先程展開した mediapipe のサンプルプログラムを選択する。
具体的には、圧縮ファイルを展開して現れたフォルダ 「mediapipe-python-sample-main」 の中をたどると見付かる「sample_pose.py」を開く。

開くことにより、プログラミング言語 Python で書かれた骨格認識のサンプルプログラムが Spyder 上に表示される。

このプログラムを実行するためには、一つ準備が必要である。
Spyderのメニューから「実行」→「ファイルごとの設定」を選択すると、以下の画面が開く。
ウインドウのサイズが小さい場合はウインドウの縁をつかんで大きくすること。

そして、下図のように 「カスタム設定でファイルで実行」にチェックを入れてから、「コンソール」の項目で「外部システムターミナルで実行」にチェックをいれる。
この状態で「OK」ボタンをクリックすると、この設定が保存される。
なお、古い Spyder では「カスタム設定でファイルで実行」のチェックが存在しない場合があるが、その場合は「コンソール」→「外部システムターミナルで実行」のチェックだけで構わない。



そして、Spyderのメニューから「実行」→「実行」を選択すると、プログラムが実行される。
10年くらい前の PC だと、ダイナミック リンク ライブラリ (DLL) に関するエラーが出る可能性があるが、皆さんのPCならば大丈夫だろう。

実行に成功すれば、下図のように Windows のカメラからの映像中に含まれる人物の骨格を表示してくれる。
このとき、映像の画面に一緒に、黒い画面のコマンドプロンプトも起動していることもチェックしておくこと (これが先ほど設定した「外部システムターミナル」のこと)



なお、用いるカメラがノートパソコンの内蔵カメラの場合、すぐに映像が開くはずである。
しかし、USB の外付けカメラを用いている場合、起動までに 30 秒くらいかかる場合がある。
原因はわかっていないので当面は気にせずに 30 秒我慢して欲しい。

なお、プログラムを終了するには、黒い画面のコマンドプロンプト上で Ctrl-C (キーボードのCtrl キーを押しながら C) を実行すればよい。
あるいは、映像上でキーボードの ESC キーを押してもアプリケーションが終了する。

なお、 「mediapipe-python-sample-main」フォルダ内には、他にも以下のようにさまざまなサンプルプログラムがある。

sample_facedetection.py
sample_facemesh.py
sample_hand.py
sample_holistic.py
sample_objectron.py
sample_selfie_segmentation.py

ファイル名から動作が想像できるものも多いだろう。全て試しておくこと。
動作が良く分からない場合、MediaPipe の公式ページの図を見ておくと想像しやすいだろう。

その際、ファイルをSpyder で開いた上で、「外部システムターミナルで実行」の設定をしてから実行して試してみると良い。
「外部システムターミナルで実行」の設定をしないと、プログラム終了時にカメラの利用解放が適切に行われず、
プログラム終了ごとに Spyder を再起動しなければいけなくなる
ので注意。

ところで、卒論テーマ発表において、「ここでいう人物認識とは、『骨格認識+ポーズ認識』のこと」と伝えた。
このページで解説したのはこのうちの骨格認識の部分のみであることに注意して欲しい。
ポーズ認識に付いては、予備知識を得てからでないと分かりにくい部分があるので、本ページの解説はここまでとする。


おまけ:認識を実行するカメラを変更する

PCに複数のカメラが付いている場合 (典型的には、タブレット型PCの外向きカメラと内向きカメラ) 、
認識を実行するカメラを変更したいことがある。ここではその方法を2つ紹介しよう。

方法1

Spyderのメニューから「実行」→「ファイルごとの設定」を選択すると、いつも通りの設定画面が開く。
そこで、下図に記したように、「カスタム設定でファイルを実行」にチェックを入れてから、 と記して「OK」ボタンを押す。これは「0 番目のデバイス(カメラ)を用いてプログラムを実行するよう設定する」という意味になる。
これがデフォルトの動作である。

なお、カメラを使うので「コンソール」の「外部システムターミナルで実行」へのチェックが必要なのは既に述べた通りである。
さらに、古い Spyder では「カスタム設定でファイルを実行」のチェックが存在しないことがあることにも既に述べた。

さて、この数字の「0」の部分を「1」、「2」などと変更して「OK」を押すと、用いるカメラが「1番目」、「2番目」などの意味になる。
自分の用いたいカメラで認識が行われるよう、数字を変更し、設定を変更してみよう。



方法2

上に記した方法1は、どのプログラムでも対応しているものではない。ここでは、「方法1」が使えない場合に試すべき別の方法を記す。
Spyder で開かれているプログラム中で、下記の部分を見付けよう。
cap = cv.VideoCapture(cap_device)
プログラムによっては、「cap_device」の部分に異なる内容が書かれていることがあるが、気にする必要はない。

この部分に、下記のように直接数字 0, 1, 2....を書き込むようにすれば、それが「カメラ0」、「カメラ1」、「カメラ2」... という意味になる。
cap = cv.VideoCapture(0)

または

cap = cv.VideoCapture(1)

...など
「コマンドラインオプション」の仕組みを用いて変数 cap_device の中身を変更しているのが方法1、
変数 cap_device を無視して数字を直接書き込むのが方法2、ということになる。