爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 # b! J4 P/ i$ k; z( I$ M$ h

. y$ @( l+ F0 k, X* E借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。5 u' {; Q# t) m. n! ~0 B0 c
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
% l" d+ u  g+ [2 l7 Y----------------------------------------4 P. ]" |, t# i# ]/ E1 K
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
& v  M7 L" L  u7 H% l在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
4 H2 x$ p* v  d" o0 N----------------------------------------
1 @3 L+ D# B3 k3 z+ }0 _1 M! e8 Mhttps://github.com/guillaumekln/faster-whisper& R0 j! h3 b- D, m0 d
安装如下:
4 G7 C) o+ y7 l0 N" o* [  i' X1, Windows 103 o# p9 V) ]% }. j
2, Python 3.10.117 x$ U& N" v" E. w) l' ~
3, CUDA 12.1
* ]% b; _; n+ o1 l2 I, h6 N+ Z0 E1 ?  ^4, 在python 3 中安装
9 y' q* C5 s8 {2 ?' d5 _: Spip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
: ^* Q/ ^9 ]" z2 B这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。/ d' F8 P& K* G$ L5 n" @
5,pip install -U openai-whisper
) J; {& [9 G( @9 N5 q; {- v2 x这是向whisper 致敬,可以不装
+ K* d; N4 b4 _7 S5 }& W( U6,pip install faster-whisper: s, l: c. o% N/ |* A1 y4 U/ A1 @
----------------------------------------: R$ P: f5 l7 p( `) a
whisper 我用的命令行,faster-whisper 我用的是python。
. w# Q7 H- P- P2 ~: d下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:9 D( ^) @) D1 O' V( Q, _6 k- q
, b4 v" y4 ^1 T' J4 Q: t6 G7 |
----------------------------------------
/ v  C- K" d- p, L  }4 _' C; n
+ `& c% ?0 q$ w: x3 c2 I& ?' Y5 Nfrom faster_whisper import WhisperModel
, v4 i( j" J$ _/ ~. R
* Y2 j, W1 G5 C/ ~8 D8 Y% N  i; Vmodel_size = "small"& _9 Q; Z( B, s/ u. p6 I* t
) O; l0 ]- K+ |5 C; m4 V" n/ J' ?1 y
model = WhisperModel(model_size, device="cuda", compute_type="int8")
1 X7 f; M* z' h& p) f3 S0 ]( ?4 u5 v7 w9 r/ A, L
segments, info = model.transcribe(& E1 G/ J, n% p# _/ G1 t4 `
    sourceFileName,
" p3 A/ v5 v; b6 C    beam_size=5,
% v/ P  `. c; s) z" M; e  N; |1 x    language="en", ' t. \# u+ ~9 S( @& `+ d
    task="transcribe",
" J1 q. f( o% g- s& c  c1 B  M    word_timestamps=True,
$ k% G: I# H/ i9 Y2 U, Y    initial_prompt = "Hello, welcome to my lecture.")
2 o6 A0 k7 t3 G" C# c  a" u3 H0 C  z! X" G- [6 e2 E* X* Z9 T
for segment in segments:
5 k( \4 x3 V; |/ V% q5 b& j2 s    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))3 s/ P- X' t3 I' X. n% D
$ M9 T. ?. `3 R
        for word in segment.words:
# M2 ?8 J; f# R) \! U                ( {( V# ?& L- B! T5 u5 k
----------------------------------------, b! j# g0 Q2 V+ z+ w9 u* d7 D

/ \! Q+ C+ ]% B; Y; b/ P代码说明:
+ p6 C1 P2 x5 T2 ^! K1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
, ~3 i! F' g: j但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。9 n% v, g6 @; y( R6 `1 j: _
2,segment 本身是很粗糙的,做字幕勉强能用。' k- I" N& Z/ V* P& E( c; k
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。+ n) N3 Q# q9 _9 C* k& u) k- D3 O
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
4 I0 K1 b- h0 t比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
6 ?2 ]1 X5 g( l  W2 c/ E5,model.transcribe 中参数说明:
  }8 |4 K3 A5 @7 B& O7 J0 T) o你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数* W% t0 \! P0 c+ ~8 _
其中9 n  L7 _5 o& }+ ~2 y. z
    word_timestamps=True,
1 X( M" `, c- r- |- D/ }保证了你能拿到 word,否则是拿不到的+ i3 N1 U" u+ u9 F" w
    initial_prompt = "Hello, welcome to my lecture.")
* M' w$ I2 p4 r) ^1 \5 v: X: [保证能尽可能准确的断句 punctuation,但是不是决定性的。
/ f8 Y" n: E4 `( {: A. ]( ~其他参数可参考源文件:. x/ z4 V0 F" y4 h; b2 I6 u
https://github.com/guillaumekln/ ... isper/transcribe.py0 n  K! r0 y7 D
152 def transcribe(
) {. d/ |: C' ~) x从源文件你可以看到是支持中文的句号断句的。% {7 Q& m$ c1 \4 N& F5 I. X1 i
' }6 [7 n. B4 ^
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。5 C0 D' `' A8 U
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
% @( H% V% S+ P) a8 `* s8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。) K0 T9 [$ w+ `" X. x3 N
' e* x+ R% S% d7 Y  G( I

2 O. o5 y! @/ A3 f7 `" y$ s; E8 f' [; h3 j. X+ o7 Q

作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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