iOS 应用程序上的 SFSpeechRecognizer(Siri 转录)超时错误
SFSpeechRecognizer (Siri Transcription) Timeout Error on iOS App
在我的 iOS 应用程序中,我正在尝试使用 iOS 10 的最新功能语音 API.
转录预先录制的音频
包括 documentation 在内的多个来源指出语音 API(更具体地说是 SFSpeechRecognizer)的音频持续时间限制为 1 分钟。
在我的代码中,我发现任何长度超过 15 秒或更长的音频文件都会出现以下错误。
Error Domain=kAFAssistantErrorDomain Code=203 "SessionId=com.siri.cortex.ace.speech.session.event.SpeechSessionId@50a8e246, Message=Timeout waiting for command after 30000 ms" UserInfo={NSLocalizedDescription=SessionId=com.siri.cortex.ace.speech.session.event.SpeechSessionId@50a8e246, Message=Timeout waiting for command after 30000 ms, NSUnderlyingError=0x170248c40 {错误域=SiriSpeechErrorDomain代码=100“(空)”}}
我在整个互联网上搜索过,但没能找到解决办法。也有人遇到同样的问题。有人怀疑是Nuance的问题。
同样值得注意的是,我确实从转录过程中得到了部分结果。
这是我的 iOS 应用程序中的代码。
` // 创建语音识别器请求对象。
让 srRequest = SFSpeechURLRecognitionRequest(url: 位置)
srRequest.shouldReportPartialResults = 假
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)
}
}
}
}
}`
感谢您的帮助。
删除 result.isFinal 并改为对结果进行空检查。参考:https://github.com/mssodhi/Jarvis-ios/blob/master/Jarvis-ios/HomeCell%2Bspeech.swift
除了其他人 运行 之外,我还没有确认我对同一问题的回答,但我相信这是对预录音频的未记录限制。
这是真的,我从视频中提取了音频文件,如果超过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秒,正如官方文档所述。
在我的 iOS 应用程序中,我正在尝试使用 iOS 10 的最新功能语音 API.
转录预先录制的音频包括 documentation 在内的多个来源指出语音 API(更具体地说是 SFSpeechRecognizer)的音频持续时间限制为 1 分钟。
在我的代码中,我发现任何长度超过 15 秒或更长的音频文件都会出现以下错误。
Error Domain=kAFAssistantErrorDomain Code=203 "SessionId=com.siri.cortex.ace.speech.session.event.SpeechSessionId@50a8e246, Message=Timeout waiting for command after 30000 ms" UserInfo={NSLocalizedDescription=SessionId=com.siri.cortex.ace.speech.session.event.SpeechSessionId@50a8e246, Message=Timeout waiting for command after 30000 ms, NSUnderlyingError=0x170248c40 {错误域=SiriSpeechErrorDomain代码=100“(空)”}}
我在整个互联网上搜索过,但没能找到解决办法。也有人遇到同样的问题。有人怀疑是Nuance的问题。
同样值得注意的是,我确实从转录过程中得到了部分结果。
这是我的 iOS 应用程序中的代码。 ` // 创建语音识别器请求对象。 让 srRequest = SFSpeechURLRecognitionRequest(url: 位置) srRequest.shouldReportPartialResults = 假
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)
}
}
}
}
}`
感谢您的帮助。
删除 result.isFinal 并改为对结果进行空检查。参考:https://github.com/mssodhi/Jarvis-ios/blob/master/Jarvis-ios/HomeCell%2Bspeech.swift
除了其他人 运行 之外,我还没有确认我对同一问题的回答,但我相信这是对预录音频的未记录限制。
这是真的,我从视频中提取了音频文件,如果超过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秒,正如官方文档所述。