如何使用Python实现多说话人音频转录,无需调用谷歌付费API
双说话人MP3音频转录解决方案
实现思路
你当前的代码仅做了全量音频的统一识别,没有说话人分割逻辑,因此会合并不同人的内容。无需绑定谷歌付费API,可通过开源离线工具链实现需求:先使用说话人分割模型将音频按不同说话人切分片段,再逐段做语音识别,即可输出区分说话人的转录结果,全流程可本地运行,适合批量测试识别准确率。
识别字典优化方法
- 自定义热词注入:识别前将领域专有名词、人名、特定术语整理为文本,传入识别模型的提示词参数,模型会优先匹配这些词汇,大幅降低专有内容的误识别率
- 发音词典适配:针对你使用的南非英语(en-ZA)场景,可替换为对应地区的发音词典,适配本地口音、俚语的发音习惯
- 错误语料迭代:批量测试过程中,将识别错误的片段和正确文本整理为小样本数据集,对识别模型做轻量微调,可快速适配你的业务场景识别需求
- 权重动态调整:针对高频出现的核心词汇,可手动调整识别权重,让模型优先输出这些词汇的匹配结果
完整实现代码
首先提前安装依赖包:pip install pydub speechrecognition pyannote.audio openai-whisper torch
代码示例:
import whisper from pyannote.audio import Pipeline from pydub import AudioSegment import os # 1. 音频格式转换,和你原有逻辑一致 sound = AudioSegment.from_mp3("transcript.mp3") sound.export("transcript.wav", format="wav") AUDIO_FILE = "transcript.wav" # 2. 加载本地说话人分割模型,首次下载需要Hugging Face令牌,后续可完全离线运行 pipeline = Pipeline.from_pretrained( "pyannote/speaker-diarization-3.1", use_auth_token="你的Hugging Face授权令牌" ) diarization = pipeline(AUDIO_FILE) # 3. 加载Whisper离线识别模型,可选小模型加速测试,大模型提升准确率 model = whisper.load_model("small", device="cuda" if torch.cuda.is_available() else "cpu") # 注入自定义热词,优化识别效果,直接把需要优先识别的词汇填到下方字符串里即可 custom_prompt = "此处填入你的专有词汇、热词列表,用空格分隔" # 4. 按说话人分段识别 result = [] for segment, _, speaker in diarization.itertracks(yield_label=True): start_ms = segment.start * 1000 end_ms = segment.end * 1000 # 切分对应音频片段 segment_audio = sound[start_ms:end_ms] segment_audio.export("temp_segment.wav", format="wav") # 识别当前片段 seg_result = model.transcribe("temp_segment.wav", language="en-ZA", initial_prompt=custom_prompt) result.append(f"{speaker}: {seg_result['text'].strip()}") # 删除临时片段文件 os.remove("temp_segment.wav") # 输出区分说话人的转录结果 for line in result: print(line)
批量测试注意事项
批量测试准确率时可选择不同大小的Whisper模型,tiny/base模型速度快适合跑通流程,medium/large模型准确率更高适合最终效果测试,全流程均支持本地离线运行,无需调用外部付费API。
内容的提问来源于stack exchange,提问作者Urav Reddy
相关产品推荐
相关产品推荐

