赞
踩
作为一个魔武双修的python程序员,面对产品小姐姐提出的需求。我只能迎难而上。
目前开源的音频转文字都有哪些?效果如何?速度怎么样?带着这一连串的问题,我在github的海洋里畅游良久。接下来我把我的发现都记录如下。
1. paddlespeech
其实我在去年的时候发现过这个东西,当时测试过,速度和正确率忘记了。主要印象是搭建起来挺费劲,如官方写的那样很全面,我废了大半天迷失在了csdn的报错解决文章中。
稍微记录下我的搭建过程:等后续我顿悟之后我再补上。
- 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")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。