micro:bitで全自動マウスシールドを作ってみた
第3回
AIで全自動マウスシールドを制御!飲み物を検知して自動開閉するプログラム
2021年3月26日 11:00
100円ショップの材料とmicro:bitをプログラミングして、全自動で開閉するマウスシールドを作る本連載も最終回です。今回はAIを使って、目の前に飲み物や食べ物が来た時に自動開閉するようにインテリジェンス(?)なマウスシールドにしてみましょう。
まずはAIが画像を認識するための「目」となる、USBカメラを用意します。USBカメラはAmazonなどのネットショップで3,000円~7,000円程度で購入できます。カメラの解像度は500万画素もあれば十分ですが、お使いのパソコンのOSに対応しているUSB接続のカメラを購入してください。もしくは、ノートパソコンに内蔵のWebカメラで代用してもいいでしょう。その場合はマスクに取り付けられないため、ノートパソコンのWebカメラを自分に向けて物体を認識させます。
まず、USBカメラを両面テープでマスクの前面に付け、カメラのUSB端子をパソコンに接続します。またmicro:bitもUSBカメラと同じパソコンに接続しておきましょう。
今回は、MakeCodeではなくmicro:bitを使えるようにする拡張機能「micro:bit more」を組み込んだ、専用のScratchを起動します。
micro:bit moreを使うには、あらかじめmicro:bitにmicro:bit more用のプログラムをダウンロードしておく必要があります。詳しくはmicro:bit moreの解説ページ「micro:bitを準備する」を参照して、設定を済ませてください。
次に、TensorFlowを使った機械学習をScratchから利用するための拡張機能「ML2Scratch」を読み込みます。画面左下にある「拡張機能」をクリックし、「拡張機能を読み込む」をダブルクリックします。「拡張機能のURLを入力」に、「https://champierre.github.io/ml2scratch/ml2scratch.mjs」と入力して「OK」をクリックしましょう。
すると、Scratchの画面左側に「ML2Scratch」のアイコンが追加されます。また、USBカメラが正しく認識されていれば、Scratchのステージの背景にはUSBカメラの映像が表示されます。
ここまで準備ができたら、AIに画像を認識させるための学習をさせてみましょう。まずは、何枚の画像を学習したかを確認するために、「ML2Scratch」の「ラベル1の枚数」と「ラベル2の枚数」にチェックを入れます。すると、ステージの背景にラベル1とラベル2のカウント数が表示されるようになります。
次に、AIに学習させるためのスクリプトを組みましょう。「イベント」の「スペースキーが押されたとき」に、「ML2Scratch」の「ラベル1を学習する」を組み合わせて、「スペースキー」をここでは「1」キーに変更します。同様に「2」キーが押されたときに「ラベル2を学習する」というスクリプトも用意します。
そうしたら、カメラにコップが映っていない状態でキーボードの「1」のキーを20回ほど押して、「コップの映っていない画像」を学習させます。この時、多少カメラを動かしながら、様々な画像を学習させるのがコツです。
次にコップが映った状態で20枚程学習させます。今度はキーボードの「2」のキーを20回程押して、同様に「コップのある画像」を20枚程学習させてください。これも、さまざまな位置や角度のコップを学習させましょう。
学習が終わったら、いよいよ学習結果を使って画像認識するスクリプトを組んでみましょう。「ML2Scratch」の「ラベルのどれかを受け取ったとき」を「ラベル1」に変え、「micro:bit more」の「ピンP0をサーボ180度にする」を組み合わせます。同様に「ラベル2を受け取ったとき」に「ピンP0をサーボ0度にする」を組み合わせてください。
もしも認識の精度が悪い場合には、再び「1」キーを押してコップのない画像を、「2」キーを押してコップのある画像をそれぞれ追加で学習させましょう。
最後に、第2回で作った顔の角度を変えると自動開閉するプログラムをScratchに移植して、今回のAI判定を組み込んでみます。
「変数」の「かたむき」と、「ML2Scratch」の「ラベル」にチェックを入れておくと、micro:bitの角度や画像認識による値の変化の様子も分かるようになります。旗印をクリックしてプログラムを実行してみましょう。顔を前に傾けた時とマスクの正面でコップを認識したとき開くようになります。正面からコップを外した時はマスクが閉じます。
機械学習をさせると、人間では場合分けできない状況でも判断してくれます。前回と比べても、非常に簡単なプログラムでマスクの開閉処理ができるのも特徴です。今回は最終的に、ラベル1(飲み物のコップが映っていない状態)を106回、ラベル2(コップが映っている状態)を120回学習させましたが、学習をさせればさせるほどAIは高い精度で判断しますので、色々と試してみてください。