|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
' v1 C. E# Q N: J1 ?* X+ z( ?( H( m0 m
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
8 O# l: J$ Y8 `. G+ M8 R o- @效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
2 u: d/ q% u7 i- ?----------------------------------------
0 h* \/ L- d' E' Z7 t显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
6 e2 o3 \) D2 ]$ h" {在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。3 O7 ^5 r: j1 q7 K! z
----------------------------------------& J2 N8 C4 U! D" f$ `- W5 e- m
https://github.com/guillaumekln/faster-whisper
- B6 H1 g/ E4 u s2 P安装如下:1 z3 E+ Y. f# v9 ?) e( A3 G' D
1, Windows 10
; E$ ~5 Z/ K" [: `6 w5 L/ l9 t: i2, Python 3.10.119 y: k& u3 H5 j+ m% [/ z0 W8 P9 a4 P
3, CUDA 12.1
5 _/ ^% R* J& G4, 在python 3 中安装# K9 k2 [$ d8 D3 K
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1176 w3 m- f. W( S+ k5 e) T# f5 i
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。+ \. y2 A* B: T3 |) k
5,pip install -U openai-whisper' y. @- h& t+ G' [# [: k) _3 e
这是向whisper 致敬,可以不装) D) a% b" \/ P r$ f
6,pip install faster-whisper
% \) ~% J% Q- D2 ~0 B5 k----------------------------------------
$ }& m6 s* j+ D3 J% P# J8 U7 X8 _% [whisper 我用的命令行,faster-whisper 我用的是python。+ J; ~. I& m2 L- A& E
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
7 A+ i% l/ n e9 \) Q' G' q* I' p! x8 w
----------------------------------------
4 O) ~7 A ?/ [' \1 Z
& p% g# X' X2 P7 @$ Y, jfrom faster_whisper import WhisperModel& }/ G% G: u2 Z1 N3 T
0 R8 l9 r( z* ? ~. [
model_size = "small"
! L/ k/ r" C# c2 v x
; x$ Q( ?" z; I0 j0 {model = WhisperModel(model_size, device="cuda", compute_type="int8")
B5 `* l5 |* c, w: i1 q" B; r
2 }, L. P0 }1 x: V+ V5 N) Gsegments, info = model.transcribe(
0 J( K1 A# T* X, ~' Q sourceFileName,
7 b' N$ E0 ?* X' G# s! A beam_size=5, + E# |9 M7 F: x- R5 K
language="en", ; U& ?: C4 V5 Q$ D, L: J
task="transcribe", # v/ C0 O2 E G
word_timestamps=True, W5 Z6 C3 }' c! c' i
initial_prompt = "Hello, welcome to my lecture.")
3 x, e# U1 o, e/ r; ~6 ]) ?& P6 V9 |9 w& h- y; @
for segment in segments:- m2 X4 m+ X: v0 e. }* p3 B. |" p- w
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
6 ?- l: I; O# c$ ~$ U1 h4 a
8 t) F" z$ m* r for word in segment.words:" M! c. _4 m. y( [/ j7 P/ [' y
$ ]) _& ]9 T( Q5 K5 M----------------------------------------+ Y( S( F' i0 b! f+ k4 C; K
8 U; j, T& i' ^
代码说明:
5 G+ g7 g5 y; d5 @8 }( K5 I. u& u1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
, v) [2 r8 `, [! U' w9 l但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。7 F- P7 u$ I; }+ {3 u! B
2,segment 本身是很粗糙的,做字幕勉强能用。
: A. x( m/ @) d+ {' C" ~3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
- e% ^4 g2 ]$ e4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中" |9 \8 B8 f2 i/ G# h. K
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
) a# Q6 l. P1 R' {8 O2 ]: e+ @5,model.transcribe 中参数说明:. z2 z- W, K" K7 T8 s
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数5 ]3 ]* ~! M; b
其中4 x7 Y: y' |: e) C4 b6 h/ d
word_timestamps=True, 1 o' [2 p1 I N0 v; X: f0 h9 @7 F4 S
保证了你能拿到 word,否则是拿不到的
$ I" |* L( [8 a! @2 o: X initial_prompt = "Hello, welcome to my lecture.")/ x% I: Q4 }( y0 b0 S
保证能尽可能准确的断句 punctuation,但是不是决定性的。
/ }, z% w$ E! w8 L' j& q+ @其他参数可参考源文件:* _3 k- X; v8 {( S# s4 G
https://github.com/guillaumekln/ ... isper/transcribe.py8 c1 P Y9 i" e; S) O- Y
152 def transcribe(
% K2 I! e( K" `! }从源文件你可以看到是支持中文的句号断句的。
6 x/ ]" ~ B! C, f6 q
9 L+ n. }( G. N* U. R0 ^6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。: W1 B% g, p6 V& N0 t
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。) K# @5 R% W$ g- O1 [ j, t$ `( s1 m
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
2 d/ d: W% i/ }: s! q* L2 Q9 Z
; S5 K) W7 D# a% U4 W \6 L2 J ! J$ H; {, v ^# l
k3 g0 _$ L6 M: `% ]
|
评分
-
查看全部评分
|