LoginSignup
25
11

More than 3 years have passed since last update.

[iOS] 最新のSpeech Recognitionについて

Last updated at Posted at 2019-12-01

はじめに

iOS10から利用できるようになった音声認識API: Speech FrameworkについてのWWDC2019でアップデートがあったので最新事情をサンプルとともにお届けします。

APIに関する導入の詳細はiOSのSpeechフレームワークで音声認識 - 対応言語は58種類! - Qiitaをご覧ください。

WWDC2019のセッション内容

WWDC2019のセッションAdvances in Speech Recognition - WWDC 2019 - Videos - Apple Developerの内容を見ていきます。

サマリーとしては、

  1. macOSでのサポート
  2. デバイス上で動作可能に
  3. API強化のおかげで、豊富な音声分析ができるように

です。

macOSでのサポート

このサポートは、MacのAppKitアプリとiPadアプリの両方で利用できます。
iOSと同様に、50以上の言語がサポートされており、マイクにアクセスして音声を録音するには、ユーザーの承認が必要です。
また、ユーザーはSiriを有効にする必要があります。

デバイス上で動作可能に

表題の通りローカル環境のみで動作するようになりました。
ネットワーク通信の必要がなくなり、データがAppleに送信されないため、よりプライバシーにも配慮してアプリ開発をすることができます。
しかし、トレードオフとして

  • 精度の差異
    • 継続的な学習を行なっているためサーバを通した方が優れている。
  • リアルタイム性
    • ローカル実行すると遅延が少ない
  • 制限
    • ネットワーク通信ではリクエスト数と音声の長さを制限
    • ローカルでは無制限
  • 10の言語のみ対応
    • English, Spanish, Italian, Brazilian Portuguese, Russian, Turkish, Chinese

など、それぞれで問題点もあり、導入には要検討、と言ったところでしょうか。
特に、日本語対応していないのはかなり辛いですね。 :cry:

実装としては、SFSpeechRecognizerのインスタンスのsupportsOnDeviceRecognition(iOS13+)でローカルに対応しているかを確認して、SFSpeechAudioBufferRecognitionRequestなどのリクエストに生えたrequiresOnDeviceRecognitionをonにするだけです。

if speechRecognizer.supportsOnDeviceRecognition {
    recognitionRequest.requiresOnDeviceRecognition = true
} else {
    // do something    
}

Advances in Speech Recognition - WWDC 2019 - Videos - Apple Developerの冒頭で手元で検証してみたところ下記のようになっており、トランスクリプトと比べてみました。再現環境にもよるかもしれませんが、どちらにしても正確さに欠けるかなと言う印象です。
サーバ通信の方は、最初のSEを無理やり言語化しようとしてしまったみたいですし。。

トランスクリプト
Hi. I'm Neha Agrawal, and I'm a software engineer working on speech recognition. In 2016, we introduced the Speech Recognition framework for developers to solve their speech recognition needs. For anyone who is new to this framework, I highly recommend watching this Speech Recognition API session by my colleague Henry Mason.

ローカル サーバ通信
IMG_4885.PNG IMG_4886.PNG

豊富な音声分析について

Speech RecognitionがiOS10で提供が始まってからは、

  • 書き起こし(Transcription)
  • 代替解釈(Alternative interpretations)
  • 信頼度(Confidence levels)
  • タイミング情報(Timing information)

が結果として帰ってきていました。

iOS13からは新たに以下の結果も返してくれるようになりました。

  • 速度(Speaking rate): 人が1分あたりの単語で話す速さ
  • 平均休止時間(Average pause duration): 単語間の平均休止時間
  • 音声解析機能(Voice Analytics features): より高度で専門的な解析
    • Jitter: 音声のピッチの変化
    • Shimmer: 音声の振幅の変化
    • Pitch: トーンの高低
    • Voicing: スピーチの中で発生した領域(?)

下記のように、recognitionTaskメソッドの結果からアクセスすることができます。


if let result = result {

    let formattedString = result.bestTranscription.formattedString
    let speakingRate = result.bestTranscription.speakingRate
    let averagePauseDuration = result.bestTranscription.averagePauseDuration

    for segment in result.bestTranscription.segments {
        let jitter = segment.voiceAnalytics?.jitter.acousticFeatureValuePerFrame
        let shimmer = segment.voiceAnalytics?.shimmer.acousticFeatureValuePerFrame
        let pitch = segment.voiceAnalytics?.pitch.acousticFeatureValuePerFrame
        let voicing = segment.voiceAnalytics?.voicing.acousticFeatureValuePerFrame
    }
}

おわり

以上、Advances in Speech Recognition - WWDC 2019 - Videos - Apple Developerの内容に沿ってお届けしました。

分析のJitterやShimmerといった専門領域に踏み込めなかったので、より詳細な解説はどなたかにお譲りしたいと思います。分かりやすい記事が読みたい...!
また、Voicingが何をあらわすかもまだよくわかっていないです。。

サンプルコードはgithub.com/mtfum/SpeechSamplerに置いておきますのでご覧くださいませ。

お読みいただきありがとうございました。

参考

25
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
11