Makeblock の CyberPi を使ったビジュアルプログラミングで音声認識を試す

この記事の内容は、Makeblock が出している製品の 1つである [CyberPi](https://www.makeblock.com/jp/steam-kits/cyberpi)（以下のツイートの写真にうつっているもの） をビジュアルプログラミングの環境で試してみた話です。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">今日の昼の<br>近所のコンビニ案件。 <a href="https://t.co/JZYuDrs6rr">pic.twitter.com/JZYuDrs6rr</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1362688301723918340?ref_src=twsrc%5Etfw">February 19, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

CyberPi について等の情報は後で記載しますが、ボタンやスピーカー・フルカラーLED などといった機能が入っており、「ボタンを押したら、LED が光って、それと合わせて音を出す」といったものは簡単に作れてしまったりします（以下の動画のとおり）。

<blockquote class="twitter-tweet" data-conversation="none"><p lang="ja" dir="ltr">Makeblock CyberPi Go Kit を ｍBlock でお試し中。<br><br>まずは、ボタンを押したら音が出て、フルカラーLED が光るような簡単なものを。 <a href="https://t.co/NvF0f0mZa6">pic.twitter.com/NvF0f0mZa6</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1363011277505794049?ref_src=twsrc%5Etfw">February 20, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

また、Wi-Fi へ直接接続できる機能もあるため、インターネットを介した処理（今回の記事で扱った音声認識など）も利用できたりします。

## CyberPi とは
CyberPi は、以下のページ内にも書かれているとおり、「様々な機能が内蔵されているシングルボードコンピュータ」です。「フルカラーディスプレイ・スピーカー・マイク・ジョイスティック・ボタン・複数のセンサーなど」を搭載していたり、Wi-Fi に接続可能なモジュールも内蔵しています。
そして、ビジュアルプログラミング・Python を用いた開発を行うことが可能です。

●Makeblock、ネットワーク対応のプログラミング教材「CyberPi」の販売を開始 - Makeblock
　https://www.makeblock.com/jp/news-center-jp/274405.html
●CyberPi - ネットワーク対応のマイクロコンピュータ- Makeblock
　https://www.makeblock.com/jp/steam-kits/cyberpi
![CyberPi.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/4f203b6d-827c-b676-8547-7415b71c2625.jpeg)

## mBlock について
上記のとおり、開発にはビジュアルプログラミング（ブロックベース）と Python を用いることができますが、今回はビジュアルプログラミングのほうを用います。

### プログラミングに使う mBlock の概要
ブロックを使ったビジュアルプログラミングには、[mBlock](https://mblock.makeblock.com/ja-jp/) を用います。
mBlock には、インストールして利用する「デスクトップ版」と、ネットを介してブラウザ上で開発ができる「ウェブ版」がありますが、今回は Mac用のデスクトップ版を使いました。
![mBlockのダウンロード.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/044cdd58-0209-14b9-9acc-69183c792baa.jpeg)

mBlock の画面はこのようなものになります。
![mBlockの画面.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/438aacef-e469-8c10-0e3c-b9a328ab36e7.jpeg)

## mBlock でのプログラミング
とりあえず、簡単な動作を試してみたい、という場合は以下の記事を見て試してみたりすると良いかもしれません。
　●携帯ゲーム機風のプログラミング学習用コンピューター「CyberPi」 ～ジョイスティックやディスプレイを搭載 - どれ使う？プログラミング教育ツール - 窓の杜
　　https://forest.watch.impress.co.jp/docs/serial/progedu/1317273.html

ここから、音声認識の処理を行うプログラムについて説明していきます。

### 音声認識を試す
音声認識用に組んだプログラムは以下のとおりです。

![AIブロックを使ったもの.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/1c3f83e8-7279-9f3d-ef1d-aebd9d2dbc07.jpeg)

プログラムの大まかな処理の流れは以下となります。

1. Wi-Fi 接続
   1. 接続準備のタイミングで LED を光らせる（状況を分かりやすくするためのもの）
   2. SSID・パスワードを設定
   3. ネットワーク接続完了まで待機する処理
   4. ネットワークに接続したら、画面に文字を表示させたり LED を光らせる（状況を分かりやすくするためのもの）
2. 音声認識関連
   1. Aボタン押下に連動する形で処理を実行 
   2. 音声認識を開始するタイミングで LED を光らせる（状況を分かりやすくするためのもの）
   3. 日本語による音声認識を行う
   4. 音声認識処理の終了後に LED を光らせる（状況を分かりやすくするためのもの）
   5. 音声認識結果表示前に音を鳴らす（状況を分かりやすくするためのもの）
   6. 音声認識結果を画面に表示する

そして、実際に動作させた時の様子は以下のとおりです。
なお、動画ではうまくいった部分を編集してつなげており、誤認識が混じる場合もありました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/CyberPi?src=hash&amp;ref_src=twsrc%5Etfw">#CyberPi</a> の AIブロックを使い、音声認識を試してみた！<a href="https://twitter.com/hashtag/mBlock?src=hash&amp;ref_src=twsrc%5Etfw">#mBlock</a> <a href="https://twitter.com/hashtag/Makeblock?src=hash&amp;ref_src=twsrc%5Etfw">#Makeblock</a> <a href="https://t.co/OonOUzMtqh">pic.twitter.com/OonOUzMtqh</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1380783628704116737?ref_src=twsrc%5Etfw">April 10, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

### AI・IoT用のブロックを使う際の注意1
AI・IoT用のブロックを使う場合、注意する点があります。
起動時のデフォルト設定の「アップロードモード：オフ」では、これらのブロックが使えません（表示上、グレーアウトした状態になります）。そのため、「アップロードモード：オン」に設定してプログラムを作ってください。
![アップロードモードの切り替え.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/290d340e-d711-e3f1-c4ee-b69e82d45146.png)
アップロードモードがオフの状態だと、PC と CyberPi を接続して開発している際に、プログラムの変更が動的にデバイスの動作に反映されて便利に使えるのですが、今回のブロックを使う場合は利用NG のようです。
なお、「アップロードモード：オン」にしてデバイスにプログラムを書き込むと、「アップロードモード：オフ」で開発している時と異なり、CyberPi を PC から外して単独で起動させた場合でも、書き込んだプログラムが実行できるようになります。

なお、アップロードモードをオンにする必要があるという話は、ブロックのヘルプ（以下の画像の内容）で確認しました。そのヘルプは、mBlock上のブロックの上で右クリックをすると呼び出すことができます。
![アップロードモードで利用するという記載（ヘルプ）.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/de8ea056-2f4e-4b98-e91b-3928aadbc4c3.jpeg)

### AI・IoT用のブロックを使う際の注意2
もう 1つ注意点があります。
それは、AI・IoT用のブロックを使う際にはアカウント登録・ログインが必要になることです。

以下の記事にあるように、メニューバーのアカウントのアイコンの見た目でも、ログインしている状態かどうかを判別できます。
　●「mBlockでAI（人工知のう）を学ぼう」お家で学ぶ初めてのプログラミング - Makeblock
　　https://www.makeblock.com/jp/mblock-jp/267069.html
![アカウント登録・ログインについて.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/a5214aed-7d40-43d2-5d9f-b059b6b16d02.jpeg)

## おわりに
今回、CyberPi の音声認識機能を、mBlock を使ったビジュアルプログラミングでの開発で実装してみました。他にも様々な機能が使えるので、他の機能を使うプログラムも作ってみたいと思います。