レッツ&ゴー! 音声認識を使ってミニ四駆を「声」で操作!(MKZ4“魔改造” Android編)


こんにちは。アプリケーションエンジニアの中村です。

iPhoneアプリ編に続き、Androidアプリを作成して、MKZ4を声で操ってみたいと思います。

必要な機材、ソフトウェア

  • Android Studio (記事作成時 v2.3.0)
  • Android Studioが動作するPC
  • MKZ4を取り付けたミニ四駆
  • Android端末 (Android 5.0 Lollipop以降)
  • サンプルアプリのソースコード (GitHubからダウンロード)

Android端末は、Android 5.0 Lollipop以降で、Google音声入力がオフラインで使用できる端末が必要です。対応端末では、設定 > 言語と入力 > Google音声入力 > オフラインの音声認識 というメニューがあると思います。本記事では、Nexus 5 (Android 6.0.1)、Xperia Z3 (Android 5.0.2、機種名: SOL26) で動作を確認しました。

もちろんMKZ4も必要です。まだお持ちでない場合は、 オフィシャルストア からご購入ください。また、作例を 文系新卒でもIoTに入門できるのか?! 改造ミニ四駆製作キット「MKZ4」に挑戦 でご紹介していますので、ご参照ください。

事前準備

Android端末で、オフラインの音声認識用の言語をダウンロードする

  • Android端末の設定画面を開きます。
  • (1)の言語と入力をタップします。
  • (2)のGoogle音声入力をタップします。
  • (3)のオフラインの音声認識をタップします。
  • (4)のすべてをタップします。
  • (5)の日本語(日本)をタップします。
  • (6)のダウンロードをタップします。
  • (7)日本語がインストール済であることを確認します。mkz4_android_nexus5_01

Android端末のUSBデバッグモードをオンにする

  • Android端末の設定画面を開きます。
  • (1)の端末情報をタップします。
  • (2)のビルド番号を何回か連続でタップし、(3)が表示されるまで続けます。
  • 戻るボタンで設定画面に戻り、(4)の開発者向けオプションをタップします。
  • (5)のUSBデバッグのスイッチをオンにします。
  • 許可しますか?と聞かれたら、(6)のOKボタンを押します。 mkz4_android_nexus5_02_s

Android Studioをインストールする

サンプルアプリのソースコードをダウンロードする

  • https://github.com/cerevo/MKZ4_VoiceCommander_Android を開きます。
  • 「Clone or download」ボタンを押し、開いたダイアログのDownload ZIPを選択してダウンロードします。
  • ダウンロードしたファイルをクリックして、展開します。これでソースコードの準備は完了です。

実行してみる

Android Studio でサンプルアプリのソースコードを開く

  • Android Studio を開きます。
  • 「Welcome to Android Studio」の画面が表示されたら、「Open an existing Android Studio project」 (1) をクリックします。 mkz4-android-studio_01
  • 「Open File or Project」の画面が表示されたら、事前準備でダウンロードしたサンプルアプリのソースコードの保存場所を選び、OK を押します。
  • 画面の下に、エラーメッセージが表示されたら、青くハイライトされている部分(2)をクリックします。解決方法が表示されると思いますので、案内に従って解決して行きます。解決方法は何種類か表示されることもありますので、それぞれ確認してみて下さい。(3)の様に、Gradle Build Running と表示されていたら、完了を待ってから青くハイライトされている部分(2)をクリックしてください。
    • ※ プラグインのアップグレード、追加のコンポーネントをインストール、利用規約への同意などをする必要があると思います。 mkz4-android-studio_06
    • ※ Upgrade plugin to version 2.3.0 and sync project, Show in File, Show in Project Structur dialog というエラーが表示された場合は、(4)の Show in File をクリックして、開いたファイルの右上に表示される (5)の Try Again を押して下さい。または、(6) の Sync Project with Gradle Files を押しても同じです。 mkz4-android-studio_07
  • エラーメッセージが表示されなくなったら完了です。

