爱吱声

标题: faster-whisper 更快的语音到文字的识别 ASR [打印本页]

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 6 [7 f: _4 ^3 z1 b, P4 _
0 k) t! b5 ]% N- H* X. K3 M% I  z5 f& k
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。6 x' z2 M. A( S7 z
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。0 ]1 Y' N: }: V
----------------------------------------, o9 t- k9 a+ f' s0 K' B/ e5 a
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
: ~+ d4 D  U9 A" _  J在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
- C) y+ S* e2 ]9 p* ?1 J7 J3 q----------------------------------------% \2 q1 _6 t# Z& Q8 M- }
https://github.com/guillaumekln/faster-whisper
4 r* Q* v  L8 Y& t& ~, ]* |安装如下:) \1 O  ]+ x, m+ n
1, Windows 10
0 V0 U4 _! s8 I; `  C* S- Y" C2, Python 3.10.11
) h% B9 m( |- M( Z& h  Z5 t3, CUDA 12.1
+ s  Y$ ?" s6 r: K4, 在python 3 中安装
4 p# b2 t3 N) @pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1173 N; U* }1 \( m+ y5 h
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
# p: G* t2 Z6 M* d2 t- q. k5,pip install -U openai-whisper& L& z; p0 J9 h# Y, b
这是向whisper 致敬,可以不装( L2 O" _6 b/ b: D6 r1 p- V$ n7 n
6,pip install faster-whisper7 t, c8 x+ I$ J# h6 K9 `
----------------------------------------
7 X, l0 O8 U* Q6 r& Lwhisper 我用的命令行,faster-whisper 我用的是python。. e1 W  |$ [/ t! G6 r7 |$ y0 @
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
; p3 ^& s/ g: [* f" N
2 H7 H, \4 e* X9 z) _/ m/ t7 U----------------------------------------
3 S; U- e* T" @
0 _' s, m! z: }: jfrom faster_whisper import WhisperModel
" z$ S: `% e9 d( j+ G3 k6 M6 P7 p& E2 r6 y  t
model_size = "small"2 B9 E; \+ `( E7 v& n0 |
" _; H4 x% N+ y9 F( A  e
model = WhisperModel(model_size, device="cuda", compute_type="int8")
5 j, Q+ j/ T  N9 ?" k) k3 v& j" ?( c$ e9 t  k
segments, info = model.transcribe(
! M$ d: B) @8 W3 m' g    sourceFileName, 1 H1 F& Q0 w+ h' n2 [7 V
    beam_size=5,
' B+ N( }" R  \! V    language="en",
, p7 ?2 n  [2 B/ h4 z- y    task="transcribe", / [$ Y- R/ C* |8 \+ g
    word_timestamps=True,
3 _! g* |3 y0 ?  Q    initial_prompt = "Hello, welcome to my lecture.")/ o2 S  ?4 N7 X# U3 j/ D4 ~9 l

) K$ R! ]+ ]& m+ g4 |for segment in segments:
$ b) f7 H6 m: `# U6 A    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
: O% r5 J  }% T3 {- y' L* k7 O# _, [, y8 i2 b& z2 ~9 T/ J4 n
        for word in segment.words:
5 U1 Z" f" w) _9 G               
7 g* i/ a) s+ k2 b; u% W6 ?----------------------------------------
2 t9 _8 e9 A7 {/ X. i, O4 y7 T# C' g$ F( o, C+ [8 e0 N/ Q
代码说明:5 u) k5 r6 \+ q% g% U9 j- s3 J0 k
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
9 {; K" O. T9 e5 U  `/ T但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。4 m/ c2 _) p5 h/ S& u7 J0 x5 Q' R
2,segment 本身是很粗糙的,做字幕勉强能用。1 Y6 I6 |. Y# s, s8 j) x
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
' r6 p2 |2 k  W+ A4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
# T$ R1 w! e/ b' U% s' Q比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
4 o' Y2 {- Z, Q! f5 A8 h& H- i9 {5,model.transcribe 中参数说明:
; s) k$ S; D1 u" s$ K3 d/ t" H你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
) ^+ w% U% Y5 ]6 d# d) J其中
3 s; |- j* X" U1 w    word_timestamps=True,
* Q+ F9 S4 P. y, A9 c3 j9 F' H保证了你能拿到 word,否则是拿不到的
1 j% U; F( \) ?% @- }    initial_prompt = "Hello, welcome to my lecture.")2 v7 m/ C: z! f1 k
保证能尽可能准确的断句 punctuation,但是不是决定性的。
) R  M$ S$ v  d9 E1 E; Y4 N其他参数可参考源文件:8 F7 \8 q! R; t  j( o
https://github.com/guillaumekln/ ... isper/transcribe.py7 b/ U! J- [4 X8 P* y& g/ ?
152 def transcribe(
& a1 T( I9 C& e- u% A5 |从源文件你可以看到是支持中文的句号断句的。
3 ^4 G: x" _- ~+ o8 T; U3 q
5 o3 f* \' h; J" {6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
8 m$ c- k6 w+ m5 c7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
7 k% l- O3 z. z! c( u) E) W, \8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。8 h6 E0 |: ]; S- h6 {, v
# I1 W8 D& X5 \9 c

1 G7 H; v( q8 F. I+ [" K* W
( u, o+ v( U: @9 I: w5 e
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




欢迎光临 爱吱声 (http://aswetalk.net/bbs/) Powered by Discuz! X3.2