音转文模型对比FunASR与Faster_whisper
FunASR简介
FunASR是由阿里巴巴达摩院开源的语音识别工具包,提供包括语音识别(ASR)、语音活动检测(VAD)、标点恢复、语言模型、说话人验证、说话人分离及多说话人ASR等多种功能。FunASR工具包支持工业级语音识别模型的训练和微调,旨在帮助研究人员和开发者更高效地进行语音识别模型的研究和生产,推动语音识别技术的发展。FunASR基于提供预训练模型和易于使用的接口,使用户快速部署语音识别服务,满足不同场景的应用需求。2024年10月16日,FunASR新增支持Whisper-large-v3-turbo模型,进一步扩展在语音识别领域的应用能力。
- 语音识别(ASR):将语音信号转换为文本信息。
- 语音活动检测(VAD):识别语音信号中的有效语音部分,过滤掉静音或背景噪音。
- 标点恢复:在语音识别结果中自动添加标点符号,提高文本的可读性。
- 说话人验证:识别并验证说话人的身份。
- 说话人分离:在多人对话中区分不同说话人的声音。
- 多说话人ASR:处理多人同时说话的场景,识别和区分每个人的语音。
FunASR的技术原理
- 自然语言处理(NLP):理解和生成自然语言,实现流畅对话。
- 语音识别和合成:将用户的语音转换为文本,合成虚拟角色的语音输出。
- 语音端点检测(VAD):基于FSMN-VAD模型,准确检测语音的起始和结束,提高语音识别的准确性。
- 标点预测:集成标点预测模型,能在转录文本中自动添加标点符号,使转录结果更加符合阅读习惯,提升文本的可读性。
FunASR的项目地址
- 项目官网:funasr.com
- GitHub仓库:GitHub - modelscope/FunASR: A Fundamental End-to-End Speech Recognition Toolkit and Open Source SOTA Pretrained Models, Supporting Speech Recognition, Voice Activity Detection, Text Post-processing etc.
代码实现
import json
import time
from funasr import AutoModel
# 计时开始
start_time = time.time()
# 初始化模型 - 使用支持热词的新模型
model = AutoModel(# model="iic/speech_paraformer-large-vad-punc-spk_asr_nat-zh-cn",model="iic/speech_seaco_paraformer_large_asr_nat-zh-cn-16k-common-vocab8404-pytorch",vad_model="iic/speech_fsmn_vad_zh-cn-16k-common-pytorch",punc_model="iic/punc_ct-transformer_zh-cn-common-vocab272727-pytorch",spk_model="iic/speech_campplus_sv_zh-cn_16k-common",vad_kwargs={"max_single_segment_time": 1000}
)
# 生成语音识别结果
res = model.generate(input="音频文件.wav",merge_vad=False,
)# 提取所需字段
simplified_result = []
durations = [] # 用于存储每段的时间长度
print('总音频',res[0]['text'])#以下代码可以获取生成时间,需要输出时间的情况。
#for i,segment in enumerate(res):
# segmentText = res[0]['text']
# # print(self.device_clerk,i,"[%.2fs -> %.2fs] %s" % #(segment.start, segment.end, segmentText))
# print(f"{self.device_clerk} {i} [{segment.get('start', 0):.2f}s #-> {segment.get('end', 0):.2f}s] {segmentText}")
Faster_whisper
faster-whisper是基于OpenAI的Whisper模型的高效实现,它利用CTranslate2,一个专为Transformer模型设计的快速推理引擎。这种实现不仅提高了语音识别的速度,还优化了内存使用效率。faster-whisper的核心优势在于其能够在保持原有模型准确度的同时,大幅提升处理速度,这使得它在处理大规模语音数据时更加高效。
具体的调用代码:
from faster_whisper import WhisperModelmodel = WhisperModel(model_path, device="cuda", device_index=[cuda_index], compute_type="float16")segments, info = self.model.transcribe(audio_file, language="zh",vad_filter=True) for i,segment in enumerate(res):segmentText = res[0]['text']print(self.device_clerk,i,"[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segmentText))