是否可以限制SFSpeechRecognizer的词汇量?

问题描述 投票:0回答:3

我想用 ios

SFSpeechRecognizer
来识别一组封闭的单词和短语。有没有办法指定这些并删除所有其他可能性?我似乎找不到办法做到这一点。

ios speech-recognition speech-to-text sfspeechrecognizer
3个回答
3
投票

您可以尝试使用SFSpeechAudioBufferRecognitionRequestcontextualStrings属性来设置高优先级或设置一些不在词汇表中的词。 有关更多信息,请查看此处:https://developer.apple.com/documentation/speech/sfspeechrecognitionrequest/1649391-contextualstrings?language=objc

  SFSpeechAudioBufferRecognitionRequest *recognitionRequest = [[SFSpeechAudioBufferRecognitionRequest alloc] init];
    recognitionRequest.contextualStrings = @[@"Your specific word", @"short custom phrases that are unique to your app"];

1
投票

我认为你不能限制

SFSpeechRecognizer
的词汇量,但只有当你想要的词被识别时你才能开火。

当你得到你的输出时,你可以尝试这样的事情:

self.recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) in
    if result == "Desired word one" {
        // Do something
    } else if result == "Desired word two" {
        // Do something else
    } else {
        // Don't do anything
    }
})

0
投票

经过反复试验,最好的解决方案是混合 Mrsantateam 和 Giuseppe Garassino 的答案。

您可以首先通过设置

contextualStrings
...

指定所有应“优先”的命令
var contextualString = ["hello world", "goodbye world"]
recognitionRequest.contextualStrings = contextualString

...然后在

recognitionTask
中过滤这些结果:

recognitionTask = speechRecognizer.recognitionTask(with: recognitionRequest) { result, error in
    var isFinal = false
    
    if let result = result {                
        for transcription in result.transcriptions {
            print("Pondering \(result.bestTranscription.formattedString)")
            if contextualString.contains(transcription.formattedString.lowercased()) {
                print("Found \(transcription.formattedString)")
            }
        }
    }
    
    //...
}

示例代码可以在 https://developer.apple.com/documentation/speech/recognizing_speech_in_live_audio 如果你想玩它并测试它的限制

© www.soinside.com 2019 - 2024. All rights reserved.