Python实现实时语音转录:基于faster-whisper-small的完整代码示例
·
Python实现实时语音转录:基于faster-whisper-small的完整代码示例
想要快速实现实时语音转录功能吗?今天我将为您展示如何使用faster-whisper-small模型在Python中构建一个高效的语音转文字系统!🎙️
什么是faster-whisper-small?
faster-whisper-small是一个基于OpenAI Whisper模型的优化版本,专门针对实时语音转录场景进行了性能优化。它采用了CTranslate2框架进行加速,相比原始Whisper模型,推理速度提升了2-4倍,同时保持了出色的转录准确率。
这个模型支持99种语言的语音识别,包括中文、英文、日语、韩语等主流语言,是构建多语言语音应用的理想选择。🚀
环境准备与安装
在开始之前,您需要确保系统已安装必要的依赖:
1. 安装Python包
pip install faster-whisper
pip install pyaudio
pip install numpy
2. 下载模型文件
您可以直接从GitCode仓库克隆项目:
git clone https://gitcode.com/hf_mirrors/pengzhendong/faster-whisper-small
项目包含以下核心文件:
model.bin- 模型权重文件config.json- 模型配置文件tokenizer.json- 分词器文件vocabulary.txt- 词汇表文件
实时语音转录实现步骤
第一步:导入必要的库
import pyaudio
import numpy as np
from faster_whisper import WhisperModel
import wave
import threading
import queue
第二步:初始化模型
def initialize_model(model_path="faster-whisper-small"):
# 加载优化后的Whisper模型
model = WhisperModel(
model_path,
device="cpu", # 可使用"cuda"加速
compute_type="int8" # 量化类型,可选"float16"
)
return model
第三步:音频采集与处理
class AudioRecorder:
def __init__(self, sample_rate=16000, chunk_duration=3):
self.sample_rate = sample_rate
self.chunk_duration = chunk_duration
self.chunk_size = sample_rate * chunk_duration
self.audio_queue = queue.Queue()
def start_recording(self):
p = pyaudio.PyAudio()
stream = p.open(
format=pyaudio.paInt16,
channels=1,
rate=self.sample_rate,
input=True,
frames_per_buffer=self.chunk_size
)
print("🎤 开始录音...按Ctrl+C停止")
try:
while True:
audio_data = stream.read(self.chunk_size)
audio_array = np.frombuffer(audio_data, dtype=np.int16)
self.audio_queue.put(audio_array)
except KeyboardInterrupt:
print("\n⏹️ 停止录音")
finally:
stream.stop_stream()
stream.close()
p.terminate()
第四步:实时转录核心逻辑
class RealTimeTranscriber:
def __init__(self, model):
self.model = model
self.transcription_queue = queue.Queue()
def transcribe_audio(self, audio_array):
# 将音频数据转换为float32格式
audio_float = audio_array.astype(np.float32) / 32768.0
# 执行语音识别
segments, info = self.model.transcribe(
audio_float,
language="zh", # 设置语言为中文
beam_size=5,
vad_filter=True # 启用语音活动检测
)
# 收集转录结果
transcriptions = []
for segment in segments:
transcriptions.append(f"[{segment.start:.1f}s-{segment.end:.1f}s] {segment.text}")
return "\n".join(transcriptions)
def start_transcription(self, audio_queue):
print("🔊 开始实时转录...")
while True:
try:
audio_chunk = audio_queue.get(timeout=1)
if audio_chunk is None:
break
# 执行转录
result = self.transcribe_audio(audio_chunk)
if result:
print(f"📝 转录结果: {result}")
self.transcription_queue.put(result)
except queue.Empty:
continue
except KeyboardInterrupt:
break
第五步:主程序集成
def main():
print("🚀 初始化faster-whisper-small模型...")
model = initialize_model()
# 创建录音器和转录器
recorder = AudioRecorder()
transcriber = RealTimeTranscriber(model)
# 启动录音线程
record_thread = threading.Thread(target=recorder.start_recording)
record_thread.start()
# 启动转录线程
transcribe_thread = threading.Thread(
target=transcriber.start_transcription,
args=(recorder.audio_queue,)
)
transcribe_thread.start()
# 等待线程完成
record_thread.join()
transcriber.transcription_queue.put(None)
transcribe_thread.join()
print("✅ 转录完成!")
if __name__ == "__main__":
main()
高级功能扩展
1. 多语言支持
# 支持99种语言,包括:
# 中文(zh)、英文(en)、日语(ja)、韩语(ko)
# 法语(fr)、德语(de)、西班牙语(es)、俄语(ru)
def detect_language(audio_array):
# 自动检测音频语言
_, info = model.transcribe(audio_array, language=None)
detected_lang = info.language
print(f"🌍 检测到语言: {detected_lang}")
return detected_lang
2. 批量处理音频文件
def batch_transcribe(audio_files):
results = {}
for audio_file in audio_files:
print(f"处理文件: {audio_file}")
segments, _ = model.transcribe(audio_file)
results[audio_file] = [segment.text for segment in segments]
return results
3. 实时字幕生成
class LiveSubtitleGenerator:
def __init__(self, model, output_file="subtitles.srt"):
self.model = model
self.output_file = output_file
self.subtitle_index = 1
def generate_subtitle(self, audio_chunk, start_time):
segments, _ = self.model.transcribe(audio_chunk)
with open(self.output_file, "a", encoding="utf-8") as f:
for segment in segments:
# 生成SRT格式字幕
f.write(f"{self.subtitle_index}\n")
f.write(f"{format_time(start_time + segment.start)} --> "
f"{format_time(start_time + segment.end)}\n")
f.write(f"{segment.text}\n\n")
self.subtitle_index += 1
性能优化技巧
🚀 加速技巧1:使用GPU加速
# 如果系统有NVIDIA GPU
model = WhisperModel(
"faster-whisper-small",
device="cuda", # 使用GPU
compute_type="float16" # 半精度浮点数
)
🚀 加速技巧2:批处理优化
# 批量处理多个音频片段
def batch_process(audio_chunks):
# 合并多个音频片段
combined_audio = np.concatenate(audio_chunks)
segments, _ = model.transcribe(combined_audio)
return segments
🚀 加速技巧3:内存优化
# 使用量化减少内存占用
model = WhisperModel(
"faster-whisper-small",
device="cpu",
compute_type="int8", # 8位整数量化
cpu_threads=4 # 多线程处理
)
常见问题解决
❓ 问题1:音频质量不佳
解决方案:
- 确保采样率为16000Hz
- 使用降噪麦克风
- 调整录音环境,减少背景噪音
❓ 问题2:转录速度慢
解决方案:
- 减小音频块大小(chunk_duration)
- 启用GPU加速
- 使用int8量化
❓ 问题3:多语言识别错误
解决方案:
- 明确指定语言参数:
language="zh" - 使用语言检测功能自动识别
- 检查音频是否包含多种语言
应用场景示例
🎯 场景1:会议实时转录
class MeetingTranscriber:
def __init__(self):
self.model = initialize_model()
self.participants = {}
def transcribe_meeting(self, audio_source, speaker_id=None):
# 实时转录会议内容
segments, _ = self.model.transcribe(audio_source)
for segment in segments:
text = segment.text
timestamp = f"{segment.start:.1f}-{segment.end:.1f}"
if speaker_id:
print(f"[{timestamp}] 发言人{speaker_id}: {text}")
else:
print(f"[{timestamp}] {text}")
🎯 场景2:视频字幕生成
def generate_video_subtitles(video_file, output_srt):
# 提取视频音频
audio_file = extract_audio(video_file)
# 使用faster-whisper-small转录
model = initialize_model()
segments, _ = model.transcribe(audio_file)
# 生成字幕文件
create_srt_file(segments, output_srt)
print(f"✅ 字幕已生成: {output_srt}")
🎯 场景3:语音笔记应用
class VoiceNoteApp:
def __init__(self):
self.model = initialize_model()
self.notes = []
def record_and_transcribe(self, duration=10):
# 录音并实时转录
audio = record_audio(duration)
text = self.model.transcribe(audio)
# 保存笔记
note = {
"timestamp": datetime.now(),
"text": text,
"audio_file": save_audio(audio)
}
self.notes.append(note)
return text
总结
通过本文的完整代码示例,您已经掌握了使用faster-whisper-small实现实时语音转录的核心技术。这个优化的Whisper模型不仅速度快、准确率高,还支持多种语言,是构建语音识别应用的理想选择。
关键优势总结:
- 🚀 极速转录 - 相比原始Whisper快2-4倍
- 🌍 多语言支持 - 支持99种语言识别
- 💾 内存优化 - 支持int8量化,降低内存占用
- 🔧 易于集成 - 简单的API接口,快速上手
下一步学习建议:
- 尝试将转录结果保存到数据库
- 集成到Web应用或移动应用中
- 结合其他AI模型进行语义分析
- 开发实时翻译功能
现在就开始您的实时语音转录项目吧!使用faster-whisper-small,让语音识别变得更加简单高效。💪
提示:记得在实际项目中添加错误处理和日志记录,确保应用的稳定性和可维护性。
更多推荐


所有评论(0)