スマートフォンにはテキスト入力用のソフトウェアキーボードがありますが、長い文章を入力するのが大変で、ミスもしやすいです。そこで便利なのが、話した内容をテキストに変換してくれる機能です。この機能は最近、かなり精度が良くなり、ほぼ問題なく使えるようになりました。変換されたテキストは、音声操作などにも使えます。

今回はiOS/Androidで使える音声認識のCordovaプラグインであるcordova-plugin-speechrecognitionの使い方を紹介します。

インストール

GitHubからcordova-plugin-speechrecognitionプラグインのzipファイルをダウンロードし、そのファイルをプラグインの管理画面でインポートしてください。

使い方

まず、音声認識機能が使えるのがどうかの判別が必要です。次のように定義されています。

window.plugins.speechRecognition.isRecognitionAvailable(
  function(res) {
    if (res) {
      // 機能あり
    } else {
      // 機能なし
    }
  },
  function(err) {
    // エラーの場合
  }
)

このままだとちょっと使いづらいので、ラッピングしてもよさそうです(この方法は後述する他のメソッド全般にいえます)。

function isRecognitionAvailable() {
  return new Promise((res, rej) => {
    window.plugins.speechRecognition.isRecognitionAvailable(res, rej);
  })
}
document.addEventListener('deviceready', async (e) => {
  try {
    const available = await isRecognitionAvailable();
    if (available) {
      // 使える
    } else {
      // 使えない
    }
  } catch (e) {
    // エラーの場合
  }
})

利用許可を得る

音声認識機能とマイクが使えることが分かったら、これらを使うための利用許可を得る必要があります。これを行うためには、2つのステップがあります。まずは、利用許可があるかどうかを確認することから始めます。

// 利用できるか(すでに許可済みかどうか)判別
window.plugins.speechRecognition.hasPermission(
  function(res) {
    if (res) {
      // 利用可能
    } else {
      // 利用許可を得る必要あり
    }
  },
  function(err) {
    // エラーの場合
  }
)

次に利用許可を求めます。実行するとダイアログが出ます。

マイクへの許可も必要です。

// 利用許可を求める
window.plugins.speechRecognition.requestPermission(
  function(res) {
    if (res) {
      // 利用許可を取得
    } else {
      // 利用拒否
    }
  },
  function(err) {
    // エラーの場合
  }
)

ダイアログで許可すると使えるようになります。

音声認識を開始する

音声認識を開始する際には window.plugins.speechRecognition.startListening を実行します。これは幾つかオプションがあります。

const options = {
  String language,    // 認識言語を指定
  Number matches,     // テキストを幾つ返却するか
  String prompt,      // 確認ダイアログを出すかどうか(Android のみ)
  Boolean showPopup,  // ポップアップを表示するか否か(Android のみ)
  Boolean showPartial // レスポンスを個別に行うか(true)否か(false)
}

一番簡単なオプションは次のようになるでしょう。

const options = {
  language: 'ja_JP',
  matches: 1
}

実行は次のようになります。

window.plugins.speechRecognition.startListening(
  function(res) {
    // 認識されたテキストが配列で返ってくる
    // showPartial をtrueにした場合は文字列が複数回返ってくる
  },
  function(err) {
    // エラーの場合
  }
)

音声認識を停止する

window.plugins.speechRecognition.startListening はマイクがオンになり、音声待ちの状態になります。結果を取得するためには window.plugins.speechRecognition.stopListening を実行しないといけません。放置していてもその内認識が終了するようですが、あまり行儀はよくありません。ボタンなどを配置して、停止するのがいいでしょう。

window.plugins.speechRecognition.stopListening(
  function(res) {
    // 正常終了
  },
  function(err) {
    // エラーの場合
  }
)

認識できる言語について

認識できる言語は window.plugins.speechRecognition.getSupportedLanguages で取得できます。

window.plugins.speechRecognition.getSupportedLanguages(
  function(res) {
    // 言語の配列
  },
  function(err) {
    // エラーの場合
  }
)

これは公式リポジトリからの引用ですが、iOSとAndroidで異なるので注意してください。ja_JP はどちらも含まれます。Androidの方が圧倒的に多いです。

// Androidの場合

let supportedLanguagesAndroid =
  ["af-ZA", "id-ID", "ms-MY", "ca-ES", "cs-CZ", "da-DK", "de-DE", "en-AU", "en-CA",
  "en-001", "en-IN", "en-IE", "en-NZ", "en-PH", "en-ZA", "en-GB", "en-US", "es-AR",
  "es-BO", "es-CL", "es-CO", "es-CR", "es-EC", "es-US", "es-SV", "es-ES", "es-GT",
  "es-HN", "es-MX", "es-NI", "es-PA", "es-PY", "es-PE", "es-PR", "es-DO", "es-UY",
  "es-VE", "eu-ES", "fil-PH", "fr-FR", "gl-ES", "hr-HR", "zu-ZA", "is-IS", "it-IT",
  "lt-LT", "hu-HU", "nl-NL", "nb-NO", "pl-PL", "pt-BR", "pt-PT", "ro-RO", "sl-SI",
  "sk-SK", "fi-FI", "sv-SE", "vi-VN", "tr-TR", "el-GR", "bg-BG", "ru-RU", "sr-RS",
  "uk-UA", "he-IL", "ar-IL", "ar-JO", "ar-AE", "ar-BH", "ar-DZ", "ar-SA", "ar-KW",
  "ar-MA", "ar-TN", "ar-OM", "ar-PS", "ar-QA", "ar-LB", "ar-EG", "fa-IR", "hi-IN",
  "th-TH", "ko-KR", "cmn-Hans-CN", "cmn-Hans-HK", "cmn-Hant-TW", "yue-Hant-HK",
  "ja-JP"];

// iOSの場合

let supportedLanguagesIOS =
  ["nl-NL","es-MX","zh-TW","fr-FR","it-IT","vi-VN","en-ZA","ca-ES","es-CL","ko-KR",
  "ro-RO","fr-CH","en-PH","en-CA","en-SG","en-IN","en-NZ","it-CH","fr-CA","da-DK",
  "de-AT","pt-BR","yue-CN","zh-CN","sv-SE","es-ES","ar-SA","hu-HU","fr-BE","en-GB",
  "ja-JP","zh-HK","fi-FI","tr-TR","nb-NO","en-ID","en-SA","pl-PL","id-ID","ms-MY",
  "el-GR","cs-CZ","hr-HR","en-AE","he-IL","ru-RU","de-CH","en-AU","de-DE","nl-BE",
  "th-TH","pt-PT","sk-SK","en-US","en-IE","es-CO","uk-UA","es-US"];

まとめ

cordova-plugin-speechrecognitionは、OSの標準機能を使用しています。そのため、インターネット接続がないオフライン状態でも動作するというメリットがあります。外部ネットワークに接続しないので、処理速度が速いという利点もあります。

また、認識の精度は概ね高く、アドレス帳に登録されている名前については、特に認識しやすいようです。

音声認識機能はビジネスでの利用や、入力補助、ゲームなど幅広い使い方が考えられます。ぜひ皆さんのアプリで活用してください。