Scratchで機械学習を体験できる拡張機能を利用した記事を以前投稿したが(すでに1年以上経過)、細かくアップデートされているのでそれらを含めて記していく。
前回の記事はこちら機械学習×Scratch!? 使ってみた
ML2Scratch
ML2Scratchは専用のScratch環境で機械学習を体験できる拡張機能を提供してくれる。
前回ではPCに接続されたWEBカメラの画像をScratch上に映し出し、画像を取得しラベル付けから学習、画像認識を行った。
今回は新たに追加されている機能で、Scratchのステージ上を画像として取得・学習することでWEBカメラを利用しない機械学習をおこなってみる。
前回との違い
ML2Scratchの導入は前回の準備を参照。
カスタマイズされたScratch上でML2Scratchのブロックを追加する。
すでに前回と少しブロックのデザインが変わっているのがわかる。
左が前回、右が今回利用している時点でのブロックのデザイン。
前回と比較すると以下のブロックが追加されている。
今回の学習のキーとなる機能の一つ。カメラ
ステージ
を切り替えることで学習・判定を行う対象を変更できる。特にステージ
に変更することでScratchで作成したゲーム画面を学習データとして用いたりすることができるようになる。
学習した結果を他のプログラムもしくは同一のプログラムで利用するために保存することができる。学習データを集めた状態でこのブロックを実行するとjsonファイルをダウンロードすることができ、再利用することができる。
前述のダウンロードしたjsonファイルを適用する際に実行する。実行するとファイルを選択するウィンドウが立ち上がり保存したjsonファイルをアップロードすることができる。
こちらも今回のキーとなるブロック。Scratchのステージ上に映っているWEBカメラのON/OFFを切り替えることができる。ビデオを切にすることで純粋なステージ上のみを学習データとして集めることができる。
ステージ上の学習
今回は拡張機能の開発者である石原さんが公開しているGithubにある手書き文字判定のサンプルプログラムを参考に行っていく。
今回は1~3の手書き数字の判定+何も書いていない状態
の4つのラベルを使用するので取得した画像枚数をステージ上に表示するようチェックを入れる。
あらかじめ配置されているネコのスプライトに以下のプログラムを作成する。
次にスプライトを追加する。ここではペンのスプライトを追加しているが、非表示にするため追加するのはどれでもよい。
追加したスプライトにプログラムを作成する。ペンのブロックを利用しているが、これもML2Scratchと同じく拡張機能にあるため利用する際は拡張機能から追加する。
プログラムの準備はできたので学習データを集めていく。
ステージ左上の旗マークをクリックすると、ステージ上にマウスで線を引けるようになる。
今回は1,2,3の手書き数字を学習しネコに判定させる。
ステージ上に1を書いたらキーボードの1
を押して画像を集める。
ステージ上の線を消す場合はスペースキー
を押す。
これを1~3の数字+何も書いていない状態の4つを学習させる。
何も書いていない状態はキーボードの4
を押して画像を集める。
データをそれぞれ20枚程度集め終わったら、判定できているか確かめる。
そのままステージに手書き数字を書くことで判定結果をネコが喋ってくれる。
2と3は膨らみなどが似ているようで、雑に書くと2と3の判定を行ったり来たりする場合もある。
前回から学習の幅が広がっているためいろいろなことに応用できそう。
また定期的にメンテナンスしていただけているため環境の変化にも柔軟に対応できそうなところは安心して使えるのでありがたい。