|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 7 ]) x7 B$ L( `' @7 B( U
, d# O) t2 J/ Z5 ~* v8 @1 ]8 F
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
" P$ i! Y0 D9 a效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
; A( |- z u+ `$ l----------------------------------------% S, B8 r' M+ F+ m' D; z
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
% i- J7 G6 r% m/ x3 B' e; r在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。3 Z( a: h { m" \
----------------------------------------0 C' A- D$ {/ I% D! P3 A
https://github.com/guillaumekln/faster-whisper
) o" b# R: `# L5 z3 M, V( q4 R2 y6 ~安装如下:. r1 `( C5 B! q! z2 y
1, Windows 10( q/ {5 m6 \- T+ T' x9 S
2, Python 3.10.11 a3 W$ D7 L' \- d4 ^
3, CUDA 12.1
, T6 ^6 }7 C6 Z4, 在python 3 中安装7 N/ C3 c p3 ~+ N3 V6 x. Z
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
7 L/ }% z1 Q3 [* ^这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
/ n( }0 r' l5 z5,pip install -U openai-whisper1 I/ g' G4 y! ?6 m
这是向whisper 致敬,可以不装
( ~7 p7 o3 l$ ]4 D/ A7 I6,pip install faster-whisper
/ q0 T4 ]6 U a6 _3 E0 m5 A----------------------------------------
) i5 l; t+ Z( ~+ Cwhisper 我用的命令行,faster-whisper 我用的是python。: F1 ~6 C( z% K. r2 `. k
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
: N! t+ s7 H% C8 Y. E! |9 l
6 g. w' M: i, c- S# n7 T' A---------------------------------------- L- d$ c! Z2 w# k; l$ q
0 u* B, k* H: e0 _ l
from faster_whisper import WhisperModel
1 i7 ^+ U( A: S2 J$ s
9 d9 K2 j! u# u7 c8 hmodel_size = "small"
1 ~! e+ r( m2 F" l } _9 m1 K6 m5 [( J* e3 I/ b, S
model = WhisperModel(model_size, device="cuda", compute_type="int8")) [/ g' P6 o/ N
& P7 k: X( ?& G2 h: v' [segments, info = model.transcribe(- [% f6 T, \4 b' j/ d
sourceFileName, ! @% F3 j# ]5 l! z
beam_size=5, ' l1 M' \! d5 o
language="en",
* X0 w3 ~- f$ Y: Q; z9 i, k! g task="transcribe", * F7 ], I0 O z$ Y) ?1 P3 R3 D$ P
word_timestamps=True, 9 R, f( n9 ]# o' N N
initial_prompt = "Hello, welcome to my lecture.")9 y9 w g2 S Q
6 O v( Q P2 W8 u4 f
for segment in segments:3 {6 K' d3 d: o" X3 `! b, F
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))7 [* K0 w! v3 V3 F( F- R$ |* H
& J& e# j* V& J; C" L# p for word in segment.words:
# w! H; N' K7 m3 T2 R9 K% B ' @; \5 {8 ] {- f; e. h
----------------------------------------
3 ]* t; C0 ]/ j6 B
5 s. w: c' U4 c8 Y) K! D" F代码说明:
0 {% E" Z- U! n/ b8 h5 `0 e/ u1 T' a, J1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。$ x6 {/ h" \! n3 N+ \' g3 G
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。0 n& k% g+ J8 z6 O/ O
2,segment 本身是很粗糙的,做字幕勉强能用。& ]6 r: l L! Y& T5 d& g$ K7 j' g
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
1 y2 [5 ^ T+ A- w4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
6 T v5 v+ B2 k, n# x比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。+ ?; F9 y6 I9 X1 C
5,model.transcribe 中参数说明:
* @; n5 j& ]1 ^: G( w, V你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
P- O2 y" }) N9 a% W; Y- O其中
1 ~1 i0 ]5 r) {2 [ word_timestamps=True, ' v F" g& p- D6 Y
保证了你能拿到 word,否则是拿不到的
% c, |( ], Q$ S1 v# M, k5 F initial_prompt = "Hello, welcome to my lecture.")
* q6 u" ]# | H( S保证能尽可能准确的断句 punctuation,但是不是决定性的。
) B$ k& u" m# i( L$ [+ ^其他参数可参考源文件:
7 {* @6 m8 X. X8 J9 `3 [https://github.com/guillaumekln/ ... isper/transcribe.py
" B! y- ~; ~7 H% ?- x152 def transcribe() f9 \: C1 W3 E1 q
从源文件你可以看到是支持中文的句号断句的。
) S; g- z: Y) n& S$ }2 j( a1 q2 b
6 M, X1 W7 E$ a/ L! y6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。+ h; q# z" L Z% }& b
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
) r. p# b: w9 ^3 g$ g& N8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
# g/ A: w: e1 h1 e' a
8 M2 j4 _+ G: K$ v( s* P
0 @/ ^ a w+ D7 N/ V$ l$ o. ^9 P, ^
|
评分
-
查看全部评分
|