【大模型】5.7语音识别
·
1. 代码功能简要说明
该代码基于OpenAI的Whisper-1语音识别模型和TTS-1文本转语音模型,实现“中文音频→英文文本→英文音频”的全流程转换:
- 核心流程1(语音翻译):读取本地郭德纲相声MP3音频文件,通过Whisper-1模型将音频中的中文内容识别并自动翻译成英文文本;
- 核心流程2(英文配音生成):将翻译后的英文文本,通过TTS-1模型(onyx男性低沉音色)生成英文配音音频文件,保存到本地;
- 补充说明:注释部分演示了基础用法(李云龙配音音频转中文文字、指定翻译提示词),核心代码完成相声音频的“中译英+英文配音”完整链路。
2. 带逐行详细注释的完整代码
# 导入os库:1.配置网络代理(解决国内访问OpenAI API的网络限制) 2.处理文件路径相关操作
import os
# 从openai库导入OpenAI类:创建API客户端,同时调用Whisper-1(语音识别)和TTS-1(文本转语音)接口
from openai import OpenAI
# 设置HTTP代理:127.0.0.1:7890是代理工具的本地端口,确保API请求能访问OpenAI服务器
os.environ['http_proxy'] = '127.0.0.1:7890'
# 设置HTTPS代理:OpenAI API基于HTTPS协议,需配置该代理确保语音识别/生成请求正常
os.environ['https_proxy'] = '127.0.0.1:7890'
# 初始化OpenAI客户端实例(前提:需配置OPENAI_API_KEY环境变量,否则会认证失败)
# 配置方式:Linux/Mac→终端执行export OPENAI_API_KEY="sk-你的密钥";Windows→终端执行set OPENAI_API_KEY="sk-你的密钥"
client = OpenAI()
# ===================== 注释部分:基础语音转录(李云龙配音转中文文字) =====================
# 把李云龙的配音变成文字(转录):以二进制只读模式(rb)打开本地音频文件(test1.mp3)
# audio_file = open('./audio/test1.mp3', 'rb')
#
# # 调用Whisper-1模型进行语音转录(音频→同语言文字,这里是中文音频转中文文字)
# transcription = client.audio.transcriptions.create(
# model='whisper-1', # 指定语音识别模型(仅支持whisper-1,OpenAI唯一的语音识别模型)
# file=audio_file # 传入打开的音频文件对象(必须是rb模式打开的二进制文件)
# )
#
# # 打印转录后的文字内容(transcription.text是固定取值路径)
# print(transcription.text)
# ===================== 注释部分:语音转录+翻译(中文音频→英文文字) =====================
# 转录 + 翻译(翻译成英文)
# translation = client.audio.translations.create(
# model='whisper-1', # 语音翻译仍使用whisper-1模型
# file=audio_file, # 传入李云龙配音的音频文件对象
# prompt='Translate into English' # 翻译提示词(可选,指定翻译为英文,whisper-1默认翻译为英文)
# )
#
# # 打印翻译后的英文文本
# print(translation.text)
# ===================== 核心代码:郭德纲相声→英文文本→英文音频 =====================
# 1. 打开郭德纲相声的本地音频文件(gdg.mp3),二进制只读模式(rb),用于后续翻译
gdg_audio_file = open('./audio/gdg.mp3', 'rb')
# 定义生成的英文配音音频文件保存路径(WAV/MP3格式均可,这里用MP3)
english_gdg_audio_file = './audio/gdg_english.mp3'
# 2. 调用Whisper-1模型进行语音翻译(中文音频→英文文字)
translation = client.audio.translations.create(
model='whisper-1', # 必选参数:语音翻译唯一模型whisper-1
file=gdg_audio_file, # 必选参数:传入打开的相声音频文件对象
# 无需指定prompt:whisper-1默认将任意语言音频翻译为英文
)
# 3. 提取翻译后的英文文本(translation.text是固定取值路径)
english_txt = translation.text
# 优化print:添加说明文字,清晰展示翻译后的英文文本
print('=== 郭德纲相声音频翻译结果(中文→英文) ===')
print(f'英文文本:\n{english_txt}')
# 关闭音频文件对象:释放系统资源(open()打开的文件需手动关闭,避免资源泄漏)
gdg_audio_file.close()
# 4. 将翻译后的英文文本生成英文配音音频(复用TTS-1文本转语音功能)
# with语句:流式响应上下文管理器,实时生成并保存音频,节省内存
with client.audio.speech.with_streaming_response.create(
model='tts-1', # 指定文本转语音模型(tts-1=标准音质,tts-1-hd=高清)
voice='onyx', # 指定语音音色(onyx=男性低沉音色,适配相声旁白风格)
input=english_txt # 传入翻译后的英文文本,作为配音的内容
) as resp:
# 将流式生成的英文音频数据保存到指定路径(gdg_english.mp3)
resp.stream_to_file(english_gdg_audio_file)
# 优化print:添加配音生成成功的提示,告知保存路径
print('\n=== 英文配音生成成功 ===')
print(f'保存路径:{english_gdg_audio_file}')
print(f'配音参数:\n- 模型:tts-1\n- 音色:onyx(男性低沉)\n- 内容:郭德纲相声英文翻译文本')
3. 无任何注释的代码版本
import os
from openai import OpenAI
os.environ['http_proxy'] = '127.0.0.1:7890'
os.environ['https_proxy'] = '127.0.0.1:7890'
client = OpenAI()
gdg_audio_file = open('./audio/gdg.mp3', 'rb')
english_gdg_audio_file = './audio/gdg_english.mp3'
translation = client.audio.translations.create(
model='whisper-1',
file=gdg_audio_file,
)
english_txt = translation.text
print('=== 郭德纲相声音频翻译结果(中文→英文) ===')
print(f'英文文本:\n{english_txt}')
gdg_audio_file.close()
with client.audio.speech.with_streaming_response.create(
model='tts-1',
voice='onyx',
input=english_txt
) as resp:
resp.stream_to_file(english_gdg_audio_file)
print('\n=== 英文配音生成成功 ===')
print(f'保存路径:{english_gdg_audio_file}')
print(f'配音参数:\n- 模型:tts-1\n- 音色:onyx(男性低沉)\n- 内容:郭德纲相声英文翻译文本')
4. 核心知识点详解(系统梳理+表格)
4.1 核心概念梳理
| 概念 | 通俗解释 | 关键说明 |
|---|---|---|
| Whisper-1 | OpenAI推出的多语言语音识别/翻译模型 | 1. 核心能力: - 转录(Transcriptions):将任意语言音频转为同语言文字(如中文音频→中文文字) - 翻译(Translations):将任意语言音频转为英文文字(默认行为,无需额外配置) 2. 支持音频格式:mp3、wav、mp4、m4a等(几乎覆盖所有常见格式) 3. 计费方式:按音频时长计费(单位:分钟),支持最长4小时的音频 |
| 语音转录(Transcriptions) | 音频→同语言文字(“听出音频里说的话”) | 1. 调用方式:client.audio.transcriptions.create()2. 核心参数:model(固定whisper-1)、file(音频文件对象) 3. 适用场景:语音转文字、字幕生成、会议记录 |
| 语音翻译(Translations) | 任意语言音频→英文文字(“听懂外语并翻译成英文”) | 1. 调用方式:client.audio.translations.create()2. 核心参数:model(固定whisper-1)、file(音频文件对象)、prompt(可选,指定翻译要求) 3. 特点:Whisper-1默认将所有语言翻译为英文,无需指定目标语言 |
| 音频文件操作(rb模式) | 以二进制只读模式打开音频文件 | 1. 必须用rb模式:音频是二进制文件,r模式(文本模式)打开会导致文件损坏/识别失败2. 资源释放: open()打开的文件需用close()关闭,或用with语句自动关闭(推荐)3. 路径注意:需确保音频文件路径正确(如 ./audio/gdg.mp3表示代码同级的audio文件夹下的gdg.mp3) |
| TTS-1复用(文本转语音) | 将翻译后的英文文本生成英文音频 | 1. 核心逻辑:语音翻译的输出(英文文本)作为TTS-1的输入(文本),实现“音频→文字→音频”转换 2. 音色选择:onyx(男性低沉)适配相声/解说风格,nova(女性清亮)适配新闻风格 |
4.2 Whisper-1 API核心参数对照表
| 功能 | 方法 | 必选参数 | 可选参数 | 核心返回值 |
|---|---|---|---|---|
| 语音转录(同语言) | client.audio.transcriptions.create() | model(whisper-1)、file(音频文件) | language(指定音频语言,如zh)、response_format(返回格式) | transcription.text(转录文本) |
| 语音翻译(→英文) | client.audio.translations.create() | model(whisper-1)、file(音频文件) | prompt(翻译提示词)、temperature(随机性) | translation.text(翻译文本) |
4.3 关键参数补充说明
| 参数名 | 取值示例 | 作用 | 适用场景 |
|---|---|---|---|
| language(转录可选) | ‘zh’ / ‘en’ / ‘ja’ | 指定音频的原始语言,提升转录准确率 | 音频语言不明确时(如混合中英文) |
| response_format(转录可选) | ‘text’ / ‘json’ / ‘srt’ | 指定返回格式,srt为字幕文件格式 | 生成字幕文件时(如视频字幕) |
| prompt(翻译可选) | ‘Translate into English, keep the humor’ | 自定义翻译要求(如保留幽默感) | 需精准控制翻译风格时(如相声/小说) |
5. Print函数优化与输出说明
5.1 优化后的Print代码及输出示例
| 代码行 | 输出示例 | 核心作用 |
|---|---|---|
print('=== 郭德纲相声音频翻译结果(中文→英文) ===') |
(分隔符,标识翻译结果) | 明确区分翻译结果和配音结果,提升可读性 |
print(f'英文文本:\n{english_txt}') |
英文文本: Guo Degang’s cross talk is full of humor, talking about daily life and human feelings… |
换行符\n让长文本排版整洁,避免拥挤 |
print('\n=== 英文配音生成成功 ===') |
(分隔符,标识配音结果) | 告知用户配音生成完成,引导关注保存路径 |
print(f'保存路径:{english_gdg_audio_file}') |
保存路径:./audio/gdg_english.mp3 | 明确音频文件位置,方便查找/播放 |
5.2 常见错误输出示例(补充)
=== 语音翻译失败 ===
错误信息:FileNotFoundError: [Errno 2] No such file or directory: './audio/gdg.mp3'
- 关键解读:
./audio/gdg.mp3文件不存在,需检查:- audio文件夹是否创建;
- gdg.mp3是否放入audio文件夹;
- 文件名称是否拼写正确(如gdg.mp3 vs GDG.mp3,区分大小写)。
总结(关键点回顾)
- 核心流程:本代码实现“中文音频→Whisper-1翻译→英文文本→TTS-1生成→英文音频”的完整链路,核心依赖Whisper-1的翻译能力和TTS-1的配音能力;
- Whisper-1关键:
- 转录(Transcriptions)是“音频→同语言文字”,翻译(Translations)是“音频→英文文字”;
- 音频文件必须用
rb模式打开,否则会识别失败;
- 实用技巧:
- 长音频(>1小时)建议分段处理,避免API超时;
- 转录中文音频时,添加
language='zh'参数可提升准确率; - 打开的音频文件需手动
close()或用with语句自动关闭,避免资源泄漏;
- TTS-1适配:翻译后的英文文本生成音频时,音色选择需匹配内容风格(相声选onyx,新闻选nova)。
更多推荐

所有评论(0)