|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
0 j5 s6 o( s- I/ k* i) [
+ T8 t* Z1 F" z5 n g借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
. x; V0 ^6 y9 ]; A) z6 d A3 d效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。 ^+ T' P* u& J! d2 N n+ N
----------------------------------------
1 G2 g% T- ?& L显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。) |/ h0 }3 _+ j. d/ W6 W" ^8 b
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
: H& l% i' i' D----------------------------------------
( x- T& Q. C3 n# F2 Z& whttps://github.com/guillaumekln/faster-whisper
* B) F M2 e' Q7 W3 d1 y: j8 g安装如下:
9 u$ h, `/ t' x, J; w' _1, Windows 10
, l/ v e2 p# r5 D; Y8 B' h2, Python 3.10.11
' b6 w+ P. `0 [) F0 L3, CUDA 12.1' p+ E: ^- T, ^7 w# F
4, 在python 3 中安装7 { l" N, A5 b: y5 C1 K4 V5 J# x
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
# g; ]* n7 {# U; J U3 q0 |& Q这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。/ v# d3 n9 n1 W& [: r
5,pip install -U openai-whisper- g G: O3 c( U' j* ~3 S- e
这是向whisper 致敬,可以不装 q8 w N; f1 M( x- U3 E7 _
6,pip install faster-whisper
$ L g! y! C6 z. k8 r9 v4 Y4 v8 [, j----------------------------------------
# K, C/ L" g; s- i" ]4 @! `whisper 我用的命令行,faster-whisper 我用的是python。/ g- n1 w: W: v( ^* N! N
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
$ E* @6 K8 @0 n3 {' t
) T3 _! Q8 G# {0 G; w----------------------------------------+ ]- ^/ U; Q! j: d
G; @& i2 v+ V& F* p6 c. rfrom faster_whisper import WhisperModel
+ j; _$ X9 \- y9 E
& ]+ B6 h1 S. fmodel_size = "small"
8 k4 z% `, {) ^& @8 U
( u9 W+ c4 C( W; ]. Z3 {0 Mmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
/ c( W* c' D9 \7 C- J% O7 q2 Q' I1 n2 h, d
segments, info = model.transcribe(# T; e" s1 x$ R! B5 c$ {8 f, n% I
sourceFileName, 7 q) y, f/ }4 w5 o m( Q
beam_size=5,
+ e! T8 ~' ] b2 J! z language="en", ! C! v \( [) R+ ^) o; o+ n# n
task="transcribe",
, m5 M# Q$ R- T* ^* h word_timestamps=True, w% P! w5 I% V: T
initial_prompt = "Hello, welcome to my lecture.") f( M4 B, R+ C5 k1 K6 l; }+ D% C
; Y. Q3 i. L4 {( `9 a
for segment in segments:
/ {/ k0 `" b ^3 T7 g7 m0 d print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
2 ?/ N3 [+ ]6 j" e) p
$ @: x5 u7 j, h# r0 u% B( y6 v for word in segment.words:
: J1 t0 t# {# S9 X
+ [, v, R( @- C! D0 Q9 J$ ]; z----------------------------------------
- [* f' ]6 b1 W5 E1 P2 G2 }3 ]
& O+ j% E& H$ v# z7 `代码说明:
: m, G4 x+ f8 `7 A5 p5 N1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。( M! B0 e# ?. }6 b, K
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。8 a+ y. T9 X+ @) u' B. T9 H
2,segment 本身是很粗糙的,做字幕勉强能用。
2 H$ g u) z; A5 v w* u* s2 I) }3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
( n6 W8 K5 B& s# K1 x4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
: i* @, e% g8 ?; p, C: W% d比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。/ c" \ ?3 F x' [% ?
5,model.transcribe 中参数说明:
# w( x: I& h' I$ n! L你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数8 f5 M3 B4 s7 i6 B
其中
3 l5 _. I+ T0 w$ z$ n word_timestamps=True, 1 G! U5 P$ s I* Y \* ~7 ~
保证了你能拿到 word,否则是拿不到的
7 |. K% j' `! k) k) |/ h initial_prompt = "Hello, welcome to my lecture."). B4 z3 i+ [/ L* |6 B% _. B
保证能尽可能准确的断句 punctuation,但是不是决定性的。; D+ L& e3 b. }% n8 N* `
其他参数可参考源文件:
7 r/ Z/ o3 C1 _/ ], phttps://github.com/guillaumekln/ ... isper/transcribe.py
# v. [! m. R1 i6 x- D* `: n: A! h- O) C152 def transcribe(
' }* j4 `$ I. R$ v8 B从源文件你可以看到是支持中文的句号断句的。
6 {( f; }5 _1 k4 ?: s5 B9 n6 I7 ?1 H \2 y3 @( d
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。! B9 @8 u/ t, R/ w
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
& s7 j2 A% w# s2 M7 \( l; r2 Q5 j8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
! u- b) Z4 Z! ]! T/ N; _0 _+ l2 G
3 l, U. \% t% A2 f, I% A $ L, H7 y* Q( g4 _5 Z+ `8 G
8 @# f2 B: R& O5 d$ G' U/ m/ f. h
|
评分
-
查看全部评分
|