爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
# @# o4 Q0 M# V" [' g* d
8 n5 G9 F3 t, t5 @+ @1 {
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
% `4 X5 b2 A `5 F: \
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
- F! `* _1 p8 k; q, A$ G0 _
----------------------------------------
2 y$ k4 G4 o8 \) U7 ~' @0 D
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
3 p$ o/ q6 T7 Z* x
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
- @9 R1 B8 d. J
----------------------------------------
. [: p6 o+ R2 W: ?# B8 M7 I
https://github.com/guillaumekln/faster-whisper
- w$ N* o# T/ M
安装如下:
6 X+ D* }: t* g5 N- x1 N; D a! X' h
1, Windows 10
- F7 T+ u w# y; n
2, Python 3.10.11
, Y/ Z- K# {: b9 W1 D6 o, ~. q/ M
3, CUDA 12.1
9 m9 t% o3 B1 V$ H7 i
4, 在python 3 中安装
: o: E$ `7 ^. m$ V3 @
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
& L5 u! C, h% x
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
. x V4 L* }: B W
5,pip install -U openai-whisper
# _, ]) R+ N9 C- o) T& C8 ?3 g" _5 X
这是向whisper 致敬,可以不装
. C( L0 W# j B! u
6,pip install faster-whisper
. W1 x8 j- I% {6 u7 T$ @& g% O
----------------------------------------
/ d9 o, l' [% l1 x
whisper 我用的命令行,faster-whisper 我用的是python。
' x0 u5 ^3 u, T7 T1 n
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
o5 {9 \5 f. L) v0 B2 i( `) {; E
- U0 ~2 v% ?0 g* I. S
----------------------------------------
% a# U: \+ c6 H$ s# o$ s
2 V6 d3 X/ h: M$ i
from faster_whisper import WhisperModel
& W, {$ x2 T4 {+ g6 m
3 G- V% B4 ?9 Y/ \% a- Z
model_size = "small"
. I M6 T( h5 |$ u$ {
5 f& v0 E, n& [
model = WhisperModel(model_size, device="cuda", compute_type="int8")
; O9 O5 a: K; z$ w" I, T. k! d
( Q* p' B% c1 B0 I( t
segments, info = model.transcribe(
/ c; m3 T: j0 O. e
sourceFileName,
' t8 H# b" R) \- `1 V
beam_size=5,
* e! P% K0 @7 ~) }: i1 k: m, C
language="en",
1 _% |& |1 B2 d$ k4 Q! c0 A
task="transcribe",
% c9 Y. `2 D8 @
word_timestamps=True,
- T9 b; p/ k; a( ?! b1 m; \
initial_prompt = "Hello, welcome to my lecture.")
2 V/ d- P. B; D v. _
8 b3 `0 D- [3 ~* Y8 b
for segment in segments:
4 G* e: q+ h% ?! c0 |1 o) m) r$ h/ A0 X
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
" D2 B0 I% H" b! G! L
% S- O' ~$ d; D, L
for word in segment.words:
# }1 R! O5 A. i! X+ `* w
. y* C; n; u/ a* y; D6 o* F
----------------------------------------
9 M6 i& Y! _& O$ o! ^% B4 o
% O0 p5 ]5 M% F0 w
代码说明:
; K |- k. T4 _ E1 o4 f
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
5 l& f+ l4 |/ O# ^: m0 r
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
9 a* ]$ Z; c' ^- Q2 K9 J y
2,segment 本身是很粗糙的,做字幕勉强能用。
/ C6 J: H5 }! N* V1 T9 O
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
' Z: N2 x0 v) n$ I) D& L0 t
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
; V, U L& [* o& u( \4 u& [
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
% }* R! A" N! Z5 s
5,model.transcribe 中参数说明:
3 s" E; l3 C2 l' |8 W9 E
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
/ e, u. G% [) X/ L
其中
o6 |" r1 \- n# z; Y
word_timestamps=True,
9 D/ _" `6 _ M: L2 l
保证了你能拿到 word,否则是拿不到的
- P4 }/ f0 ^3 i; J2 w
initial_prompt = "Hello, welcome to my lecture.")
: H& M# V K, t0 l) W
保证能尽可能准确的断句 punctuation,但是不是决定性的。
/ a& c* R$ U& L7 |: N
其他参数可参考源文件:
) x; n% w+ A1 L) v* M" I, u; \' b' Z
https://github.com/guillaumekln/ ... isper/transcribe.py
" r: a$ X( _: @! }
152 def transcribe(
" D& o$ S2 t) `# d. s& \( T" H
从源文件你可以看到是支持中文的句号断句的。
# Z, N! p/ Z8 K- G+ A( [4 N2 b
4 n5 v4 b- k$ t U g- M2 g& m
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
7 \$ D L* l$ G, u7 P! a
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
. {6 U4 V( ?8 L3 t$ l& _8 J
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
# n! q+ `* ~3 V! U, v3 t- V
" Y: Q3 H1 s$ X; p; H% b% W- M0 G
& K2 v; i- P0 i! c+ c' t6 u3 G A
# g, O/ R6 k- [/ s' L5 a' V; J
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2