質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

462閲覧

swiftの音声認識の結果が複数出て、最初の候補が選択されてしまう

aonekox_63

総合スコア2

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/09/11 08:21

swiftで音声認識を用い、音声から変換されたテキストを、正解テキストと照合させ、正誤を表示させるというアプリを作成しています。

正しい発音をしているにもかかわらず不正解になってしまうものがあるので、音声から変換されたテキストをデバグエリアにprintで表示させたところ、一度に3個の答えが表示されます。

不正解になってしまうものは多くが、3個のうち一番最初に表示されているものを答えと認識して、正解テキストと照合しているようなのです。

例えば正解が「馬」の場合、



と表示されていて、結果として不正解になってしまいます。

最後に表示されているものを答えと認識させたいのですが、何かやり方がありますでしょうか?

swift

1コード 2``func startLiveTranscription() throws { 3 4 // もし前回の音声認識タスクが実行中ならキャンセル 5 if let recognitionTask = self.recognitionTask { 6 recognitionTask.cancel() 7 self.recognitionTask = nil 8 } 9 10 // 音声認識リクエストの作成 11 recognitionReq = SFSpeechAudioBufferRecognitionRequest() 12 guard let recognitionReq = recognitionReq else { 13 return 14 } 15 recognitionReq.shouldReportPartialResults = true 16 17 // オーディオセッションの設定 18 let audioSession = AVAudioSession.sharedInstance() 19 try audioSession.setCategory(.record, mode: .measurement, options: .duckOthers) 20 try audioSession.setActive(true, options: .notifyOthersOnDeactivation) 21 let inputNode = audioEngine.inputNode 22 23 // マイク入力の設定 24 let recordingFormat = inputNode.outputFormat(forBus: 0) 25 inputNode.installTap(onBus: 0, bufferSize: 2048, format: recordingFormat) { (buffer, time) in 26 recognitionReq.append(buffer) 27 } 28 audioEngine.prepare() 29 try audioEngine.start() 30 31 recognitionTask = recognizer.recognitionTask(with: recognitionReq, resultHandler: { (result, error) in 32 33 if let error = error { 34 print("(error)") 35 } else { 36 37 self.answer = result!.bestTranscription.formattedString 38 39 print("(self.answer)回答") 40 41 self.stopLiveTranscription() 42 43 if self.answer.contains(self.correctWord1) { 44 let vc = self.storyboard?.instantiateViewController(identifier: "正解の画面") 45 self.present(vc!, animated: true, completion: nil) 46 } 47else { 48 49 let vc = self.storyboard?.instantiateViewController(identifier: "不正解の画面") as! batsuViewController 50 vc.correctWord = self.correctWord 51 self.present(vc, animated: true, completion: nil) 52 53 } 54 } 55 } 56 ) 57 } 58@IBAction func micButton(_ sender: Any) { 59 self.direction.text = "絵の名前を言ってください" 60 self.gotoon.isEnabled = false 61 try! startLiveTranscription() 62 startTimer() 63 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TsukubaDepot

2020/09/11 08:49

明確な回答ではないのですが、以前やってみたときの感想だと以下のような感じです。 音声認識の結果には、「もっともらしさ(confidence)」も一緒に計算されて、その値が一定値以上のものが結果として得られたと思います。 以前回答した回答では、このもっともらしさを使って認識を判断させていたような気がします。 以下がそのリンクとなりますので、合わせて参照していただければと思います。 「音声でiOSアプリを動かしたい」 https://teratail.com/questions/248254 ちなみに、1単語(あるいは文節)だけの認識は結構難しい印象があります。一つのまとまりがある文章であれば、単語(あるいは文節)のもっともらしさは文全体のもっともらしさから計算することが可能だったと思いますが、単語だけとなると、それがもっともらしいと判断することが難しいためです。 人間どうしの通常の会話でも、単語だけだとわからないため(日本語だと同音異義語が多いので尚更)、文脈を聞いて初めて理解できることが多いことは経験上ご納得いただけるかと思います。
TsukubaDepot

2020/09/11 08:50

上記の回答で引用しているQiitaの記事を使うと、認識結果をリアルタイムに観察することができるため、iOSの認識エンジンの特徴を観察することもできたかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問