🎤

iPad Swift Playgroundsでリアルタイム音声テキスト変換を動かしてみた

2024/03/14に公開

はじめに

Bookで紹介した4足歩行ロボットでは、歩くだけでなく犬に見立てて
「おすわり」「ふせ」「おて」「おかわり」
のポーズをとれるようにしています。

リモコンのボタン操作で動きますが、やはり
声をかけて反応してくれた方がうれしいのではないかと思います。

搭載のRaspberry Pi Pico Wでは音声認識を組み込むことができません。
音声リモコンアプリを作成してBluetooth LEのワイヤレスで動けば、
あたかもロボットが反応しているように見えるのではないかと思っています。

その準備としてiPadのSwift Playgroundsでリアルタイム音声認識のアプリを作成してみました。

iPad Swift Playgrounds Preview
『吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番どうあくな種族であったそうだ。』
----- 青空文庫 夏目漱石『吾輩は猫である』より -----
このテキストをGoogle翻訳の日本語枠にコピペして読み上げてもらいました。
その音声を下で紹介する方法で作成したアプリが認識してテキスト化している様子です。

それでは、参考にしたTutorialと作成したコードを紹介します

Transcribing speech to text | iOS App Dev Tutorials

https://developer.apple.com/tutorials/app-dev-training/transcribing-speech-to-text

このTutorialは作成するアプリの規模が大きすぎて、音声認識を実装するポイントが判りにくいです。使用しているライブラリファイルと音声認識開始/終了の部分だけを利用することにしました。

iPad Swift Playgroundsへの実装ファイル

iPadのSwift Playgroundsで新しいアプリを作成して、swftファイルを全て削除してから
下の3ファイルに入れ替えることで、上の動画のように動きました。
3つのファイルはpicow_robo4/SwiftPlaygrounds_SpeechRecognizerに保存してあります。

1. SpeechRecognizer.swift

Tutorialのページ先頭にあるProject filesのリンクからTranscribingSpeechToText.zipをダウンロードし解凍します。その中にあるTranscribingSpeechToText/Complete/Scrumdinger/Models/SpeechRecognizer.swift
のファイルを使用します。GitHubにはオリジナルを明確にするために著作権表示"Copyright © 2022 Apple Inc."を含む(MIT)LICENSE文をソースに貼り付けてアップしました。

そのまま使用すると音声認識結果がリアルタイムにViewに反映されません。
動作中は表示されずに停止させると結果が表示されるという症状でした。
いろいろ調べた結果、@Publishedの設定が必要なことに気付き、
下のようにactor内のコードを変更しました。コード変更はこの部分のみです。

76    @MainActor @Published var transcript: String = ""

https://github.com/ha864git/picow_robo4/blob/main/SwiftPlaygrounds_SpeechRecognizer/SpeechRecognizer.swift#L53-L232

2. ContentView.swift

音声テキスト変換結果とマイクボタンを上下に配置したシンプルな構成です。
TutorialのSection2の内容でstart()とend()の関数を作成しました。

https://github.com/ha864git/picow_robo4/blob/main/SwiftPlaygrounds_SpeechRecognizer/ContentView.swift

3. MyApp.swift

https://github.com/ha864git/picow_robo4/blob/main/SwiftPlaygrounds_SpeechRecognizer/MyApp.swift

今後の予定

Bluetooth LE リモコンアプリに音声テキスト変換を組み込んで音声リモコン化します。

Discussion