|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 " E! ^+ {: u; f2 h9 O
7 o# w" T3 [: e! n2 ]8 c1 I
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。# o, E( u' ^) Q
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。' }) R1 O! g. s3 `1 k( u) m9 X
----------------------------------------5 Z; j' T7 Z3 c* y+ a% m& b6 `5 U
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。 [; a0 w$ _0 ~6 o" i
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。, \: S. `. `/ l* H/ P. v& M
----------------------------------------* x1 L& K% Y) Y3 U
https://github.com/guillaumekln/faster-whisper9 ^: l8 ?# c+ C, X0 w" f1 d7 A2 h
安装如下:
! R' m/ E1 K2 A1 Z% M- x% U1, Windows 10' h2 Y3 ?# }$ Y# C6 A( h2 Z
2, Python 3.10.11
1 B% Y7 E* v. \$ F: I3 |3, CUDA 12.1
1 f7 M2 o" ?1 r9 C9 D4, 在python 3 中安装
. L( K0 s; X4 `+ c6 xpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1172 ]% i& E% l+ f& o. C1 Z: ]0 m5 \
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。/ H7 _3 }; k' Y) h3 d* c
5,pip install -U openai-whisper# ^1 a3 d$ V0 `
这是向whisper 致敬,可以不装
6 U/ B1 W9 Z1 _7 @6 `6,pip install faster-whisper( o$ V1 H' d; i! O' Y, i x% l! d. g- o! y
----------------------------------------
5 \. c. m f- j- D/ t+ ~whisper 我用的命令行,faster-whisper 我用的是python。
) Y# p2 z5 P4 ~& o! y) r$ v8 y下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:) P7 e* c: f: A5 d
. y4 K2 b( t0 {/ X+ ]" y
----------------------------------------
6 A0 ~& |7 g5 F' t* i
) l H" i5 U2 Dfrom faster_whisper import WhisperModel! T0 P& O. p+ Q
# T+ |5 F5 q6 C( {
model_size = "small"
; K" x7 y, U8 `. f: {3 w) P$ v4 n( b( X
model = WhisperModel(model_size, device="cuda", compute_type="int8")
8 O& J \" Q* Q1 J* }- _2 s' q( k9 W6 r$ ]# A2 w
segments, info = model.transcribe(
" h5 D* q0 w% |# N0 M$ A sourceFileName, ! L& G4 C" e, L' Q0 y* m
beam_size=5,
* q! E1 H. h* Y* x- `+ }5 J language="en",
0 Q7 B' n5 I' b task="transcribe", ( U! [) Y# E) q. q2 I5 U! x
word_timestamps=True,
' k+ r0 }. Q/ _7 `6 G initial_prompt = "Hello, welcome to my lecture.")/ O6 k& B6 W. z% V
# @2 x# l2 E; _: @: e
for segment in segments:$ }5 z! \7 @, P9 v0 _
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))* o% e. Y+ k$ G4 i, x K2 @
3 c" r% k2 V* W" P/ @1 r. m
for word in segment.words:
/ u2 m- A6 Z2 P. c
2 R0 \; p w9 S8 u# U! U6 x----------------------------------------
_! O; z" `( b, T' k4 p4 a* Z) p; R& J. f- d
代码说明:
4 m4 I; m- \# _: _0 I1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。0 q, q* c3 h: H% V! S' [9 S$ f
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。- j2 \% X, b \1 c) X
2,segment 本身是很粗糙的,做字幕勉强能用。 t; t! o8 r) ^6 R' v0 t
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
3 Z' w/ Y. W0 I, K( R# A8 X4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中/ B. r- t7 B9 F. l7 \
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。% {; V/ a& G. O" c+ C$ U7 j1 B
5,model.transcribe 中参数说明:0 w8 ^! l, y. l& w5 Y# K7 a2 N
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数7 n' ~' T+ L4 f m; O
其中& |! L( f0 q/ D5 f' D$ W
word_timestamps=True,
& X1 p% [& S/ |; ]保证了你能拿到 word,否则是拿不到的% o) {$ |3 g4 C* R& M% f- i
initial_prompt = "Hello, welcome to my lecture.")
1 x# x8 A8 G/ k* x9 a: y+ b: ?保证能尽可能准确的断句 punctuation,但是不是决定性的。
' I$ H8 _* r/ s, w3 I. R( Y其他参数可参考源文件:
. c3 c0 t# z, T1 Vhttps://github.com/guillaumekln/ ... isper/transcribe.py
% `! O3 {7 }$ C" m0 b152 def transcribe(
1 ^2 A9 \ R% s! M6 W/ _6 H从源文件你可以看到是支持中文的句号断句的。+ [! M3 ^% ^$ @( X/ P' o0 R
: ~8 H8 ]. I" Q/ W# h% e X( U9 A
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
9 } Z' V5 w" m8 h7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。5 n1 S' S/ ~3 l
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。% v( T; g' J: {) ~
. C1 r9 w/ f7 i7 r2 G: {9 |" O 6 p# i, M; r1 p1 e+ `
5 s+ `! a% F$ r& h* b
|
评分
-
查看全部评分
|