Anaconda で機械学習用の環境を作り、mediapipe による骨格認識を試してみる
本ページでは、Anaconda というツールをインストールし、Windows 上でプログラミング言語 Python (パイソン) を用いて機械学習を行う環境を作成する。
作成した環境を用いて、mediapipe と呼ばれるライブラリを用いた骨格認識を試してみる。
なお、本ページの内容はWindowsのユーザー名に日本語文字や半角スペースなどが含まれていると実行できない。
ユーザー名に問題のある文字が含まれているかどうかはわかりにくいので、ページの途中で示す確認方法で確認すること。
この問題を回避するには、Windowsで名前がアルファベットと記号のみのユーザーを作り直すしかないので注意すること。
また、本ページには、ときどき「macOS に対するヒント」という項目が現われる。Windows を利用している学生はこの部分を読み飛ばすこと。
Anaconda のインストール
まず、Pythonという言語で機械学習用のプログラムを実行する環境である Anaconda ダウンロードしてインストールしよう。
下記のリンクをクリックして Anaconda のダウンロード用ページにアクセスする。
ページ末尾までスクロールすると、下記のような内容が現れる。
64ビット版 Windows を用いている場合、Python 3.9 用の「64-Bit Graphical Installer」をクリックし、インストール用のファイルをダウンロードする。
macOS の場合も該当する 64-Bit Graphical Installer をダウンロードするのだが、Intel チップ用の通常版と M1 チップ用版があることに注意。
適切な方をダウンロードする必要があるが、M1 チップ搭載の mac では本ページの内容を最後まで実行できないだろう。
M1 チップ搭載の mac で実行する方法がないわけではないが、私は未確認だし、皆さんには恐らく難しい。
ダウンロードが完了すると、「ダウンロード」フォルダなどにインストール用のファイルがダウンロードされている。
Windows 版は執筆時点では「Anaconda3-2022.05-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 (Anaconda3)」をクリックして実行しよう。
現れた下記の画面がプロンプトであり、ここでコマンド(命令)を実行することで、各種ツールのインストールを行う。「kanamaru」の部分はユーザー名であるので人により異なる。
本ページ冒頭で「Windowsのユーザー名に日本語文字や半角スペースなどが含まれていると実行できない」と述べたが、このユーザー名の部分に日本語文字などを含んではいけない、という意味である。
日本語文字などを含んだまま先に進めてもうまくいかないので、Windowsでに日本語文字を含まないユーザーを作り直すしかない。
「Microsoftアカウント」でユーザーを作成すれば、登録したメールアドレスの先頭数文字がユーザー名となるため安全だと思う(メールアドレスには日本語文字は含まれないため)。
macOS に対するヒント
macOS では、Anaconda Prompt のかわりに macOS のターミナルを使う。ターミナルが何かわからない学生は自分で調べること。
ターミナルを起動すると、デフォルトで
(base) ユーザー名@マシン名 ユーザーの位置 %
が表示されており、Windows の Anaconda Prompt と同等の状態になっている。
さて、プロンプト上で下記のコマンドを入力して実行して、「仮想環境」と呼ばれるものを作成する。
「仮想環境」とは、Anacondaのデフォルトの環境とは別に、本ページの演習を実行するために作成する環境である。
なお、仮想環境に「tf2」という名称を付けているが、これは「TensorFlow と呼ばれるディープラーニング用ツールのバージョン2を利用するための仮想環境」という意味で付けている。
また、仮想環境 tf2 で用いる Python のバージョンは 3.9 ではなく 3.8 としている。3.9 ではバージョンが新しすぎるため、トラブルがあるかもしれないと考えたためである。
conda create -n tf2 python=3.8
macOS に対するヒント
私の macOS 10.15 / 12.4 (Intel) で試したところ、下記のように python バージョン 3.7 を用いなければ、後のインストールがうまく行かなかった。macOS の他のバージョンでは未確認である。
conda create -n tf2 python=3.7
なお、一度作ってしまった tf2 環境を削除してやり直したい場合、先頭が (base) のターミナルで下記を実行すればよい。
conda remove -n tf2 --all
なお、以後長いコマンドが続く。ブラウザ上で上のコマンドをコピーし、
下図のようにプロンプトの左上のアイコンをクリックして現れるメニューから「貼り付け」を選択すればコマンドを楽に実行できるので活用すべきである。
以下でその方法を解説する。
下図は、上に記した実行すべきコマンドをコピーした後、プロンプト上に貼り付けようとしているところである。
プロンプト左上のアイコンをクリックして「編集」→「貼り付け」とたどっていることがわかる。
貼り付けが完了した状態が下図である。この状態でキーボードの「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 numpy=1.23.5 keras 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
macOS に対するヒント
既に述べたように、macOS 10.15 / 12.4 で python バージョン 3.8 で仮想環境を作ってしまった場合、done が表示されず、このインストールは失敗する。python3.8 の tf2 仮想環境を一旦削除し、もう一度 python3.7 で仮想環境を作り直す必要がある。
最後に、プロンプト (先頭に (tf2) と記されているもの) で下記のコマンドを実行して、mediapipe というライブラリをインストールしよう。骨格認識に必要なライブラリである。
pip install mediapipe
しばらく待てば mediapipe のインストールは完了する。
macOS に対するヒント
M1 チップ搭載の mac では mediapipe のインストールに失敗するはずである。
M1 チップ搭載の mac に mediapipe をインストールする方法を解説している方がいるが (
こちら)、
私は試していないし、恐らく皆さんには難しいのではないかと思う。
mediapipe のインストールが終わったらツールのインストールは完了であるので、プロンプトを右上の×ボタンで閉じて構わない。
サンプルプログラムのダウンロードと展開
Anaconda および Anaconda で用いるツールのセットアップが終わったので、
次は、Anaconda 上で実行するためのプログラムをダウンロードしよう。
用いるのは、映像中の人間の顔や手、物体等を機械学習により認識するためのライブラリである MediaPipe である。
公式ページのアニメーションを見れば、何を実現するためのツールであるかはイメージできるだろう。
この MediaPipe を動作させるために、Kazuhito00 氏により作成されたサンプルプログラムを、
下記のサイトから以下の解説にしたがってダウンロードしよう。
まず、上記ページを開いたら、緑のボタンを「Code」→「Download ZIP」とクリックしよう。
そうすると、たくさんのファイルを圧縮して一つにまとめた「mediapipe-python-sample-main.zip」というファイルがダウンロードされる。
さて、ダウンロードされた圧縮ファイル (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)」という画面が現れたら、「無視 (Dismiss)」 を選択すること。
Python プログラムを実行するための環境である Spyder が起動する。
macOS に対するヒント
macOS で、tf2 環境の spyder を起動するには、ターミナルで
conda activate tf2
を実行し、tf2 環境に入ってから (すなわち、ターミナルの先頭が (tf2) の状態で)
spyder
というコマンドを実行すれば良い。
Spyder はデフォルトではメニューなどの文字が英語なのではないかと思う。
その場合、設定によりメニューを日本語に変更するとよい。
まず、メニューから「Tools」→「Preferences」を選択する。
下図のように現れたウインドウで「Application」→「Advanced settings」を選択してLanguageを日本語に設定する。
すると Spyder の再起動を促されるので、それに従えばメニュー等の文字が日本語になる。
なお、メニュー上でアイコンと文字が重なるなど、若干の問題点があるはずだが、余り気にせず使い続けることにしよう。
さて、Spyder (tf2) が起動したら、メニューの「ファイル」→「開く」を選択しよう。
そこで、先程展開した mediapipe のサンプルプログラムを選択する。
具体的には、圧縮ファイルを展開して現れたフォルダ 「mediapipe-python-sample-main」 の中をたどると見付かる「sample_pose.py」を開く。
開くことにより、プログラミング言語 Python で書かれた骨格認識のサンプルプログラムが Spyder 上に表示される。
このプログラムを実行するためには、一つ準備が必要である。
Spyderのメニューから「実行」→「ファイルごとの設定」を選択すると、以下の画面が開く。
ウインドウのサイズが小さい場合はウインドウの縁をつかんで大きくすること。
そして、下図のように
「カスタム設定でファイルで実行」にチェックを入れてから、「コンソール」の項目で「外部システムターミナルで実行」にチェックをいれる。
この状態で「OK」ボタンをクリックすると、この設定が保存される。
なお、古い Spyder では「カスタム設定でファイルで実行」のチェックが存在しない場合があるが、その場合は「コンソール」→「外部システムターミナルで実行」のチェックだけで構わない。
そして、Spyderのメニューから「実行」→「実行」を選択すると、プログラムが実行される。
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のメニューから「実行」→「ファイルごとの設定」を選択すると、いつも通りの設定画面が開く。
そこで、下図に記したように、「カスタム設定でファイルを実行」にチェックを入れてから、
- 「一般設定」の「コマンドラインオプション」にチェックを入れる。
- その横の空欄に「 --device 0 」と記す。
と記して「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、ということになる。