|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 . }: m L: A, g6 j
0 T+ m1 K. i7 T0 H: I借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
- P( T' n$ b1 y) |' y/ y: W/ R# I效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
4 |6 G* [6 \1 _! Z6 N' B4 e----------------------------------------
& m' g5 n# U+ d. g& v显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。2 x9 K) Y0 D; `
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。( u3 g* h. {6 q, l
----------------------------------------
. H% R1 E" \8 ? G( K) Ihttps://github.com/guillaumekln/faster-whisper
1 s! d4 F- G" m8 }4 ~安装如下: |9 I* g. f; j
1, Windows 10
! G9 k$ a% C5 a- [2, Python 3.10.11; q/ B. ]' w* H7 `* D2 n
3, CUDA 12.1
% p* x" G( k( w! Y3 F$ }4, 在python 3 中安装8 Q- i. o+ A5 |. |
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117/ c; a7 y- ~, X, b4 A; O$ W
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。$ G- w) D8 Z1 b% G: T
5,pip install -U openai-whisper- N0 S6 O2 b, `. @' i6 ~
这是向whisper 致敬,可以不装9 \% } i% U3 f. I- k2 V( Y
6,pip install faster-whisper
, K. E" ?+ g3 B1 B9 H4 L; ^----------------------------------------( n/ e5 F- U; B$ j) V9 w
whisper 我用的命令行,faster-whisper 我用的是python。1 }. Z, Q' I1 @
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:( r( {& d# n' l7 D, R! c9 j5 C
1 x% p0 U' k+ v3 |4 h1 n----------------------------------------6 z% k( }: \. k' ?
9 y$ s! P$ p3 ^) bfrom faster_whisper import WhisperModel8 H: K' f! n6 z% i: v6 e, N
" g- X# T- V1 {
model_size = "small"# Z$ K; d, y# [) L- P
/ H) d: f' |2 x, K! o9 B2 ^1 rmodel = WhisperModel(model_size, device="cuda", compute_type="int8")7 S* U! ?( i @5 D: Q# B
; p' y3 A2 e) f5 V( h! psegments, info = model.transcribe(; u" E3 x& F8 K6 _
sourceFileName,
1 k3 B7 V; L6 _# i# p4 o beam_size=5, ) u; t) e/ A1 a6 W% z
language="en",
v+ I1 v+ {+ n, |6 R; L# k% p3 { task="transcribe",
$ @' W! N- T4 q! V0 m3 [ word_timestamps=True, 0 Y; N# ~4 ~& u \7 M
initial_prompt = "Hello, welcome to my lecture.")! F% n) C! L Q8 H, S
" h3 I- j( p+ Z0 wfor segment in segments:
' k0 Q" `- s9 J/ u1 S: z8 d print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
) p1 b6 i2 k2 Z6 s C h- ^9 E% K- X% ?& P
for word in segment.words:
, I8 R7 A( A" E
, e5 H: V# e! t0 [, I----------------------------------------
& v+ }' d4 Q' A( F/ ]: e% r. B+ l' ~2 r
代码说明:
( S# w- X. I$ i k1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
1 c) ]' S j) V6 v. \: z& j但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。: b5 Q) Q7 e C) B
2,segment 本身是很粗糙的,做字幕勉强能用。# C: n0 ]" w. T
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。, m$ t6 g x& q8 ?1 y6 z
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中$ a" e' T3 t' A* y
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
3 y9 ^' x3 @) o L5 }2 A- L5,model.transcribe 中参数说明:
" H m$ m) Y1 G5 Y6 N& \你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数) m7 f' ?- x7 H+ D2 q
其中! j$ X' R4 h8 h z% v3 r
word_timestamps=True, % v4 L8 R, A7 Z& [
保证了你能拿到 word,否则是拿不到的
, |# Z9 B" s" a% f h2 J, B initial_prompt = "Hello, welcome to my lecture.")
8 ~; x, p4 R, v, {4 S4 V保证能尽可能准确的断句 punctuation,但是不是决定性的。3 _9 f5 P6 K5 }2 p; w
其他参数可参考源文件:2 ^6 A3 _- M1 ?& Y0 h0 w( r
https://github.com/guillaumekln/ ... isper/transcribe.py0 K6 X! o# L6 [ p9 ]- D6 M8 O! Q
152 def transcribe(
2 X `, b$ h b% a" w从源文件你可以看到是支持中文的句号断句的。
" n! ]* v% {0 k& u* U4 M* D
1 y/ n5 S R; o% s6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
. A* d! M! g- m+ d: o7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
" \8 R: t1 d3 m8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。/ T# j8 ^5 V- V7 N# ]5 C2 L6 _
X! _- V0 g4 C+ b - t7 P* D5 E3 N! u
2 s& r) {' J7 {, C4 @( ]! l0 K |
评分
-
查看全部评分
|