2024年2月19日月曜日

本書の内容を Pi Zero ~ Pi 5 で実行する方法

サンプルプログラムについて

Pi 5 対応のサンプルプログラム、付録PDFは下記のリンクからダウンロードしてください。サンプルプログラムを圧縮したファイル「 mlbb-sample-pi5.zip 」の「-pi5」の部分が「Pi 5 対応」を意味しています。

はじめに

本ページでは、金丸隆志著「カラー図解 Raspberry Piではじめる機械学習」(講談社ブルーバックス)の内容を Raspberry Pi Zero ~ Raspberry Pi 5 で動作させるための補足情報を紹介します。

本書はこれまで、「本書出版時(2018年3月)から最新の OS まで、可能な限り同じサンプルプログラムが動作する」という状態を目指し、サンプルファイルの更新を続けてきました。
しかし、2023年9月に海外で発表された Raspberry Pi 5 (以下 Pi 5) では、2023年10月にリリースされた Bookworm という OS 以降でしか動作しません。Bookworm では以前の OS とカメラを利用する仕組みが違う、Theano というライブラリを利用できなくなっている、など、過去の OS とは大きく異なります。
そのため、過去の OS と同じプログラムを動作させることが困難になってきています。

そこで、この機会にすべてのプログラムを「Pi 5 で問題なくプログラムが動作すること」を基準に一新し、このページでその動作方法を解説することにしました。
書籍とこのページだけを見れば、全ての演習を Pi Zero ~ Pi 5 で実行できるようになります。

対象とする OS は、以下のように 2023年5月にリリースされた Rsapberry Pi OS (Bullseye) の最終版と、2023年10月にリリースされた Bookworm 以降の 64-bit OS です。64-bit OS を用いないと、第10章の演習を実行することができません。

日付バージョンOSバージョン
2023/5/3Raspberry Pi OS 2023-05-03Bullseye (最終版)
2023/10/10Raspberry Pi OS 2023-10-10Bookworm
2023/12/5Raspberry Pi OS 2023-10-10

64-bit OS を利用可能な Raspberry Pi の機種は、主に、Pi 3~5 および Pi Zero 2W です(ただし、Pi Zero 系は上級者向けなのでお勧めしません)。64-bit OS が動作しない機種では、以下の古いOSに対する情報に基づき、32-bit の Legacy な Bullseye OS で第10章の演習を実行する必要がありますので、ご了承ください。

本ページで表示するコマンドの利用方法

本ページには、本書の演習を実行するために必要なコマンドを全て記し、さらに、本書への追加情報を記していきます。

コマンドを全て本ページに記すことには、二つの目的があります。

一つ目の目的は、ソフトウェアのインストールコマンドが本書刊行後に変更された場合に、最新情報を提供することです。ですから、本書のコマンドと本ページのコマンドが異なる場合は、本ページの情報が最新であるとお考え下さい。実際、書籍では Python2 用のインストールコマンドを記しましたが、本ページでは Python3 用のインスト―ルコマンドに変更しております。本ページのコマンドをコピー&貼り付けによりご利用ください

二つ目の目的は、コマンドの入力がうまくいかないときのために、コマンドをコピーできる形式で提供することです。

本ページのコマンドをコピーにより活用するためには、まずRaspberry Pi上のブラウザ(Chromium)で本ページを開きます。

そして、コピーしたいコマンドをマウスでなぞり色を反転してください。その状態からそのコマンドをコピーするには下記の二つの方法のうちどちらかを実行してください。
  • 色を反転した領域をマウスで右クリックして「コピー」を選択する
  • キーボードの「Ctrl」キーを押しながら「c」キーを押す(Ctrl-c)
そして、コピーされたコマンドをターミナルソフトウェアに貼り付けるには、下記の三つの方法のうちどれかを実行してください。
  • LXTerminalのメニューから「編集」→「貼り付け」を選択する
  • LXTerminal上でキーボードの「Ctrl」キーと「Shift」キーを押しながら「v」キーを押す(Ctrl+Shift+v)
  • LXTerminal上でマウスのホイールを押し込む(ただし、この方法は正確には「コピーされた文字を貼り付ける」のではなく「マウスで色が反転された文字を貼り付ける」という動作になります)
