在我的iOS应用程序中,我正在尝试使用iOS 10的最新功能Speech API转录预先录制的音频。
包括documentation在内的多个来源已声明Speech API(更具体地说是SFSpeechRecognizer)的音频持续时间限制为1分钟。
在我的代码中,我发现任何长度约为15秒或更长的音频文件都会出现以下错误。
错误域= kAFAssistantErrorDomain代码= 203" SessionId = com.siri.cortex.ace.speech.session.event.SpeechSessionId@50a8e246,消息=超时30000毫秒后等待命令" UserInfo = {NSLocalizedDescription=SessionId=com.siri.cortex.ace.speech.session.event.SpeechSessionId@50a8e246,Message = 30000 ms后等待命令的超时,NSUnderlyingError = 0x170248c40 {Error Domain = SiriSpeechErrorDomain Code = 100" (空)"}}
我在互联网上搜索过,但未能找到解决方法。也有人有同样的问题。有些人怀疑这是Nuance的问题。
值得注意的是,我确实从转录过程中获得了部分结果。
这是我的iOS应用中的代码。 `//创建一个语音识别器请求对象。 让srRequest = SFSpeechURLRecognitionRequest(网址:位置) srRequest.shouldReportPartialResults = false
sr?.recognitionTask(with: srRequest) { (result, error) in
if let error = error {
// Something wrong happened
print(error.localizedDescription)
} else {
if let result = result {
print(4)
print(result.bestTranscription.formattedString)
if result.isFinal {
print(5)
transcript = result.bestTranscription.formattedString
print(result.bestTranscription.formattedString)
// Store the transcript into the database.
print("\nSiri-Transcript: " + transcript!)
// Store the audio transcript into Firebase Realtime Database
self.firebaseRef = FIRDatabase.database().reference()
let ud = UserDefaults.standard
if let uid = ud.string(forKey: "uid") {
print("Storing the transcript into the database.")
let path = "users" + "/" + uid + "/" + "siri_transcripts" + "/" + date_recorded + "/" + filename.components(separatedBy: ".")[0]
print("transcript database path: \(path)")
self.firebaseRef.child(path).setValue(transcript)
}
}
}
}
}`
感谢您的帮助。
答案 0 :(得分:2)
我没有确认我的答案,除了遇到同样问题的其他人,但我认为这是对预先录制的音频的无证限制。
答案 1 :(得分:0)
删除result.isFinal并对结果执行null检查。参考:https://github.com/mssodhi/Jarvis-ios/blob/master/Jarvis-ios/HomeCell%2Bspeech.swift
答案 2 :(得分:0)
是的,我从视频中提取了音频文件,如果超过15秒,则会出现以下错误:
Domain = kAFAssistantErrorDomain Code = 203 "Timeout" UserInfo = {
NSLocalizedDescription = Timeout,
NSUnderlyingError = 0x1c0647950 {Error Domain=SiriSpeechErrorDomain Code=100 "(null)"}
}
关键问题是超过15秒后会识别音频文件。
result.isFinal
始终是0
,非常令人沮丧的是没有准确的时间戳,尽管它是“ Timeout”,但具有完整的识别内容,这让我感到很奇怪。
如果打印出结果遍历,则可以看到有一些限制,即15秒,但是原因是音频文件的时间戳反馈被限制为有限的数量,例如15或4或9,通向终点。超时反馈更加不稳定。
但是在实时语音识别中,您可以在一分钟之内突破15秒(如官方文档中所述)。