Android端末にアプリをインストールする

  • Android Studioを開いているPCに、Android端末をUSBケーブルを使って接続します。
  • Android Studioで、(1)のRunボタンをクリックします。
  • Android端末で、USBデバッグを許可しますか?と聞かれたら、(2)のOKをタップします。
  • Android StudioのSelect Deployment Target画面で、接続したAndroid端末が選択されていることを確認し、(3)のOKボタンをクリックします。
    • Windowsをお使いの場合は、接続したAndroid端末用のOEM USB ドライバをインストールする必要があります。
    • 私の環境で、Windows 10の場合は、自動でインストールされましたが、一度Android端末のUSBケーブルを抜き差しし、Select Deployment Target画面を一度閉じて開き直す必要がありました。
    • Select Deployment Target画面を開き直したり、Android端末のUSBケーブルを抜き差ししても、接続したAndroid端末が表示されない場合は、OEM USB ドライバのインストールを参考にインストールしてください。
  • もし、Instant Run の画面が表示されたら、(4)のInstall and Continueボタンをクリックします。 mkz4-android-studio_03
  • Android端末で、アプリが起動するまで待ちます。

アプリを使ってみる

  • アプリが起動したときに、もし、音声の録音を許可しますか?と聞かれたら、(1)の許可をタップします。
  • (2)の音声認識を開始するボタンを押しながら、Android端末に向かって何か言ってみます。言い終わったところでボタンを離すと、認識結果を表示します。下図では「スタート」と言ったのを認識しています。 mkz4_android_nexus5_04

MKZ4の電源を入れる

  • 本アプリが想定しているMKZ4本体のプログラムは、製品の説明書の手順通り書き込むサンプルプログラムのままで、特にカスタマイズの必要はありません。もし、何かカスタマイズしていた場合は、以下のサンプルプログラムを書き込んでください。
  • すでにサンプルプログラムを書き込み済みの場合は、電源を入れて下さい。

Android端末をMKZ4に接続して操作してみる

  • Android端末のWi-Fi設定を開き、「MKZ4」のネットワークに接続します。
  • 下記のコマンド表を参考に、キーワードを言って、操作します。
コマンド キーワード
前進 進め、行け、いけ、スタート、ゴー
後退 後退、下がれ、バック
左折 左、レフト
右折 右、ライト
停止 止まれ、ストップ

実装のポイント

以上で、動かしてみることはできるようになったかと思います。以下では、実装について説明したいと思います。

  • ソースコードの構成
  • マイク録音、ネットワーク接続を有効にする

ソースコードの構成

Android Studioに表示されるプロジェクトファイルを見ながら、主要なファイルについて説明します。
Android Studioの概要については、 https://developer.android.com/studio/intro/index.html をご参照下さい。
s 2017-03-31 17.53.28

  • AndroidManifest.xml
    • アプリの設定が書かれています。
    • 後述のマイク録音、ネットワーク接続を有効にする設定はこちらに書きます。
  • MainActivity
    • アプリ起動後に表示される、メイン画面の動作が書かれています。
    • 画面や音声認識の初期化、音声認識したキーワードの処理などを行っています。
    • 音声認識のキーワードとコマンドの対応を編集したい場合は、こちらを修正してみて下さい。
  • Mkz4ApiCaller
    • MKZ4へコマンドを送信する処理が書かれています。
    • MainActivityから使っています。
  • MyRecognitionListener
    • 音声認識の結果を受け取る処理が書いてあります。
    • MainActivityから使っています。
  • activity_main.xml
    • メイン画面の要素の配置を行っています。
    • MainActivityから、このファイル内のボタンやテキストを参照しています。
  • strings.xml
    • 多言語対応の辞書です。
    • このファイル内で定義された名前で文言を取得すると、端末の言語設定に応じた結果が返ってきます。
  • styles.xml
    • アプリの外観のテーマを指定しています。
    • 音声認識以外に機能がないため、アクションバーを表示しないテーマを指定しています。

マイク録音、ネットワーク接続を有効にする

  • 音声認識のためにマイクでの録音機能をしようする必要があります。そのために、AndroidManifest.xmlに、<uses-permission android:name="android.permission.RECORD_AUDIO"/> という行を追加しています。
  • また、Android 6.0以降では、ユーザーに録音機能使用の許可を求める必要があります。そのために、MainActivityにて、requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO}, 0);というメソッドを呼び出しています。
  • アプリはMKZ4とWi-Fi経由でHTTP通信します。そのために、AndroidManifest.xmlにて、<uses-permission android:name="android.permission.INTERNET" /> という行を追加しています。

終わりに

Androidアプリは、Mac、Windows、Linux、いずれかのOSが動くPC上で作成できますので、こちらの方が挑戦しやすいかもしれません。端末についても、いろいろなメーカーが出しているため、安く手に入れやすいというメリットもありそうです。ただ、端末によっては、今回使ったオフラインでの音声認識がうまく動かない可能性があります。そこで、オフラインではなく、インターネットを使った音声認識であれば、より多くの端末で動作すると思いますので、次はその方法について記事にできればと思っています。