いずれかの方法でLXTerminalにコマンドが貼り付けられたら、そのままキーボードの「Enter」キーを押せばコマンドが実行されます。

なお、2つのコマンドが2行にわたって連続して書かれている場合、コピー、貼り付け、実行はコマンド一つごとに行ってください。

3章

p.66 圧縮されたサンプルファイルの展開に関する注意

圧縮ファイルを展開するためのソフトウェアのデフォルトの設定が書籍から変化していますので利用の際は注意が必要です。
下図(左)のように、展開先のデフォルトが「/tmp」とされ、また、展開時に自動的にフォルダが作られるようになっています。
これを、下図(右)のように
  • 展開先に「 /home/pi 」または「 /home/pi/bluebacks 」と記入。ただし、2022年4月にリリースされた OS よりデフォルトユーザー pi は廃止されているため、 この記述の pi の部分は、皆さんが作成したユーザー名で置き換変える必要があります。すなわち、「kanamaru」というユーザーを作成したのなら、「 /home/kanamaru 」や「 /home/kanamaru/bluebacks 」となる、ということです。
  • 「Ensure a containing directory」のチェックを外す
の2点を行ってから「展開」ボタンを押すようにしましょう。展開先に記す文字は、このページからコピー (Ctrl-c) して貼り付ける (Ctrl-v) と安心です。



p.68 インストールできるソフトウェアの一覧を更新するコマンド

sudo apt update

p.68 scikit-learnをインストールするためのコマンド

sudo apt install python3-sklearn

p.70:開発環境IDLEの代替としてThonny Python IDEを用いる方法

本書で解説した開発環境IDLEは既に Raspberry Pi OS に含まれていません。より簡単にPythonプログラムを実行する方法として、デフォルトでインストール済の「Thonny Python IDE」を用いる方法をここで紹介します。

Thonny Python IDEはpython3用のプログラムを実行するための環境です。本書のプログラムはPython3での実行をサポートしていますので問題なく実行できます。 本ページに記したコマンドのコピー&貼り付けにより本書の演習を行うと、自然と Python 3 で演習を行うことになります。

さて、メニューの下図に示されている「Thonny Python IDE」をマウスでクリックするとThonny Python IDEが起動します。


次図のように、「LOAD」がファイルの読み込み、「RUN」がプログラム実行、「STOP」がプログラム停止であることを理解すれば問題なく利用できるでしょう。

プログラムの停止は、「STOP」ボタンによる方法以外に、「Shell」と書かれた領域の上でキーボードの「Ctrl-c」によりプログラムを終了するという方法もあります。なお、Thonnyには「時々Ctrl-cが効かなくなる」という不具合があるようなので、そういうときは「STOP」ボタンでプログラムを停止すると良いでしょう。


Thonny Python IDEを用いると、8~10章で取り扱うOpenCVを用いたプログラムもIDEから実行できるというメリットがあります(IDLEでは画像処理プログラムのみコンソールから起動させたのでした)。

ただし、Thonny Python IDEを用いるとコマンドライン引数が必要なプログラムの実行に注意が必要になりますのでここで注意しておきます。

コマンドライン引数は、8章で初めて登場するものです。プログラム実行時のコマンドで例えば「python3 ml-08-03-learn.py result.pkl」のように、ファイル名「ml-08-03-learn.py」の後に付加する「result.pkl」の部分のことを指します。
この場合は、学習後の結果を保存するファイル名を「result.pkl」とするためにこのコマンドライン引数を与えています。 Thonny Python IDEでコマンドライン引数を用いるには下記の手順に従ってください。

  • 右上の「Switch to regular mode」というリンクをクリックすることで、ユーザーインターフェースをシンプルモードからレギュラーモードに変更する(Thonny Python IDEの再起動が必要)
    (後で元に戻したいときはTools→Option→General→UI modeを「simple」に)
  • レギュラーモードにしかないメニューが現れるので、「View」→「Program arguments」にチェックする(Program argumentsとはコマンドライン引数のことを表す)
  • 右上に現れた小窓に必要なコマンドライン引数を記入してからプログラムを実行
    (ml-08-03-learn.pyの場合は学習後の結果を保存するファイル名「result.pkl」を記す)

