将预先录制的音频文件转换为文本是语音识别中的一项基础任务。这个过程需要Python环境,它构成了许多应用的根基,例如转录访谈、为视频生成字幕或分析客户服务通话。我们将使用 SpeechRecognition 库,它为多个流行的ASR服务提供了方便的接口。对于本次练习,你需要一个音频文件。WAV格式是理想的,因为它未经压缩且得到广泛支持,无需额外软件。如果你没有,可以轻松找到或创建一段包含清晰语句(例如“hello, this is a test”)的短WAV文件。将此文件保存在你存放Python脚本的同一目录下,并命名为 test-audio.wav。转录流程使用 SpeechRecognition 库转录音频文件的过程涉及几个不同的步骤。首先,你的脚本会初始化一个 Recognizer 对象。该对象随后会打开并读取音频文件,将其数据加载为库可以处理的格式。最后,这些音频数据被发送到一个外部ASR引擎,该引擎返回转录的文本。digraph G { rankdir=TB; splines=ortho; node [shape=box, style="rounded,filled", fontname="Arial", margin=0.2]; edge [fontname="Arial"]; file [label="test-audio.wav", fillcolor="#a5d8ff"]; script [label="Python 脚本", fillcolor="#b2f2bb"]; recognizer [label="识别器对象", fillcolor="#ffec99"]; api [label="ASR API\n(例如,Google Web Speech)", fillcolor="#fcc2d7"]; text_out [label="\"hello this is a test\"", shape=note, fillcolor="#e9ecef"]; file -> script [label=" 1. 加载"]; script -> recognizer [label=" 2. 创建识别器\n 3. 录制音频数据"]; recognizer -> api [label=" 4. 发送请求"]; api -> recognizer [label=" 5. 接收响应"]; recognizer -> script [label=" 6. 返回文本"]; script -> text_out [label=" 7. 打印结果"]; }使用Python脚本和ASR API转录音频文件的步骤图示。编写转录脚本让我们编写Python代码来实现这一点。创建一个名为 transcribe_file.py 的新文件,并添加以下代码。我们将逐一讲解脚本的每个部分。import speech_recognition as sr # 1. 初始化识别器 r = sr.Recognizer() # 2. 定义音频文件路径 audio_file = "test-audio.wav" # 3. 打开音频文件并处理 with sr.AudioFile(audio_file) as source: # 从文件中读取音频数据 audio_data = r.record(source) # 4. 执行识别 print("正在转录音频...") try: # 使用谷歌的免费网络语音API text = r.recognize_google(audio_data) print(f"转录结果: {text}") except sr.UnknownValueError: # API无法理解音频 print("Google语音识别无法理解该音频。") except sr.RequestError as e: # API无法访问或无响应 print(f"无法从Google语音识别服务请求结果; {e}") 理解代码让我们将脚本分解为主要部分。1. 初始化识别器import speech_recognition as sr r = sr.Recognizer()首先,我们导入库,使用 sr 作为标准别名以保持代码简洁。然后,我们创建一个 Recognizer 类的实例。这个 r 对象是我们应用程序的核心部分。它负责处理音频输入并与ASR服务通信。2. 打开音频文件audio_file = "test-audio.wav" with sr.AudioFile(audio_file) as source: # ... 处理文件的代码在此处 ...在这里,我们指定音频文件的名称。然后,我们在 with 语句中使用 sr.AudioFile()。这是一种重要的实践,因为它会自动处理文件的打开和关闭,确保资源得到正确管理。这个 AudioFile 对象,我们称之为 source,代表我们已打开的音频文件。3. 读取音频数据audio_data = r.record(source)在 with 代码块内部,我们调用 r.record(source)。这个方法接收 source 对象,读取音频文件的全部内容,并将其存储在一个 AudioData 对象中。现在,这个 audio_data 变量以识别器可以处理的格式保存着音频。4. 执行识别并处理错误try: text = r.recognize_google(audio_data) print(f"转录结果: {text}") except sr.UnknownValueError: print("Google语音识别无法理解该音频。") except sr.RequestError as e: print(f"无法从Google语音识别服务请求结果; {e}")这就是实际转录发生的地方。因为我们通过网络向外部服务发送请求,所以可能会出现问题。音频可能嘈杂,服务可能停止运行,或者你的互联网连接可能失败。使用 try...except 块可以使我们的脚本更具韧性。r.recognize_google(audio_data): 这是完成工作的方法。它将 audio_data 发送到谷歌的网络语音API并等待响应。如果成功,它将转录的文本作为字符串返回。except sr.UnknownValueError: 当语音识别器无法理解所说内容时,会引发此错误。这可能发生在音频只有静默、包含太多背景噪音,或者语言不符合API预期的情况下。except sr.RequestError: 如果与API的网络连接出现问题,例如没有互联网访问或服务本身存在问题,则会发生此错误。运行你的首次转录要运行脚本,请保存它并从你的终端执行,确保 test-audio.wav 文件位于同一目录中。python transcribe_file.py如果一切正常,你应该看到类似于这样的输出:Transcribing audio... Transcription: hello this is a test恭喜。你已成功编写了一个程序,可以将音频文件中的口语转换为文本。这个简单的脚本是一个有力的起点。在下一节中,我们将调整此代码以直接从你的麦克风处理实时音频输入。