2019年12月2日月曜日

本書の演習を Windows / macOS を用いて Anaconda 上の Spyder で実行する方法

1. はじめに

(2024.2 最新の環境で動作するよう加筆しました)
本書の演習を Windows / macOS で動作している Anaconda 上の Spyder で実行する方法に関する質問が時々あります。
Anaconda での実行を正式にサポートすることはできませんが、本ページでそのヒントをいくつか記します。

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

2. ツールのインストール

それでは、本書の演習をWindowsなどで実施するために必要な Anaconda のインストールと設定の方法を解説します。

まず、Anaconda は 2024年2月現在、こちらのページの末尾から、Python 3.11用のみがダウンロードできるようです。その 64 bit 版をダウンロードしてインストールします。

なお、インストール中に下記のエラーが出る場合、冒頭で触れた「ユーザー名に問題のある文字が含まれている」場合になります。このまま先に進めてもうまくいきませんので、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.


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



macOS に対するヒント
macOS では、Anaconda Prompt のかわりに macOS のターミナルを使います。


現れたプロンプトで各種ツールのインストール作業を始めます。ただし、最新のAnaconda環境でそのまま本書に必要なツールをインストールしようとすると、ツール同士のバージョンの衝突が起こりうまくインストールできません。そこで、「Pythonの仮想環境を作ってそこに必要なツールのインストールを行う」という方針にします。

なお、プロンプトの冒頭には「(base) C:Users\(ユーザー名)」という内容が書かれています。「(ユーザー名)」の部分は人によって異なります。
本ページ冒頭で「Windowsのユーザー名に日本語文字や半角スペースなどが含まれていると実行できません」と述べましたが、このユーザー名の部分に日本語文字などを含んではいけない、という意味です。
日本語文字などを含んだまま先に進めてもうまくいきませんので、Windowsでに日本語文字を含まないユーザーを作り直すしかありません。 「Microsoftアカウント」でユーザーを作成すれば、登録したメールアドレスの先頭数文字がユーザー名となるため安全だと思います(メールアドレスには日本語文字は含まれないため)。

さて、プロンプト上で下記のコマンドを実行して仮想環境を作成します。仮想環境に「tf2」という名称を付けていますが、これは「TensorFlowのバージョン2をインストールする仮想環境」という意味で付けました。さらに、仮想環境 tf2 で用いる Python のバージョンは 3.8 とします。3.8 にしたのは、安定性を重視したためです。
conda create -n tf2 python=3.8
なお、以後長いコマンドが続きます。ブラウザ上で上のコマンドをコピーし、下図のようにプロンプトの左上のアイコンをクリックして現れるメニューから「貼り付け」を選択すればコマンドを楽に実行できます。
なお、Windows 11 では、このようなメニューは現われないことが多いので、通常通りキーボードで Ctrl-V を入力して貼り付ければ良いでしょう。


貼り付けが完了した状態が下図で、この状態で「Enter」キーを押すことで、コマンドを楽に実行できるわけです。なお、このとき「Continue creating environment (y/[n])?」や「Proceed (y/[n])?」と聞かれたときは、どちらの場合もキーボードで「y」をタイプして「Enter」キーを押して作業を進めてください。



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


仮想環境の作成が完了したら、下記のコマンドを実行して作成した仮想環境「tf2」に入ります。
conda activate tf2
その結果、下図の状態になります。プロンプトの行頭が「(base)」から「(tf2)」に変化しており、環境が「base」から「tf2」に変わったことがわかります。


そのままの状態で、下記のコマンドを実行して、本書に必要なツールをインストールしましょう。このコマンドは特に長いので、注意してコピーして実行しましょう。先ほどと同様、 「Proceed (y/[n])?」と聞かれたときはキーボードで「y」をタイプして「Enter」キーを押して作業を進めてください。
conda install scikit-learn matplotlib pillow py-opencv tensorflow keras numpy=1.23.5 spyder console_shortcut toml
最後に「done」と表示されていれば、インストールに成功しています。
なお、終了時に下記のようなデバッグメッセージが現れた場合も、最後に「done」と表示されているので、インストールは問題なく完了しています。
- DEBUG menuinst_win32:__init__(199): Menu: name: 'Anaconda${PY_VER} ${PLATFORM}', prefix: 'C:\Users\neura\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\\neura\\anaconda3\\Scripts\\activate.bat', 'C:\\Users\\neura\\anaconda3\\envs\\tf2']
\ DEBUG menuinst_win32:__init__(199): Menu: name: 'Anaconda${PY_VER} ${PLATFORM}', prefix: 'C:\Users\neura\anaconda3\envs\tf2', env_name: 'tf2', mode: 'user', used_mode: 'user'
DEBUG menuinst_win32:create(323): Shortcut cmd is C:\Users\neura\anaconda3\pythonw.exe, args are ['C:\\Users\\neura\\anaconda3\\cwp.py', 'C:\\Users\\neura\\anaconda3\\envs\\tf2', 'C:\\Users\\neura\\anaconda3\\envs\\tf2\\pythonw.exe', 'C:\\Users\\neura\\anaconda3\\envs\\tf2\\Scripts\\spyder-script.py']
DEBUG menuinst_win32:create(323): Shortcut cmd is C:\Users\neura\anaconda3\python.exe, args are ['C:\\Users\\neura\\anaconda3\\cwp.py', 'C:\\Users\\neura\\anaconda3\\envs\\tf2', 'C:\\Users\\neura\\anaconda3\\envs\\tf2\\python.exe', 'C:\\Users\\neura\\anaconda3\\envs\\tf2\\Scripts\\spyder-script.py', '--reset']
done


