如何基于大模型实现一个语音转文字应用
实现语音转文字功能:从模型加载到实时转录的完整指南
在这篇文章中,我将分享一个基于Whisper模型的语音转文字项目,展示如何使用faster-whisper
和Gradio
库构建一个实时转录和处理音频文件的应用。这个项目同时支持多语言的语音转录,甚至可以通过AI对转录结果进行润色。
该项目的主要功能包括
1.实时音频转录:通过麦克风录音并进行实时的语音识别。
2.音频文件上传:支持上传音频文件并进行转录。
3.语言支持:支持多种语言的语音转录。
4.字幕生成:支持生成字幕格式的转录输出。
5.AI润色:调用AI接口对转录后的文本进行错别字修正和句子润色。
下面我将详细介绍项目的各个功能模块及其实现方式。
1. 环境与依赖安装
首先,确保你的环境中安装了以下依赖:
faster-whisper
: 语音识别库,提供高效的Whisper模型推理。
gradio
: 前端界面库,用于构建Web应用。
zhconv
: 中文简繁转换工具。
requests
、av
等。
安装方法如下:
pip install faster-whisper gradio zhconv av requests
2. 检测CUDA支持
为了提升转录性能,我们首先通过nvidia-smi
命令检查CUDA是否可用,如果可用则加载GPU模式的Whisper模型:
def check_cuda_available():
try:
result = subprocess.run(['nvidia-smi'], capture_output=True, text=True)
return result.returncode == 0
except FileNotFoundError:
return False
cuda_available = check_cuda_available()
path = "./models/faster-whisper-large-v2"
model = WhisperModel(model_size_or_path=path, device="cuda", compute_type="float16") if cuda_available else WhisperModel(model_size_or_path=path, device="cpu", compute_type="int8"
3. 录音和实时转录
我们使用Gradio的Audio
组件来处理实时录音,并通过faster-whisper
进行语音识别。以下是录音和转录的实现流程:
- 录音数据被写入队列。
- 使用VAD(语音活动检测)进行语音分段。
- 将音频帧转换为文本。
实时录音与转录的关键代码如下:
def start_recording():
global recording, total_frames, text_arr
recording = True
total_frames = np.array([], dtype=np.float32)
text_arr = []
threading.Thread(target=transcribe_process, daemon=True).start()
def transcribe_process():
global recording
while recording:
time.sleep(0.5)
if not data_queue.empty():
datas = [data_queue.get() for _ in range(data_queue.qsize())]
audio_data = resample_audio(np.concatenate(datas), 16000)
audio_data = audio_data.astype(np.float32) / 32768.0
total_frames = np.concatenate((total_frames, audio_data))
speech_chunks = get_speech_timestamps(total_frames, vad_parameters)
if speech_chunks:
transcribe_frames = collect_chunks(total_frames, [speech_chunks[0]])
result = transcribe(transcribe_frames)
if text_arr: text_arr.pop()
text_arr.append(result)
4. 多语言与字幕格式支持
该应用支持多种语言的语音识别,你可以在界面中选择转录的语言。为了方便用户理解每个语言选项,我们添加了语言标签:
python
复制代码
language_arr = ["zh", "en", "fr", "es"] # 示例语言列表
language_label = ["中文", "英语", "法语", "西班牙语"] # 对应的语言标签
此外,用户可以选择生成字幕格式的转录结果:
python
复制代码
output_type_checkbox = gr.Checkbox(label="字幕格式", value=is_subtitles, interactive=True)
5. AI润色功能
为了提升语音识别的文本质量,我们集成了一个AI润色接口。用户可以通过点击按钮,将转录文本发送到AI模型,进行错别字修正和格式优化:
python
复制代码
def ai_summary(text):
headers = {'Content-Type': 'application/json', 'Authorization': 'Bearer <token>'}
data = {
"messages": [
{"role": "system", "content": sys_prompt},
{"role": "user", "content": text}
],
"model": "gpt-4o-mini"
}
response = requests.post(ai_srvice, headers=headers, json=data)
ai_text = ''.join([json.loads(line)["choices"][0]["delta"].get("content", '') for line in response.iter_lines() if line])
return ai_text
6. 代码中其他关键模块
- 音频重采样:将录制的音频数据从48kHz重采样到16kHz,以便更好地与语音识别模型兼容。
- 音频文件转录:用户可以上传音频文件,并通过
faster-whisper
对文件内容进行转录。
7. 界面与交互
我们使用Gradio构建了一个简洁的用户界面,支持实时转录、文件上传、重新转录以及AI润色功能。主要交互如下:
python
复制代码
with gr.Blocks() as iface:
gr.Markdown("<h4>GitHub仓库地址(欢迎star、贡献代码):<a href='https://github.com/caiwuu/Voice2Text'>Voice2Text</a>;模型仓库:<a href='https://huggingface.co/Systran'>https://huggingface.co/Systran</a></h4>")
gr.Markdown(f"<h4>{md_notice}</h4>")
with gr.Row():
input_record = gr.Audio(label="实时转录", sources=["microphone"], streaming=True)
upload_file = gr.File(label="上传音频或者视频")
with gr.Column():
beam_size_slider = gr.Slider(2, 10, step=1.0, value=beam_size, info="增加可提高识别率,也会牺牲性能", label="beam_size", interactive=True)
language_label_selector = gr.Dropdown(language_label, type="index", value=language_value, label="输出语言", interactive=True)
output_type_checkbox = gr.Checkbox(label="字幕格式", value=is_subtitles, interactive=True, info="实时转录无法使字幕格式")
beam_size_slider.change(settings_change, inputs=[beam_size_slider, language_label_selector, output_type_checkbox])
language_label_selector.change(settings_change, inputs=[beam_size_slider, language_label_selector, output_type_checkbox])
output_type_checkbox.change(settings_change, inputs=[beam_size_slider, language_label_selector, output_type_checkbox])
with gr.Row():
with gr.Column():
play_audio = gr.Audio(label="提取音频", type="filepath")
with gr.Row():
regen = gr.Button("重新转录", variant="primary")
output_text = gr.Textbox(label="转录结果", interactive=True)
summary_button = gr.Button("AI润色", variant="primary")
prompt_text = gr.Textbox(label="提示词", interactive=True, value=sys_prompt)
summary_output = gr.Textbox(label="AI 润色结果", interactive=True)
summary_button.click(ai_summary, inputs=output_text, outputs=summary_output)
prompt_text.change(sys_prompt_change, inputs=[prompt_text])
regen.click(re_transcribe, outputs=output_text)
upload_file.upload(file_uploaded, inputs=upload_file, outputs=[play_audio, output_text])
input_record.change(input_audio_change, inputs=input_record)
input_record.start_recording(start_recording, outputs=output_text)
input_record.stop_recording(stop_recording, outputs=play_audio)
iface.launch()
8. 总结
本项目实现了一个完整的语音转文字系统,利用了Whisper模型的强大能力并通过Gradio提供了易用的界面。我们还结合了AI进行润色和多语言支持,极大提升了语音识别的效果和易用性。
如何学习AI大模型?
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