以上で、下図のように「python3 ml-08-03-learn.py result.pkl」というコマンドを実行したのと同じ効果がThonny Python IDEで得られます。なお、「Program arguments」の部分はコマンドライン引数が不要なプログラムでは空欄に戻して実行してください。



p.75 ml-03-01-version.pyの実行コマンド

本ページではPythonプログラムの実行コマンドも掲載しますが、本書で記したように、「TAB」キーによる補完機能をマスターすることをお勧めします。 Python3での実行コマンドはこちらです。
python3 ml-03-01-version.py

4章

p.153 ml-05-01-2feat3class-nn.pyを実行すると書籍と異なる図が現れる

ml-05-01-2feat3class-nn.pyは毎回同じ乱数系列を利用するため、常に同じ結果を返すとp.153で述べました。 そのこと自体は正しいのですが、scikit-learnのバージョンがアップデートされた影響で、書籍の図5-7と異なる図が皆さんに表示されるようになりました。

その理由は、scikit-learnのバージョンが変わり学習の終了の判定条件が変更されたからと考えられますが、これは p.153で「将来のscikit-learnのバージョンアップにより結果が変わる可能性がないとは言えません」と記した通り、 予想されていたことです(より細かく言えば、tol=0.00002 とすると、書籍の図5-7とほぼ同じ図が現れます)。

ですので、図5-7の違いについては気にせずにお読みいただいて構いません。

p.168 変更するmax_iterの値について

168ページにて、 ml-05-02-4feat3class-nn.pyで長時間実験を行うために、max_iterとtolを変更します。 このうち、max_iterにセットする値は、書籍に記したように 100000 (0が5個) ですのでご注意ください。
max_iter を 10000 (0が4個) としてしまうと、正解率100%に達しません

p.169 ml-05-02-4feat3class-nn.pyで長時間実験を行う際の警告について

ml-05-02-4feat3class-nn.pyで長時間実験を行う際、コンソールには 「Stochastic Optimizer: Maximum iterations reached and the optimization hasn't converged yet.」 という警告が現れます。
158ページに記しましたように、これは「tolの条件が満たされる前に最大エポックに達してしまった」ことを示す警告ですが、 それを意図した実験でしたので、158ページの長時間実験と同様にこの警告は無視して構いません。

6章

p.195 ImageTKのインストール用コマンド

2つの命令がありますので、1つずつ順番に実行してください。なお、現在の OS ではこのプログラムはインストール済だと言われることが多いでしょう。
sudo apt update
sudo apt install python3-pil.imagetk

8章

p.243 カメラについて

公式カメラモジュールをまだ購入しておらず、市販のウェブカメラをお持ちだという方は、まず「本書の演習をウェブカメラで実行する方法」を試してみるのも良いでしょう。

以下、Raspberry Pi のカメラモジュールの利用について解説します。 Raspberry Pi 用のカメラモジュールは、現在では下図のように バージョン 1 から バージョン 3 までの 3 バージョンがあります。
左から、バージョン1(基板が四角)、バージョン2(基板の角が丸く、レンズ周辺が黒)、バージョン3(基板の角が丸く、レンズ周辺が銀)です。基板上にもバージョンの記載がありますね。どのバージョンでも動作させることができます。

Raspberry Pi 1 から Pi 4 でしたら、カメラモジュールの Raspberry Pi 本体への取り付けは、本書記載の通り「(ケーブルの)端子面がRaspberry PiのmicroSDカードの方を向くように」取り付けます。