macOS に対するヒント
macOS では、仮想環境の Python のバージョンを 3.7 にしないと、上記のインストールに失敗します。その場合、Python バージョン 3.7 で仮想環境を作り直します。


インストールが完了すると、スタートメニューの「Anaconda3 (64bit)」の項目には下図のように「Anaconda Prompt (tf2)」や「Spyder (tf2)」が追加されています。どちらも、仮想環境 tf2 で必要なツールです。「Anaconda Prompt (tf2)」は仮想環境 tf2 へツールをインストールしたいときに、「Spyder (tf2)」は仮想環境 tf2 でPythonプログラムを実行するときに用います。

最後に、画像処理に用いる opencv とじゃんけんシステムで音を鳴らすための playsound というライブラリをインストールしておきましょう。先頭が (tf2) のプロンプトのまま、下記のコマンドを実行します。
pip install opencv-contrib-python playsound==1.2.2

以上で本書の演習を実行するために必要なツールのインストールは終わりです。本書に記されているRaspberry Pi用の様々な設定やインストール作業は不要です。以下、本ページでは「Spyder (tf2)」で本書のプログラムを実行する方法を解説します。

macOS に対するヒント
macOS で tf2 環境の Spyder を実行するには、Anaconda Navigator で「Applications on」の部分で「tf2」を選択し、Spyder の Launch ボタンをクリックします。 または、ターミナルで
conda activate tf2
を実行してから
spyder
とコマンドで実行しても構いません。


なお、仮想環境 tf2 用のSpyder が起動して、インターフェースが日本語ではなかった場合、メニューから「Tools」→「Preferences」を選択し、現れたウインドウで「Application」→「Advanced settings」を選択してLanguageを日本語に設定してください。その際、再起動を促されますのでそれに従えばインターフェースが日本語になります。
また、「Install Kite?」などと聞かれた場合、「Dismiss (無視)」して構いません。

3. サンプルファイルの準備

次に、演習ファイルの用意です。まず、「書の内容を Pi Zero ~ Pi 5 で実行する方法」より、演習ファイル mlbb-sample-pi5.zip をダウンロードし、それが終わったら展開してください(ファイルを右クリックして「すべて展開」)。

さらに、カメラを用いる演習用に、「本書の演習をウェブカメラで実行する方法」にて紹介したウェブカメラ用の演習ファイル mlbb-webcam.zip をダウンロードし、こちらも展開してください。 そして、mlbb-webcam.zip を展開して現れるファイルを、全て本書の演習ファイルと同じフォルダに移動してください。これを行わないと正しく実行できない演習ファイルがあります。2個のファイルを上書きするか聞かれますが、上書きして構いません。

さて、サンプルの演習ファイルのあるフォルダにウェブカメラ用のファイルを加えると、「同じ番号のファイルが複数ある」状態になります。例えば、「ml-08-01」という番号がついたファイルは
  • ml-08-01-cameracheck.py
  • ml-08-01-cameracheck-webcam.py
の2つありますし、「ml-10-09」という番号のついたファイルも同様です。
  • ml-10-09-janken-deep.py
  • ml-10-09-janken-deep-webcam.py
このような場合、「webcam のついたファイルを使う」ようにしてください。上の例だと「ml-08-01-cameracheck-webcam.py」と「ml-10-09-janken-deep-webcam.py」ですね。
これ以外のファイルを実行するとエラーが出ますので注意してください。

以上でサンプルファイルの準備は完了です。

4. ファイルの実行に関する注意

