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 }
あなたの回答
tips
プレビュー