一方、Raspberry Pi Zero および Pi 5 の場合、カメラモジュールの取り付けにはいくつかの注意があります。

まず、カメラモジュールに取り付けられているケーブルを、Pi Zero および Pi 5 に対応したものに交換する必要があります。例えば下記のものは Pi Zero でも Pi 5 でも利用可能です。 Pi Zero 用ケーブルでRaspberry Pi Zero WH にカメラモジュールを取りつけた様子が下図です。Raspberry Pi 本体に向かってケーブルが細くなっているのがわかるでしょうか。


専用ケーブルをカメラに取り付ける際、金属が露出した端子面を緑色の基板の方を向くようにします。基板上のカバーを引き出し、ケーブルを差し込んだ後でカバーを押し込むことでケーブルが固定されます。
専用ケーブルを Raspberry Pi 本体に取り付ける際、Pi Zero の場合はやはり金属が露出した端子面を緑色の基板の方を向くようにします。
Pi 5 の場合は、下図のように「金属が露出した端子面が USB 端子側を向くように」取り付けます。これは Pi 1~Pi 5とは逆向きですので注意してください。
また、Pi 5 にはカメラを取り付けられる場所が 2 箇所ありますが、「CAM/DISP 0」と書かれた方に接続しましょう。

なお、どの Raspberry Pi を用いるにせよ、カメラのコネクタは壊れやすいので、両手で慎重に開け閉めしましょう。私は片手で雑に扱っていて壊したことがあります。

p.248 OpenCVのインストール

2つの命令がありますので、1つずつ順番に実行してください。
sudo apt update
sudo apt install python3-opencv

p.250 ml-08-01-cameracheck.pyの実行コマンド

Python3で演習を実行するためのコマンドはこちらです。
python3 ml-08-01-cameracheck.py

p.257 ml-08-02-binary.pyの実行コマンド

Python3で演習を実行するためのコマンドはこちらです。
python3 ml-08-02-binary.py

p.257 ml-08-02-binary.pyが手の形を反映していない場合

ml-08-02-binary.pyが手の形を反映していない場合、p.258「手の形が綺麗に切り出せないときの対処法」に基づいてプログラム中のパラメータhmin、hmax、sminの値を調整しなければなりません。 著者の感覚として、様々なツールが更新されるにと伴い、執筆時に比べて適切なパラメータの値が変化しているような印象があります。

典型的には、下記のパターンでの値の変更で改善されるケースが多いでしょう。書籍p.262の図8-7に基づいて述べます。
  1. 図8-7のs_binaryが手の形を含んでいる場合
    この場合、hmaxの調整のみで良いでしょう。例えば手の形が欠けている場合、hmaxをデフォルトの30から35などのように大きくすれば、手の欠けが小さくなります。
  2. 図8-7のs_binaryが手の形を全く反映していない場合
    この場合、S成分による二値化は smin =0 とすることで無効にした方が良いでしょう。その上で hmax の調整を行い、手の形が再現されるようにします。
  3. 図8-7のs_binaryがほぼ手の形を再現している場合
    この場合、hmin=-1としてH成分による認識を無効にし、S成分のみの認識してみると綺麗に手の形が現れることがあります。
なお、このようなhmin、hmax、sminの調整は、手の形の認識を含むプログラム(じゃんけんプログラムも含む)の全てで行う必要がありますのでご注意ください。

p.259 ml-08-02-binary.pyを編集するためのコマンド

mousepad ml-08-02-binary.py

p.275 ml-08-03-learn.pyの実行コマンド

Python3で演習を実行するためのコマンドはこちらです。
python3 ml-08-03-learn.py result.pkl

p.286 ml-08-04-recognition.pyの実行コマンド

Python3で演習を実行するためのコマンドはこちらです。
python3 ml-08-04-recognition.py result.pkl

9章

p.293 mpg321をインストールするためのコマンド

2つの命令がありますので、1つずつ順番に実行してください。
sudo apt update
sudo apt install mpg321

