前言
作为一个魔武双修的python程序员,面对产品小姐姐提出的需求。我只能迎难而上。
目前开源的音频转文字都有哪些?效果如何?速度怎么样?带着这一连串的问题,我在github的海洋里畅游良久。接下来我把我的发现都记录如下。
1. paddlespeech
其实我在去年的时候发现过这个东西,当时测试过,速度和正确率忘记了。主要印象是搭建起来挺费劲,如官方写的那样很全面,我废了大半天迷失在了csdn的报错解决文章中。
PaddleSpeech: Easy-to-use Speech Toolkit including SOTA ASR pipeline, influential TTS with text frontend and End-to-End Speech Simultaneous Translation. (gitee.com)https://gitee.com/paddlepaddle/PaddleSpeech
稍微记录下我的搭建过程:等后续我顿悟之后我再补上。
pip install paddlespeech
pip install paddlepaddle
后续好像是要降低numpy版本,降版本报错了。算了,我放弃了。希望国产开源继续加油。给他们点点star。如果有知道怎么解决的老哥,欢迎留言,我再折腾。
2. faster-whisper
faster-whisper 是使用 CTranslate2 对 OpenAI 的 Whisper 模型的重新实现,CTranslate2 是 Transformer 模型的快速推理引擎。这种实现比 openai/whisper 快 4 倍,在相同的精度下,使用更少的内存。在 CPU 和 GPU 上通过 8 位量化可以进一步提高效率。看介绍很强,下边是项目链接:SYSTRAN/faster-whisper:使用 CTranslate2 实现更快的 Whisper 转录 (github.com)
然后我发现一位老哥开源的项目,利用flask实现了带界面的识别,很强大。关键是,下载了对应权重文件后,项目跑的很丝滑。也没报错。项目地址:jianchang512/stt: Voice Recognition to Text Tool / 一个离线运行的本地语音识别转文字服务,输出json、srt字幕带时间戳、纯文字格式 (github.com)
3.关于GPU的使用
我这次的记录目的就是如何使用GPU折腾faster-whisper,这里边还是有几个注意事项的。
首先我的电脑cuda是11.8 ,我安装了torch gpu版本后,第一次出现的问题是
OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized. 指出的问题是,OpenMP 运行时 libiomp5md.dll 被多次初始化
代码里加上了。如果是flask项目加到start.py最上边。
import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'
第二次报错是Error: Library cublas64_12.dll is not found or cannot be loaded。经过一番搜索才知道是最新的faster-whisper只支持cuda12,如果想用11只能降低版本。
pip install faster-whisper==0.10.1
好了项目完美运行。cuda加成下,识别速度比cpu提升10有余。
下边是我的测试代码:
import os
import time
# cuda 11.8 对应 faster-whisper==0.10.1
# 最新版的faster-whisper只支持cuda 12
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'
from faster_whisper import WhisperModel
model_size = "large-v3"
path = r"xxxxx\pt_model\models--Systran--faster-whisper-large-v3\snapshots\edaa852ec7e145841d8ffdb056a99866b5f0a478"
# Run on GPU with FP16
model = WhisperModel(model_size_or_path=path, device="cuda", local_files_only=True)
# or run on GPU with INT8
# model = WhisperModel(model_size, device="cuda", compute_type="int8_float16")
# or run on CPU with INT8
# model = WhisperModel(model_size, device="cpu", compute_type="int8")
start = time.time()
segments, info = model.transcribe(r"xxxxx\record.mp3",
beam_size=5, language="zh",
vad_filter=True,
vad_parameters=dict(min_silence_duration_ms=1000))
print("Detected language '%s' with probability %f" % (info.language, info.language_probability))
for segment in segments:
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
print(time.time()-start,"use time")
总结
**文章总结**作为一名魔武双修的Python程序员,面对产品需求,作者探索了开源音频转文字工具的效能与速度。以下是文章的详细总结:
**前言**
- **任务背景**:作者受命研究开源音频转文字工具,评估其效果和速度。
- **动机与问题**:探索并解决开源工具搭建难、使用不便等问题。
**主要发现**
1. **PaddleSpeech**
- **描述**:一个功能全面的语音识别工具包,包含自动语音识别(ASR)和端到端翻译等能力。
- **体验**:作者去年尝试搭建,但过程复杂且易报错,最终放弃。建议继续加油并提供技术支持。
2. **faster-whisper**
- **描述**:使用CTranslate2实现的OpenAI Whisper模型,比原版快4倍,且内存使用更少。支持8位量化进一步提升效率。
- **使用体验**:
- **搭建**:通过flask实现的带界面识别工具,易于部署,无报错。
- **效率测试**:作者通过GPU优化,实现识别速度在CUDA加成下比之前提升10倍以上。
- **注意事项**:
- 针对CUDA版本不兼容问题,作者通过安装旧版faster-whisper解决了libiomp5md.dll初始化问题和缺少cublas64_12.dll的问题。
- 为flask项目添加`KMP_DUPLICATE_LIB_OK`环境变量解决OpenMP运行时问题。
**GPU使用指导**
- **环境配置**:详细记录了在特定CUDA版本下如何配置faster-whisper及解决相关的兼容问题。
- **代码示例**:提供了使用GPU加速的faster-whisper的Python测试代码,展示如何在转写音频时设置语言、波束搜索大小等参数,并监控转写时间。
**总评**
- **推荐工具**:faster-whisper在易用性和效率上表现优异,尤其是通过GPU优化后显著提升识别速度。
- **未来展望**:鼓励更多开发者提供反馈和贡献,优化现有开源工具的使用体验和性能。
通过这篇文章,作者不仅分享了个人使用开源音频转文字工具的经验,还提供了详细的教程与解决方案,使得广大开发者能够更好地利用这些工具来满足产品需求。