趋近智
当您调用语音识别服务时,您正在通过网络发送音频数据并等待响应。这个过程并非即时,并且可能因为程序无法控制的原因而失败。服务可能暂时不可用,您的网络连接可能中断,或者您发送的音频可能不包含任何可识别的语音。一个设计良好的应用程序必须预见这些问题并妥善处理,而不是崩溃。
处理 ASR 服务的不同响应对于构建可靠的语音识别应用程序非常重要。这包括成功的转录以及可能出现的各种错误。通常使用 Python 的 try...except 块来管理这些情况,从而确保应用程序能够优雅地处理潜在问题。
当识别尝试成功时,大多数库和 API 返回的不仅仅是转录的文本。它们通常提供一个结构化响应,通常以字典或对象形式,包含额外的元数据。虽然确切的结构在不同服务之间(如 Google Web Speech API 与 Wit.ai)有所不同,但它们通常包含相似的信息。
例如,服务可能会返回多个可能的转录,每个都有一个置信度分数。
# ASR 服务的一个潜在响应对象
{
"transcriptions": [
{
"transcript": "what time is it",
"confidence": 0.94
},
{
"transcript": "what time was it",
"confidence": 0.05
}
],
"is_final": True,
"language_code": "en-US"
}
在此响应中,最可能的转录是“what time is it”,置信度分数为 94%。获取这些额外信息对于更复杂的应用程序很有用。例如,如果最高置信度分数很低,您可能会要求用户重复。目前,我们的主要目标是稳定获取主要的 transcript。
在编程中,我们不能只为一切顺利的“顺利路径”做计划。我们还必须处理不可避免的错误。使用 Python 中流行的 SpeechRecognition 库时,API 调用在出现问题时会引发异常。您会遇到的两个最常见的异常是 UnknownValueError 和 RequestError。
有时,音频已成功发送到 ASR 服务,但服务无法在其中找到任何可识别的语音。如果麦克风只捕捉到背景噪音,或者说话者含糊不清,或者音频是静音的,都可能发生这种情况。
在这种情况下,SpeechRecognition 库会引发 UnknownValueError。您的程序应该捕获此异常并告知用户音频无法理解。
另一个常见问题是您的程序根本无法与 ASR 服务通信。这可能由于以下几个原因:
对于这些情况,库会引发 RequestError。捕获此异常可以让您提供一条有用的消息,例如“无法连接到语音识别服务”,这比让程序因晦涩的网络错误而终止要好得多。
为了处理这些潜在故障,您应该将 API 调用包裹在一个 try...except 块中。这告诉 Python:“尝试运行这段代码,但如果发生特定错误,不要崩溃。而是运行这段其他代码。”
让我们看一下上一节中的一个简单的转录脚本,并使其更强大。
这是原始的“顺利路径”代码:
# 警告:此代码未处理错误!
import speech_recognition as sr
r = sr.Recognizer()
with sr.Microphone() as source:
print("请说点什么!")
audio = r.listen(source)
# 如果语音未被理解或 API 不可用,此行将导致程序崩溃
text = r.recognize_google(audio)
print("您说的是:" + text)
如果您运行此代码并保持沉默,程序将因 UnknownValueError 而崩溃。
现在,让我们添加错误处理:
# 此代码包含错误处理
import speech_recognition as sr
r = sr.Recognizer()
with sr.Microphone() as source:
print("请说点什么!")
audio = r.listen(source)
# 使用 try...except 块来处理潜在错误
try:
# 尝试识别语音
text = r.recognize_google(audio)
print("您说的是:" + text)
except sr.UnknownValueError:
# 如果语音无法识别,则运行此块
print("Google 语音识别无法理解音频")
except sr.RequestError as e:
# 如果服务出现问题,则运行此块
print(f"无法从 Google 语音识别服务请求结果;{e}")
这个更新版本更加用户友好。它为每种常见故障模式提供清晰的反馈,而不是崩溃。这个流程的逻辑可以可视化为决策路径。
此图说明了语音识别尝试的控制流程。程序尝试执行识别,并根据成功与否或是否遇到特定错误而遵循不同的路径。
当您在下一节继续构建语音命令工具时,请记住这些指导原则:
try 块内。speech_recognition.UnknownValueError 和 speech_recognition.RequestError,以便向用户提供明确、有用的反馈。通过处理成功和失败,您可以确保您的应用程序稳定并提供良好的用户体验,这是从简单的脚本转向功能性应用程序的重要一步。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造