p.295 音声の出力先をピンジャックにする方法 (2023-10-10 以降の Raspberry Pi OS の場合)

2023-10-00 以降の Raspberry Pi OS では、音声の出力先をピンジャックにする方法が変わっております。 もし、デフォルトでピンジャックから音が出ていない場合、以下の指示に従ってください。なお、raspi-config コマンドを実行中は、キーボードの Esc キーが「戻る」に対応しますので、困ったら Esc キーを何度か押してみると良いでしょう。
  1. ターミナルで「 sudo raspi-config 」コマンドを実行し、設定画面を開く
  2. キーボードの「↓」キーを五回押し、「6 Advanced Options」にフォーカスを合わせる
  3. キーボードの「Enter」キーを押し、「6 Advanced Options」に入る
  4. キーボードの「↓」キーを六回押し、「A7 Audio Config」にフォーカスを合わせる
  5. キーボードの「Enter」キーを押し、「A7 Audio Config」に入る
  6. キーボードの「上」キーを一回押し、「1 PulseAudio」にフォーカスを合わせる
  7. キーボードの「Enter」キーを押し、「1 PulseAudio」を選択する
  8. キーボードの「Enter」キーを押し、「了解」を選択する
  9. キーボードの「TAB」キー二回を押し、「Finish」にフォーカスを合わせる
  10. キーボードの「Enter」キーを押すと、再起動され設定が有効になる


p.296 ml-09-01-janken.pyの実行コマンド

GUIを用いたじゃんけんシステムです。Python3で演習を実行するためのコマンドはこちらです。
python3 ml-09-01-janken.py result.pkl
このじゃんけんシステムにロボットハンドを追加し、ディスプレイないではなく現実世界でじゃんけん勝負する方法を 「人間の手を予測するじゃんけんシステムにロボットハンドを追加する」に示しましたので、電子工作に興味のある方はご覧ください。

p.300 ml-09-02-janken-shorten.pyの実行コマンド

GUIを用いたじゃんけんシステムの音声短縮版です。Python3で演習を実行するためのコマンドはこちらです。
python3 ml-09-02-janken-shorten.py result.pkl

10章

10章全般 kerasとTensorFlowの利用について

本書では、10章のディープラーニングの演習のためにkerasというライブラリとTheanoというバックエンドを組み合わせて用いました。
しかし、Theano は現在開発が終了しており、OS Bookworm ではインストールもできなくなってしまいました。

そこで、10章の演習は、kerasと組み合わせることができるバックエンドとして Thenao ではなく TensorFlow を用いることにします。 ただし、64-Bit 版 OS でしか動作しませんので、その点はご了承ください。64-Bit OS を利用可能なのは、Pi 3/4/5/Zero 2W です。 Tensorflow のインストール法は書籍に記されておりませんので、以下の解説を見てください。

TensorFlow 2 のインストール方法 (Bookworm 64-bit 版の場合)

Raspberry Pi OS Bullseye 64-bit 版で、TensorFlow 2 系のパッケージをインストールするには、以下の8個のコマンドを順に実行します。 PINTO0309 (Katsuya Hyodo) さんのビルドした TensorFlow 2.12 の 64-bit 版がインストールされます。
sudo apt install libhdf5-dev libc-ares-dev libeigen3-dev gcc gfortran libgfortran5 libatlas3-base libatlas-base-dev libopenblas-dev libblas-dev liblapack-dev cython3 libatlas-base-dev openmpi-bin libopenmpi-dev python3-dev python3-h5py

sudo pip3 install keras_applications==1.0.8 --no-deps --break-system-packages

sudo pip3 install keras_preprocessing==1.1.2 --no-deps --break-system-packages

sudo pip3 install numpy==1.24.4 --break-system-packages

sudo pip3 install pybind11==2.9.2 --break-system-packages

pip3 install -U --user six wheel mock --break-system-packages

