|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
$ d7 @/ J) b" U# k- \' r: _
4 ^' `/ p) p, Z$ x! G借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
+ A& O+ B! Z: e- S9 N效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
8 g: R$ a" F8 @ ] u' U4 i3 M3 t----------------------------------------+ F Z4 g4 J" u1 F- G
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
; i8 Q2 B1 C1 } N1 f- D在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。) n/ Q. U( a0 S* C/ m l$ \6 v
----------------------------------------4 A2 i3 w: U0 `' ?% D% p
https://github.com/guillaumekln/faster-whisper
2 P& l7 @! N8 A+ B) n& @安装如下:) j: j* q% D2 C/ m. X
1, Windows 10
% G/ W+ b5 w R5 \0 J2, Python 3.10.11
/ k: q7 C7 w: R1 I) @" g: a [: B3, CUDA 12.1$ T, c5 ]6 w1 W8 @
4, 在python 3 中安装" d! i5 V' W+ z4 `! @
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117% Q6 I5 D; }6 P6 S
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。 q" h, N3 B5 _
5,pip install -U openai-whisper2 v; f' c$ K+ m
这是向whisper 致敬,可以不装( h. g, T4 ], ]' o& Y
6,pip install faster-whisper
* L2 i; g( ]" H6 C----------------------------------------$ B, @5 i# U" g ~+ s$ b2 U5 o' E1 ?
whisper 我用的命令行,faster-whisper 我用的是python。& \) X. Q$ b) w9 |; G
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:; K, V8 u+ i' X: @4 \# R
$ h0 S% V. L/ {----------------------------------------" }. G, T6 ^: Y' a: i* c
4 J% b( D9 i+ J; \# M# l( afrom faster_whisper import WhisperModel
& Z3 N; j6 G/ W5 B7 B9 ^3 `; M2 P% p/ z
model_size = "small"
/ }+ t+ ^% k- Y
& {% `8 p5 J5 U( l9 vmodel = WhisperModel(model_size, device="cuda", compute_type="int8"): V- H+ P) D8 |6 @1 ^/ M
2 e! I$ W, {2 e6 b# a
segments, info = model.transcribe(/ ?' w# U' h0 H5 t
sourceFileName, u1 a0 r/ o# k! m; U: r( A
beam_size=5, 2 I" V# c9 y; f4 m( D4 l9 U# v
language="en",
: q2 z! h: O+ Q K task="transcribe",
% U! b6 V$ G) ~, S4 d word_timestamps=True, 1 M" W/ U) K# ^4 f6 Y' j7 ~
initial_prompt = "Hello, welcome to my lecture.")
5 X3 N* G" e c2 a+ i
4 {& j* V+ l7 f" qfor segment in segments:
* U6 W* G& o$ p/ A. x print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))3 t9 {/ H, S; s3 N7 h6 O& g0 Z4 E
4 v4 o J9 {8 l+ H+ T* V
for word in segment.words:; W& J2 x) {& d
7 M2 r( f* Q( s1 Y7 H7 J* `) m----------------------------------------
+ l: ] t" i% `! X; {7 z+ h) ^5 u5 C$ m% ` g+ V# i4 c2 V. U8 A
代码说明:
# `# T, J' t' Y+ `$ }1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。4 \# w; b; @; h3 o R* U
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。; m. w( a* x' F$ B
2,segment 本身是很粗糙的,做字幕勉强能用。% [+ [3 o6 g8 g. i( I' h
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。/ O, Z+ j5 R. D; j% r# J& D
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
: @; @0 u1 S, S! x, T% S: o比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。% B3 G4 R* V a9 Z; ?% O4 S
5,model.transcribe 中参数说明:/ a/ L# ^9 }1 K+ [
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数! Z9 ` u* M2 I$ {
其中
5 ]( _2 C4 ^3 n/ Z" \- F2 o" G, W word_timestamps=True, 3 p; k( W2 A8 A+ N3 ^) i
保证了你能拿到 word,否则是拿不到的
3 c) S7 C3 s- n. s: D% P4 ?9 O initial_prompt = "Hello, welcome to my lecture.")6 R% z* s/ O9 o7 e: G
保证能尽可能准确的断句 punctuation,但是不是决定性的。
1 q& d2 _* C0 a: X$ w) W( F6 T其他参数可参考源文件:
1 u5 M+ e/ t; J8 t6 H4 P( xhttps://github.com/guillaumekln/ ... isper/transcribe.py
* [* Z- k) P, X6 O& g2 S152 def transcribe(
/ e4 K S0 m, T从源文件你可以看到是支持中文的句号断句的。/ N/ D6 D* F/ d6 F0 B& `8 e/ s
; v" n( N: O6 ]0 S' {6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
. j' j% S- `, c# L, ?7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。- u1 D% ^: `8 v# w: g
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。$ {7 J1 }) a% N3 J$ l
. F) N; \* t; h4 n D0 k+ C1 x
7 y+ ~4 d) h/ I. m5 d
* X6 P% ~- [7 h% k |
评分
-
查看全部评分
|