|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
6 G, n& @# [. x! B9 e2 ?3 t: u, \) J( {
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。1 b2 C/ a# J! D
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
& F) v, Z5 d5 D( t7 a6 {# U% U+ \----------------------------------------
# h1 T# T8 w. l/ F1 P) H# S显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
# U4 A; i/ k3 H8 l! [4 _9 N. }3 L在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
% S- ~- s b$ w----------------------------------------% {9 Z$ {+ j ]9 `
https://github.com/guillaumekln/faster-whisper
0 v8 W* N7 f7 }) o. \安装如下:- ~! H8 D) e! Z! \6 t
1, Windows 10
. r/ J, ?- U- a( Z2 s) O2, Python 3.10.11
9 K& ]1 N& W" `* ^& z3, CUDA 12.1
1 U2 c. O/ r/ ?3 b9 y4, 在python 3 中安装) k4 @ M3 D3 H9 _! C
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
, Q' R: l2 {0 ]0 y" n这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。, h& ?( s: u) M9 _% f0 M! }
5,pip install -U openai-whisper
7 C, L" ^% V0 R7 B6 |2 [这是向whisper 致敬,可以不装
3 ?1 M; W( f- M6,pip install faster-whisper
1 L; G: T1 e8 H! \: _----------------------------------------$ E7 W/ Z2 \+ C
whisper 我用的命令行,faster-whisper 我用的是python。
/ p, }6 q8 b1 Y+ v下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:$ Y1 f. }0 i0 h6 K' f& ]3 D/ @
! k0 R' P: P! C
----------------------------------------, @3 r2 I8 b; t- V
+ T" [0 a! q% g" sfrom faster_whisper import WhisperModel
& w- x0 H% B' ^" X. p$ C+ E8 v7 n p6 g: o5 |7 x
model_size = "small"
# ^' K9 @' S* i6 @! p, D- C9 G S: K5 ]' @+ N+ L/ C
model = WhisperModel(model_size, device="cuda", compute_type="int8")3 a* e' B( y- c6 E# \) ?! h
- D5 f; }! O' [* v
segments, info = model.transcribe(
* {* q! s* R* }5 _5 o! y6 Y% I' C4 b sourceFileName,
! e2 `* I- P6 f! [ beam_size=5, " b' a/ H6 M( D5 b' ?3 t4 `
language="en", 3 c' F- F3 p" d6 k
task="transcribe", . h1 ^$ j5 n# {) z1 \% B
word_timestamps=True, ' W- P' E5 v: v9 u. K' }0 v
initial_prompt = "Hello, welcome to my lecture.")
) u3 R, j* u+ D5 }- o( D7 f5 l [7 ^3 V) `& _# W8 ~
for segment in segments:0 p. _* M4 n2 L9 Z/ u, |& I# h ?& V8 K
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
4 i& Q9 i: e$ l2 V( M; ]7 q
1 X9 X: s1 C/ A6 k for word in segment.words:
/ g5 }) x, m' H- X" N 1 Z0 a& K9 Y& o, s
----------------------------------------
8 n1 n* x8 q5 T$ T- O9 p2 z6 C' a6 I* b2 W0 f
代码说明:% p3 W. t7 q# [" U ^; Z3 G" N% [. W
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
. g" d% N: K! v8 g+ n但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
* t3 F5 a( B8 l, Q# p, S2,segment 本身是很粗糙的,做字幕勉强能用。/ i; u" d6 q7 O; Y
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。1 Q$ @4 [7 c2 J* d' h/ l$ Z
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
1 S7 K$ |* `( A6 N3 K& z Q& P% v比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
; v. Z$ L/ ^! F" \' \. v5,model.transcribe 中参数说明:
0 j# { ]7 {6 J; |. e你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
/ A! ], o" _0 q' k: _其中
7 \1 i& ]7 m0 A0 _0 G word_timestamps=True,
7 _4 T6 e* U% L, h6 n* F" G, B保证了你能拿到 word,否则是拿不到的
. o+ B& ?! T; b H# A: Q) I initial_prompt = "Hello, welcome to my lecture.") O6 k! _/ @& I/ x7 I
保证能尽可能准确的断句 punctuation,但是不是决定性的。! b Q$ v0 F+ m% w D$ E5 I
其他参数可参考源文件:
/ q" B) E9 z8 ~, v) _; m6 qhttps://github.com/guillaumekln/ ... isper/transcribe.py
. S& A9 `$ R) D152 def transcribe(
2 U. Q7 v' V+ h. t) g& G从源文件你可以看到是支持中文的句号断句的。
% m7 `) p0 `- \) ^) q
; @& f& D' M6 A& d/ c! f( ~5 Q6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。* z( [8 b. _* j. N; O9 Q( ]2 t
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。 [3 q) r* I/ M: o4 j8 q
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。' |& n" P5 p% I
* K; l, m; [* {+ f6 s- g 1 B) n- g& d& t+ o) E8 x @& ^
* d8 q0 i4 U1 s/ u/ K
|
评分
-
查看全部评分
|