この連載
では、手のひらサイズの小さなコンピューター、micro:bit(マイクロビット)を使った「探検
ウォッチ」というツールを使って、Scratch(スクラッチ)で使える機械学習
環境
を組み合わせてAI(エーアイ)プログラミングにチャレンジしているよ。
探検ウォッチについては、micro:bit特設サイトで紹介
しているので、こちらもぜひ読んでみてね。
さて、今回つくろうとしているのは、探検ウォッチと連動
させた、ジェスチャーを認識
する機械学習プログラムだ。具体的
には、探検ウォッチを付けた腕
で、空中に〇や×を描
くと、その動きを検知
して識別
してくれるプログラムだ。
前回は、Scratchでステージ上に絵を描くプログラムをつくった。次に、機械学習のプログラムをつくっていくぞ。
1 機械学習のプログラムをつくる
さっそく、機械学習のしくみをつくっていくぞ。前回つくった絵を描くプログラムを使うので、Stretch3にアクセスして、前回つくった絵を描くプログラムを開こう。
プログラムを開いたら、「拡張機能
を追加」ボタンを押して、「拡張機能を選ぶ」からML2Scratchを読み込もう。
ML2Scratchを追加すると、カメラへのアクセスについての警告
が表示されるので、確認して「許可
」を押そう。ステージにWebカメラの画像が表示される。
ブロックパレットにML2Scratchのブロックが追加されるよ。
ML2Scratchを使った機械学習は、まず画像をラベルごとに分類
して学習する。そのあとに、学習した内容をもとに入力された画像を認識し、一番近いラベルの値を返すという流れになる。
学習をするときは、「ラベル1を学習する」ブロックを使うけれど、しくみとしては、「ラベル1を学習する」ブロックが実行されたときに、ステージに表示された画像をラベル1として学習する。「ラベル1の枚数
」ブロックにチェックを入れれば学習させた枚数を確認できるよ。
試しに「ラベル1を学習する」ブロックを押して実行してみよう。「最初の学習にはしばらく時間がかかるので、何度もクリックしないでください」という警告が出るので、画面が再び動き出すのをしばらく待とう。
今回はラベル1、2、3を使って
1:〇でも×でもない状態
2:○
3:×
をキーボード操作で学習できるようにしておこう。プログラムは次のようになる。
「ラベル1の枚数」〜「ラベル3の枚数」ブロックにチェックを入れるぞ。またこのモデルを使った結果のラベルの出力は「ラベル」に入るのでこれもチェックを忘れずに。
通常
はカメラの画像を学習する設定になっているのが、今回はステージに描いた画像を学習させるので「カメラの画像を学習する」ブロックを切り替えて「ステージの画像を学習する」に変えて、Webカメラもオフにしておこう。これで学習する部分の準備はOKだ。
2 ステージに描いた絵を学習させる
まず「〇でも×でもない状態」(ラベル1)から学習させていこう。緑の旗
をクリックしてプログラムを実行したら、ステージに何も描かずに1のキーを押す。
1つのラベルについて20枚ほど学習させる必要があるので、ステージに何も描かない状態を5~10枚くらい学習させよう。あとはラベル2の〇、ラベル3の×ではない絵、例えば、直線やジグザグした線、点を学習させるといいよ。それらの絵を描いて、線が消える前にキーを押すと学習できる。
おそらくこれで、何も描かなかったり、〇や×以外の絵だと、結果のラベルが1と認識されるのではないだろうか。
次に、〇を描いてラベル2の学習をさせる。ステージに〇を描いて消える前に、2のキーを押そう。いろいろな〇を学習させるといいので、大きさを変えたり、描いてすぐ線が濃
いうちに学習させたり、描き方を試しながら20枚ほど学習させよう。
ここまで学習させてから、ためしにステージに何か描いてみよう。「ML2Scratch ラベル」の表示は1になったり2になったりするだろう。きちんと〇を描いたときに2になっているだろうか。
最後に3を学習させる。素早
く×を描いて3のキーを押そう。×も書き順を変えたり、位置や向きのほか、2本の線をつなげて描くなどして、いろいろなバリエーションを学習させるとよいだろう。
これで、ステージの上をマウスで線を描いてみると、「ML2Scratch:ラベル」のラベルは1~3まで変わるようになるだろう。
何回か試してみて、〇をかいたつもりなのにラベル1になるなど、描いた絵と結果がなかなか合わない場合、さらに学習させることもできるぞ。20枚にこだわらず、認識があまりうまくいかないラベルは、画像の学習を追加しよう。
どうしてもうまく動かなかったり、目的とは違うラベルに学習させてしまったなどの場合は、ラベルごとや、全てのラベルの学習内容をリセットできるぞ。ラベルごとの学習は「ラベル“の全て”の画像をリセット」ブロックの“の全て”を切り替えたブロックや、「ラベル(11)の学習をリセット」ブロックをクリックすればいい。すべての学習は「ラベル“の全て”の画像をリセット」ブロックを、クリックするよ。ただし、リセットするとそのラベルの学習は最初からやり直しになるので、慎重
に操作しよう。
3 認識した結果を読み上げるようにする
描いた図がどのラベルに当てはまるのか、画面の表示を読み取るのは大変だ。そこで、音声で知らせるようにするよ。拡張機能の「音声
合成
」を追加して、次のようなプログラムをつくろう。
これで、プログラムを実行してみよう。キミがマウスで、ステージに〇や×を描くだけで見分けて、答えてくれるくれるだろう。ほかにもいろいろな手書きの文字などを識別できるか試してみよう。
次回は、いよいよ探検ウォッチと連携して、空間に描いた絵を認識できるようにするゾ。探検ウォッチを用意しておいてね。また、今回つくったプログラムは名前を付けて保存をしておくのも忘れないでね。
それでは次回をお楽しみに!
(監修/石原淳也 文/倉本大資)