あとは「Spyder (tf2)」からファイルを読みこんで実行するだけなのですが、いくつか注意がありますので順番に列挙します。
  • グラフ表示のあるプログラムでは、図のように「プロット」領域にグラフが現れます。



  • 7章最初に CUI で実行するじゃんけん (ml-07-01-janken-cui.py および ml-07-02-perceptron-cui.py) の実行には注意があります。まず、それらのファイルを開いた状態で「実行」→「ファイルごとの設定」を選択します。


    そした現れた画面で「カスタム設定でファイルを実行」にチェックを入れ、さらに「コンソール」の「外部システムターミナルで実行」を選択して「OK」してください。その設定をしてから実行しないと、プログラムを正しく終了できなくなります。 なお、古い Spyder では「カスタム設定でファイルを実行」のチェックが存在しない場合がありますがその場合は「コンソール」→「外部システムターミナルで実行」のチェックだけで構いません。

  • カメラを用いた演習、例えば ml-08-01-cameracheck.py と ml-08-01-cameracheck-webcam.py という同じ番号のファイルが複数見つかりますが、すべて末尾が「-webcam.py」という名前のファイルを選ぶようにしましょう。 これは上で mlbb-webcam.zip を展開した時に現れたファイルです。

    さらに、カメラを用いた演習でも「実行」→「ファイルごとの設定」で「カスタム設定でファイルを実行」にチェックを入れてから「コンソール」→「外部システムターミナルで実行」を選択してください。そうしないと、プログラム終了時にカメラが正常終了しません。

    また、カメラを用いた演習で手の形にが白く二値化されない場合、「書籍で用いたコマンドおよび追加情報」の「p.257 ml-08-02-binary.pyが手の形を反映していない場合」の項目を参考に、hmin、hmax、smin などのパラメータを調整する必要があります。

  • コマンドライン引数(ひきすう)の必要なプログラムの実行についてです。
    例えば、ml-08-03-learn.py の実行には下記のように「result.pkl」というコマンドライン引数をつける必要があるのでした。
    python3 ml-08-03-learn.py result.pkl
    
    これをSpyder で実現するためには、「実行」→「ファイルごとの設定」を開き、図のように「カスタム設定でファイルを実行」にチェックを入れ、さらに「一般設定」→「コマンドラインオプション」にチェックを入れてから、右側の入力欄に「result.pkl」と記入してOKボタンを押します。なお、古い Spyder では「カスタム設定でファイルを実行」のチェックが存在しない場合がありますがその場合は「一般設定」→「コマンドラインオプション」への記述だけで構いません。

    以上で演習ファイルにコマンドライン引数をつけて実行できます。文字通りこれは「ファイルごとの設定」ですので、演習ファイルを変更するごとに設定しなおす必要があります。

  • 9章で実行するじゃんけんシステム、ml-09-01-janken-webcam.py と ml-09-02-janken-shorten-webcam.pyは、「実行」→「ファイルごとの設定」で「カスタム設定でファイルを実行」にチェックを入れてから「コンソール」の「外部システムターミナルで実行」を選択して「OK」してください。そうしないと正常に終了できなくなります。コマンドライン引数への「result.pkl」の設定も必要です。

  • 10章最後に登場するじゃんけんシステムは、「実行」→「ファイルごとの設定」を開き、「カスタム設定でファイルを実行」にチェックを入れてから「外部システムターミナルで実行」を選択して「OK」してください。そうしないと正常に終了できなくなります。コマンドライン引数への「ml-hand-cnn.h5」の設定も必要です。


5. MediaPipe のサンプルプログラムの実行に関する注意

また、Anaconda の Spyder で「Raspberry Pi 5 でリアルタイムな姿勢推定と物体検出」の内容を実行したい場合の解説を行います。

まず、mediapipe のインストールが必要です。「Anaconda Prompt (tf2)」を起動し、先頭が (tf2) のコマンドプロンプトで下記のコマンドを実行してインストールします。
pip install mediapipe
その後、姿勢推定と物体検出を以下の手順で実行します。
<姿勢推定の場合>
  • 「mediapipe-python-sample」のサンプルファイルをダウンロードするときは、「こちらのリンク」の先で「Code」ボタン→「Download ZIP」とたどります。ZIPファイルをダウンロ―ド後は展開します。
  • 展開したプログラムのうち、ファイル名に「_picamera2.py」が含まれていないものは、ウェブカメラで実行できます。
  • どのプログラムを実行する場合も、「実行」→「ファイルごとの設定」において「外部システムターミナルで実行」を選択します。カメラの種類を変えたい場合は、コマンドラインオプションで「--device 1」などとカメラ番号をしていしてください。

<物体検出の場合>
  • 「mediapipe」のサンプルファイルをダウンロードするときは、「こちらのリンク」の先で「Code」ボタン→「Download ZIP」とたどります。ZIPファイルをダウンロ―ド後は展開します。
  • 展開したプログラムのうち、「object_detection/raspberry_pi」フォルダにある「detect.py」を実行します。その前に、「efficientdet_lite0.tflite」をダウンロードし、「detect.py」と同じフォルダに保存しておきましょう。
  • ファイル実行時の設定として、「実行」→「ファイルごとの設定」において「外部システムターミナルで実行」を選択します。さらに、 コマンドラインオプションで「--model efficientdet_lite0.tflite」を指定します。 カメラの種類を変えたい場合は、コマンドラインオプションを「--model efficientdet_lite0.tflite --cameraId 1」などとしてカメラ番号を指定してください。

0 件のコメント:

コメントを投稿