wget https://github.com/PINTO0309/Tensorflow-bin/releases/download/v2.12.0rc0/tensorflow-2.12.0rc0-cp311-none-linux_aarch64.whl

sudo -H pip3 install tensorflow-2.12.0rc0-cp311-none-linux_aarch64.whl --break-system-packages
全てのコマンドが無事終了すれば インストールは終わりです。なお、TensorFlow 2.3 以降では keras は TensorFlow 専用となっていますので、.keras/keras.json による設定は必要ありません。

TensorFlow 2 のインストール方法 (Bullseye 64-bit 版の場合)

Raspberry Pi OS Bullseye 64-bit 版で、TensorFlow 2 系のパッケージをインストールするには、以下の11個のコマンドを順に実行します。 PINTO0309 (Katsuya Hyodo) さんのビルドした TensorFlow 2.9 の 64-bit 版がインストールされます。

なお、下記のコマンドを実行すると、numpy のバージョンが新しくなる関係で theano が動作しなくなりますのでご了承ください。
sudo apt install libc-ares-dev libeigen3-dev gfortran libopenblas-dev libopenblas-base cython3 openmpi-bin 

sudo pip3 install keras_applications==1.0.8 --no-deps

sudo pip3 install keras_preprocessing==1.1.2 --no-deps

sudo pip3 install numpy==1.22.3

sudo pip3 install h5py==3.6.0

sudo pip3 install pybind11==2.9.2

pip3 install -U --user six wheel mock

wget "https://raw.githubusercontent.com/PINTO0309/Tensorflow-bin/main/previous_versions/download_tensorflow-2.9.0-cp39-none-linux_aarch64.sh"

chmod +x download_tensorflow-2.9.0-cp39-none-linux_aarch64.sh

./download_tensorflow-2.9.0-cp39-none-linux_aarch64.sh

sudo -H pip3 install tensorflow-2.9.0-cp39-none-linux_aarch64.whl
全てのコマンドが無事終了すれば インストールは終わりです。なお、TensorFlow 2.3 以降では keras は TensorFlow 専用となっていますので、.keras/keras.json による設定は必要ありません。

10.4 アヤメの分類

p.321 ml-10-01-iris-deep-learn.pyの実行コマンド(アヤメの学習)

Python3で演習を実行するためのコマンドはこちらです。学習には時間がかかるので実行することを必ずしもお勧めしません。
python3 ml-10-01-iris-deep-learn.py result-iris.h5

p.327 ml-10-02-iris-deep-load.pyの実行コマンド(自分で作った学習済ファイルを用いる場合)

Python3で演習を実行するためのコマンドはこちらです。
python3 ml-10-02-iris-deep-load.py result-iris.h5

p.327 ml-10-02-iris-deep-load.pyの実行コマンド(配布された学習済ファイルを用いる場合)

Python3で演習を実行するためのコマンドはこちらです。
python3 ml-10-02-iris-deep-load.py ml-iris-deep.h5

10.6 手書き数字の分類

p.351 ml-10-03-digits-cnn-learn.pyの実行コマンド(手書き数字の学習)

Python3で演習を実行するためのコマンドはこちらです。学習には時間がかかるので実行することを必ずしもお勧めしません。
python3 ml-10-03-digits-cnn-learn.py result-digits.h5

p.354 ml-10-04-digits-cnn-load.pyの実行コマンド(自分で作った学習済ファイルを用いる場合)

Python3で演習を実行するためのコマンドはこちらです。正解率を表示するプログラムです。
python3 ml-10-04-digits-cnn-load.py result-digits.h5

p.354 ml-10-04-digits-cnn-load.pyの実行コマンド(配布された学習済ファイルを用いる場合)

Python3で演習を実行するためのコマンドはこちらです。正解率を表示するプログラムです。
python3 ml-10-04-digits-cnn-load.py ml-digits-cnn.h5

p.356 ml-10-05-digits-cnn-gui.pyの実行コマンド(自分で作った学習済ファイルを用いる場合)

