サクッとWatson Speech-to-TextをiOSで動かす



simon Sasakiさんの記事「[Watson音声認識(STT:Speech to Text)をSwiftアプリで使ってみた。] (http://qiita.com/simonTokyo/items/91a320ba16815b6a6038)」を読んで、Watson Speech-to-TextのSwiftアプリを試そうとしたのですが、GitHubのwatson-developer-cloudの構成が変わっており、少し迷ったのでメモとして残します。

# 1. 事前準備
Carthageを使うのでインストールしておきます。[Homebrew](https://brew.sh/index_ja.html)からインストール可能です。
`$ brew install carthage`

また、Bluemixにて、Speech to Textのサービスを作り、「Service credentials」に書かれているusername, passwordをメモしておきます。

![Screen_Shot_stt.png](https://qiita-image-store.s3.amazonaws.com/0/73759/9871db53-0bb3-19b3-ab0b-30f8ce273277.png "Screen_Shot_stt.png")


# 2. サンプルプロジェクトのクローンと依存関係の解決
watson-developer-cloud/swift-sdk内のソースではなく、[Watson-developer-cloud/speech-to-text-swift](https://github.com/watson-developer-cloud/speech-to-text-swift) を使います。

```bash
$ git clone https://github.com/watson-developer-cloud/speech-to-text-swift.git
$ cd speech-to-text-swift/
```

その後、Carthageで依存関係の解決をします。もともとSwift3.0.0でプリコンパイルされている状態のため、Swift 3.0.0以降の場合ではオプションを追加します。
`$ carthage update --platform iOS --no-use-binaries`（Swift 3.0.0以降の場合）
`$ carthage update --platform iOS`（Swift 3.0.0以前の場合）


# 3. Credentialファイルの編集
「Speech to text」ディレクトリ内にある「CredentialsExample.swift」をコピーし「Credentials.swift」を作ります。

```bash
$ cd Speech\ to\ Text
$ cp CredentialsExample.swift Credentials.swift`
```

Speech to Text.xcodeprojを開き、Credentials.swiftを編集します。SpeechToTextUsernameとSpeechToTextPasswordの値に、それぞれ 1.事前準備でメモしたサービスのusername, passwordを入力します。

```swift:Credentials.swift
struct Credentials {
    static let SpeechToTextUsername = "your-username-here"
    static let SpeechToTextPassword = "your-password-here"
}
```

# 4. 実行 

あとは、Xcode上で「Speech to Text」プロジェクトのBundle IdentifierとTeamの変更をすれば、実行できるようになりました。

以前とアプリも少し変わっている模様。サンプルのAudio Fileからテキスト化するモード。
![IMG_9771.PNG](https://qiita-image-store.s3.amazonaws.com/0/73759/e7ba4468-489e-900b-a743-49eaeb913b2c.png "IMG_9771.PNG")

マイクからの音声をテキスト化するモード。
![IMG_9768.PNG](https://qiita-image-store.s3.amazonaws.com/0/73759/16b5473f-633c-ca26-02db-f8d1f9137a05.png "IMG_9768.PNG")


# 5. 日本語への対応

マイクからの音声をテキスト化するモードの
デフォルトの場合はmodelが英語（en-US_BroadbandModel）になってしまうようですが、recognizeMicrophoneの引数のmodelとして「ja-JP_BroadbandModel」に指定することで、日本語に対応できます。


```swift:MicrophoneViewController.swift
// start recognizing microphone audio
speechToText.recognizeMicrophone(settings: settings,  model: "ja-JP_BroadbandModel", failure: failure) {
    results in
    self.textView.text = results.bestTranscript
}
```

とりあえず日本語は出ました！
![IMG_9770.PNG](https://qiita-image-store.s3.amazonaws.com/0/73759/eeb82448-266c-da08-0deb-26cbdeceda59.png "IMG_9770.PNG")

周りがうるさい環境だと精度は良くないようです。あとはうちの猫の名前（ムーチョ）が「部長」になったりしているので、カスタムモデルを作って単語を登録し、呼び出せるようになれば認識精度も上がるのだろうと思います。また今度もうちょっといじってみたい。

# 参考資料

- [About Speech to Text](https://www.ibm.com/watson/developercloud/doc/speech-to-text/index.html)
- [Speech-to-Text API Reference](https://www.ibm.com/watson/developercloud/speech-to-text/api/v1/)
- [音声認識でのカスタムモデルの使用](https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/%E3%81%93%E3%81%BF%E3%81%AD%E3%81%AE%E6%8A%80%E8%A1%93%E3%83%A1%E3%83%A2/page/%E9%9F%B3%E5%A3%B0%E8%AA%8D%E8%AD%98%E3%81%A7%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E4%BD%BF%E7%94%A8)
- [Watson音声認識(STT:Speech to Text)をSwiftアプリで使ってみた。] (http://qiita.com/simonTokyo/items/91a320ba16815b6a6038)