iOSアプリでの音声認識機能実装方法まとめ

* * *
追記 (2016/06/16)
iOS10にて公式の音声認識機能が開放されましたね！
これが本命かと思っております。
* * *


iPhone/iPadではキーボードの音声入力ボタンから、iOS標準の音声認識(入力)機能が使えます。
高速で精度はかなり良いですが...

外部参考エントリ: [iPhone音声入力すごすぎて笑いが止まらなくなった](http://weekly.ascii.jp/elem/000/000/361/361006/)

<img width="320" alt="キーボードからの音声認識" src="https://qiita-image-store.s3.amazonaws.com/0/63205/fc96998e-a4e3-e721-de0c-86e81136c7eb.png">

残念ながら非公開APIであり**自作アプリの中でその音声認識機能を単独で使うことはできません。**

音声コマンドでアプリコントロールしたり
キーボード表示せずさっと音声で入力したい。

何か方法はないものか、と思い
iPhone/iPadアプリで音声認識/入力機能を実装する方法を色々と調べてみました。

ここに書いた以外に「こんなサービスもあるよ！」等の情報ありましたら気軽に連絡ください。

2016年1月時点の情報です。

## [Google Speech API](https://console.developers.google.com/project?hl=JA)

**そこそこ速く精度が高い。**

しかし**商用利用不可。個人使用のみ。**
**一日の呼び出し制限50回。**
オンラインのみ。

動作させるためにWeb上のダッシュボードから登録が必要です。
内部処理としてwav又はflacファイルを生成し送信します。
APIが受け付ける録音は最大15秒なので、アプリ側で制御する必要があります。

呼び出し回数に関しては対応方法もありますが、結局の所、外に出すアプリには使えません。

[Google Speech API ver.2の使い方](http://qiita.com/mountcedar/items/be1e5d54fcef8f3a4bda)
[Google 音声認識api の制限なしで使う方法(裏ワザ的な）](http://qiita.com/GushiSnow/items/864fe1e72865b8011429)

APIキー部分を入れ替えれば動作するサンプルをgithubに上げておきました。
[GoogleSpeechAPI_Sample](https://github.com/satoshi0212/GoogleSpeechAPI_Sample)

API仕様はこちらのREAD MEが参考になりました。
[google-speech-v2](https://github.com/gillesdemey/google-speech-v2)


## [docomo 音声認識API](https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_name=speech_recognition&p_name=api_usage_scenario#tag01)

内部的には後述のSpeechRecを使用しています。

速度はGoogleSpeechAPIと同等くらい。
精度はやや落ちるかも。
このあたり、感覚的な発言ですみません...

```
「私は六本木ヒルズに来ています」
```

を、はっきりと発声したつもりでしたが

```
「は六本木ヒルズに来ています」
「土性六本木ヒルズに来ています」
「音六本木ヒルズしています」
```

となってしまいました。

**商用利用不可。個人使用のみ。**
オンライン限定です。

**発話の区切れ目を自動で検知してくれます。**
一時的な音声ファイルを作成する必要がありません。

実装次第で解決可能かもしれませんが
音声認識を並行実行できないので複数人の会話や長い発言の処理は工夫が必要かも。


## [VocalKit](https://github.com/KingOfBrian/VocalKit)

更新は止まっており、Open Earsを推奨しています。

> I no longer advise using VocalKit, as a much better project, Open Ears has come out. http://www.politepix.com/openears/

## [OpenEars](http://www.politepix.com/openears/)

**オフラインで使えます。**
**高速です。**
現在対応しているのは英語とスペイン語のみのようです。

> It lets you easily implement round-trip English and Spanish language speech recognition and English text-to-speech on the iPhone

こちらは発言を変換するのではなく、登録した単語と合致するかの判定をします。
そのため**音声でのコマンド実行に向いています。**

> OpenEars™ is free to use in an iPhone or iPad app.

とありますが、商用利用可能かどうか採用する前に確認してください。

[フリーの iOS 向け音声認識／音声合成ライブラリ『OpenEars』の使い方]
(http://qiita.com/shu223/items/eda02dc7d334c339ff64)
[OpenEars 1.6で音声認識を行う](http://d.hatena.ne.jp/shu223/20140126/1391077538)


## [Julius](http://julius.osdn.jp/)

[音声認識エンジン Julius を iOS 8 / Xcode 6で使う](http://codingcafe.jp/julius-on-iphone/)

**オフラインで動作します。**
商用利用も可能です。

正確な辞書を登録せずに動作させてしまっているのか、精度が悪く思った通りには変換されませんでした。
適切に設定したら改善するかもしれません。追求の余地ありです。


## [IBM Bluemix(有償)](https://www.ibm.com/developerworks/jp/bluemix/)

[Speech To Text](https://console.ng.bluemix.net/catalog/services/speech-to-text)
[日本語に対応したSpeech to Text を試してみる](https://www.change-makers.jp/post/10168)
[IBM-Watson-Speech-QA-Japanese-iOS](https://github.com/GodaiAoki/IBM-Watson-Speech-QA-Japanese-iOS)
[Objective-CアプリでWatsonQAと日本語で会話?してみる](http://qiita.com/Godai_Aoki/items/6c56ff9c4ae478ace388)

github上の動作手順を追いましたが、最新版では項目が異なっており動作させられませんでした。
すみませぬ。

動作はオンライン前提です。
処理対象の時間に応じ課金されます。

Bluemixの機能の一つとして提供されており、watsonと会話したり他の機能と連動して面白いことができそうです。


## [SpeechRec(有償)](http://www.ntt-it.co.jp/product/v-series/speechrec/index.html)

SDKをダウンロードすると詳しい日本語マニュアルが含まれています。
エラーハンドリングや細かい制御が必要な時にこういう資料があると助かりますね。

速度、精度はdocomoの項を参照してください。

## [AmiVoice Cloud(有償)](https://www.advanced-media.co.jp/products/service/amivoice-mobiletoolkit-for-iosfor-android_windows-sdk-2)

こちら試せませんでした。
iOS用SDKがあります。

基本オンラインでの使用です。
オフラインでも、動作に制限あるようですが使用可能なようです。


## [番外] UIDictationController

iOS標準機能をどうにかして使えないかと試行錯誤しました。

結論から言うと、キーボードを表示させずに使えたは使えたのですが
一度動作させた後の挙動がおかしい等まともに動作しなかったので忘れることにしました。

仮に動いたとしてもAppStoreに通らないだろうしなぁ。

[【Objective-C】iOSで音声認識サンプル（UIDictationController）]
(http://c-geru.com/as_blind_side/2014/11/uidictationcontroller.html)

## 追記 (2016/01/17)

## [mimi®ASR：Automatic Speech Recognition](http://www.fairydevices.jp/mimi/)
※ 参考情報です。
iOSでの実装が可能か、SDKがあるか、確認できませんでした。

デモ動画必見。非常に高速な認識をしています。
製品情報は問い合わせになります。

## [vGate ASR音声認識システム](http://www.fuetrek.co.jp/product/vgate/asr.html)
製品情報は問い合わせになります。
オンライン、オフラインそれぞれのiOS用ミドルウェアがあるようです。

# 現時点での結論

[2016年1月時点]
ひと通り試してみて現時点での結論です！

- 無償で使いたい場合は**iOS標準の音声認識機能オフライン化と公開API化を待つ。**
- 単純に音声認識で実験したい場合は**Google Speech APIを使う。** [Sample](https://github.com/satoshi0212/GoogleSpeechAPI_Sample)
- オフラインでコマンド実行する用途に絞ると**OpenEars**。
- 有償でも使う場合は**AmiVoiceやSpeechRecの窓口に相談**。

※ 個人の意見です。判断は各自の責任でお願い致します。

##雑感

Apple標準の音声認識機能がオフライン対応しています。
[参考: ｢iPhone 6s｣や｢iPad Pro｣はオフライン時でも音声入力が可能 ｰ ただし、英語入力のみ](http://taisy0.com/2015/11/12/60927.html)

そのうちに日本語もオフラインでできるようになると考えています。

これまで精度の高い変換はオンライン前提だったのですが、オフラインでも可能となっていく流れなのかと。

オフラインで高速に変換できると想定すると活用の幅が広がりますね！


## 蛇足

音声認識機能を持ったiPadネイティブアプリを作り TechCrunch Tokyo Hackathon 2015 で優秀賞を取りました。
API呼び出しと音声認識機能を持った、少し変わったブレスト/メモツール。

[電話利用のシンプル決済から店舗行列受付システムまで、TC Tokyoハッカソン優秀作をご紹介 (5. RTNope-D)]
(http://jp.techcrunch.com/2015/12/11/techcrunch-tokyo-hackathon-2/)

<img src="https://techcrunchjp.files.wordpress.com/2015/12/e382b9e382afe383aae383bce383b3e382b7e383a7e38383e38388-2015-12-11-12-41-47.png?w=683&h=510" width="300">
Tech Crunch Tokyo 2015のイベント内でLT

ビールを飲み緊張を和らげて臨んだ。

機能・アプリのアイデアは他にもたくさんあるので形にしていきたい。
おっ！！と言わせるモノを作りたいものです。
まだまだ未熟なので修行が必要です。

こちらもチェックしてみてください。
[Mashup Awards 11 投稿まとめ！！](http://qiita.com/satoshi0212/items/aabcedc4f95ea01a819b)
[2016年のハッカソン開催情報まとめ！](http://qiita.com/satoshi0212/items/a6e2cd19b3ee3ddc47da)