Python3で演習を実行するためのコマンドはこちらです。マウスで描いた数字を分類するプログラムです。
python3 ml-10-05-digits-cnn-gui.py result-digits.h5

p.356 ml-10-05-digits-cnn-gui.pyの実行コマンド(配布された学習済ファイルを用いる場合)

Python3で演習を実行するためのコマンドはこちらです。マウスで描いた数字を分類するプログラムです。
python3 ml-10-05-digits-cnn-gui.py ml-digits-cnn.h5

p.357 ml-10-06-digits-cnn-gui-mod.pyの実行コマンド(自分で作った学習済ファイルを用いる場合)

Python3で演習を実行するためのコマンドはこちらです。マウスで描いた数字を分類するプログラムです。数字の位置と大きさを補正するバージョンです。
python3 ml-10-06-digits-cnn-gui-mod.py result-digits.h5

p.358 ml-10-06-digits-cnn-gui-mod.pyの実行コマンド(配布された学習済ファイルを用いる場合)

Python3で演習を実行するためのコマンドはこちらです。マウスで描いた数字を分類するプログラムです。数字の位置と大きさを補正するバージョンです。
python3 ml-10-06-digits-cnn-gui-mod.py ml-digits-cnn.h5
なお、このプログラムをTensorFlow.jsというライブラリによりブラウザで体験するデモンストレーションを作成してみました。 「手描き数字認識をTensorFlow.jsによりブラウザで実行してみよう」で解説しておりますので、興味のある方はお試しください。

10.6 じゃんけんの手の分類

p.368 ml-10-07-hand-cnn-learn.pyの実行コマンド(じゃんけんの手の学習)

Python3で演習を実行するためのコマンドはこちらです。学習には時間がかかるので実行することを必ずしもお勧めしません。
python3 ml-10-07-hand-cnn-learn.py result-hand.h5
なお、このコマンドの実行時にAttributeErrorが出る場合、学習用の手の画像が格納されているml-learnディレクトリがプログラムml-10-07-hand-cnn-learn.pyと同じ位置に存在しないためであると考えられます。 これは圧縮されたサンプルファイルを展開すると現れるディレクトリです。ご確認ください。

p.371 ml-10-08-hand-cnn-load.pyの実行コマンド(自分で作った学習済ファイルを用いる場合)

Python3で演習を実行するためのコマンドはこちらです。二値化されたカメラ映像と手の分類結果を表示するプログラムです。
python3 ml-10-08-hand-cnn-load.py result-hand.h5
二値化された映像が手の形を全く反映していない場合、本ページの「p.257 ml-08-02-binary.pyが手の形を反映していない場合」に基づき、プログラム中(この場合 ml-10-08-hand-cnn-load.py)のパラメータhmin、hmax、sminの値を調整してください。
プログラム中のhmin、hmax、sminの調整はこの後のじゃんけんプログラムでも必要になりますのでご注意ください。

ml-08-02-binary.pyが手の形を反映していない場合、p.258「手の形が綺麗に切り出せないときの対処法」に基づいてプログラム中のパラメータhmin、hmax、sminの値を調整しなければなりません。 著者の感覚として、様々なツールが更新されるにと伴い、執筆時に比べて適切なパラメータの値が変化しているような印象があります。

典型的には、下記のパターンでの値の変更で改善されるケースが多いでしょう。書籍p.262の図8-7に基づいて述べます。
  1. 図8-7のs_binaryが手の形を含んでいる場合
    この場合、hmaxの調整のみで良いでしょう。例えば手の形が欠けている場合、hmaxをデフォルトの30から35などのように大きくすれば、手の欠けが小さくなります。
  2. 図8-7のs_binaryが手の形を全く反映していない場合
    この場合、S成分による二値化は smin =0 とすることで無効にした方が良いでしょう。その上で hmax の調整を行い、手の形が再現されるようにします。
  3. 図8-7のs_binaryがほぼ手の形を再現している場合
    この場合、hmin=-1としてH成分による認識を無効にし、S成分のみの認識してみると綺麗に手の形が現れることがあります。
なお、このようなhmin、hmax、sminの調整は、手の形の認識を含むプログラム(じゃんけんプログラムも含む)の全てで行う必要がありますのでご注意ください。

p.371 ml-10-08-hand-cnn-load.pyの実行コマンド(配布された学習済ファイルを用いる場合)

Python3で演習を実行するためのコマンドはこちらです。二値化されたカメラ映像と手の分類結果を表示するプログラムです。
python3 ml-10-08-hand-cnn-load.py ml-hand-cnn.h5
二値化された映像が手の形を全く反映していない場合、本ページの「p.257 ml-08-02-binary.pyが手の形を反映していない場合」に基づき、プログラム中(この場合 ml-10-08-hand-cnn-load.py)のパラメータhmin、hmax、sminの値を調整してください。
プログラム中のhmin、hmax、sminの調整はこの後のじゃんけんプログラムでも必要になりますのでご注意ください。

p.373 ml-10-09-janken-deep.pyの実行コマンド(自分で作った学習済ファイルを用いる場合)

Python3で演習を実行するためのコマンドはこちらです。GUIによるじゃんけんシステムです。
python3 ml-10-09-janken-deep.py result-hand.h5
二値化された映像が手の形を全く反映していない場合、本ページの「p.257 ml-08-02-binary.pyが手の形を反映していない場合」に基づき、プログラム中(この場合 ml-10-09-janken-deep.py)のパラメータhmin、hmax、sminの値を調整してください。

p.373 ml-10-09-janken-deep.pyの実行コマンド(配布された学習済ファイルを用いる場合)

Python3で演習を実行するためのコマンドはこちらです。GUIによるじゃんけんシステムです。
python3 ml-10-09-janken-deep.py ml-hand-cnn.h5
二値化された映像が手の形を全く反映していない場合、本ページの「p.257 ml-08-02-binary.pyが手の形を反映していない場合」に基づき、プログラム中(この場合 ml-10-09-janken-deep.py)のパラメータhmin、hmax、sminの値を調整してください。

じゃんけんシステムは、手の画像が格納されているディレクトリml-imagesと音声が格納されているディレクトリml-soundがプログラムファイルml-10-09-janken-deep.pyと同じ位置にあることが前提となっています。 どちらも圧縮されたサンプルファイルを展開すると現れるディレクトリです。エラーが出る方はご確認ください。

なお、このじゃんけんシステムにロボットハンドを追加し、ディスプレイないではなく現実世界でじゃんけん勝負する方法を 「人間の手を予測するじゃんけんシステムにロボットハンドを追加する」に示しましたので、電子工作に興味のある方はご覧ください。

p.374 ml-10-10-janken-deep-shorten.pyの実行コマンド(自分で作った学習済ファイルを用いる場合)

Python3で演習を実行するためのコマンドはこちらです。GUIによるじゃんけんシステムの音声短縮版です。
python3 ml-10-10-janken-deep-shorten.py result-hand.h5
二値化された映像が手の形を全く反映していない場合、本ページの「p.257 ml-08-02-binary.pyが手の形を反映していない場合」に基づき、プログラム中(この場合 ml-10-10-janken-deep-shorten.py)のパラメータhmin、hmax、sminの値を調整してください。

p.374 ml-10-10-janken-deep-shorten.pyの実行コマンド(配布された学習済ファイルを用いる場合)

Python3で演習を実行するためのコマンドはこちらです。GUIによるじゃんけんシステムの音声短縮版です。
python3 ml-10-10-janken-deep-shorten.py ml-hand-cnn.h5
二値化された映像が手の形を全く反映していない場合、本ページの「p.257 ml-08-02-binary.pyが手の形を反映していない場合」に基づき、プログラム中(この場合 ml-10-10-janken-deep-shorten.py)のパラメータhmin、hmax、sminの値を調整してください。

0 件のコメント:

コメントを投稿