|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
0 f% `0 Q/ n* f& n9 q# @. s; ]. N2 H, S4 L0 t
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。- \1 C. F/ R9 W b" l2 w* O
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。* A% N( K0 l! d8 h( K
----------------------------------------
' ~$ \( l$ i% v) e+ ]) \显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。0 I$ x/ K* w8 I4 d* v
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
+ k6 M1 \7 b% L( n4 R( C----------------------------------------
: X. }8 J, ^3 [$ }. ]https://github.com/guillaumekln/faster-whisper
- @# j9 c- Z$ P! _安装如下:4 B5 r3 W! W4 ?) _! \/ ]
1, Windows 10
& ]* p9 E. A; |" j5 X' Y2 u5 s( ~, I5 h2, Python 3.10.11- J9 m8 d% ~9 { L8 S3 a
3, CUDA 12.1
9 U5 e6 f' t. N4 b4, 在python 3 中安装
9 X+ ?5 D+ G% d( ?: d5 H7 mpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1175 I h3 a5 `7 @8 x
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。# U6 G/ `: p& F% I; O- [9 ?- X
5,pip install -U openai-whisper
; d1 K( f- M/ a2 K1 r+ f I; v# e: ]6 D这是向whisper 致敬,可以不装9 c s) }8 ~3 |2 s% P/ }
6,pip install faster-whisper7 ?( O$ p( h; y0 F7 Z
----------------------------------------- r3 [9 N9 s& j
whisper 我用的命令行,faster-whisper 我用的是python。4 Q7 _% B* R' M* l8 X% J
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:$ }4 g: z: n$ w( P9 y; `
( R I, @5 L0 G6 t----------------------------------------
" G8 j! P. i1 k2 c
) C8 k5 N% h3 l- Q1 ]+ O2 Lfrom faster_whisper import WhisperModel% e4 e5 t- A# H
" o8 H9 v4 j4 |6 }! h+ C: M- {- Gmodel_size = "small"
. x# [2 A5 x) @) ?9 I) C! l/ M6 f9 `" J1 B
model = WhisperModel(model_size, device="cuda", compute_type="int8")' x3 Z9 }( [- X% e/ j
7 g0 p0 a2 W" h# b
segments, info = model.transcribe(
6 ]3 b8 m2 {7 W sourceFileName, ; U% u8 ]+ g* a, `! f
beam_size=5, 4 y9 y- o* D! w+ G1 O: d
language="en",
4 P) U3 M" w! _: S( N task="transcribe",
3 y# S6 H5 E- p" l. g word_timestamps=True,
6 E4 k0 U% a4 f! Q# I initial_prompt = "Hello, welcome to my lecture.")1 t4 [, h. m+ g/ A% q3 p
, @6 k$ |' P( w: Nfor segment in segments:) G# C& ^' [7 B) X" c3 D& U
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
# i' {, e" m3 I7 Y, S5 ~: p1 T6 H! C* k' }
for word in segment.words:
1 P9 b3 H6 d+ k& b
: I4 c# H( @- D/ i+ }0 ~! J2 }----------------------------------------
/ c/ v- u6 c% u6 h+ `* e+ t- g3 ~4 B0 z2 D- h7 b O
代码说明:! H) [" B( k* B- `/ K( l: _
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
9 |: Q, m2 o+ q* B但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
% w7 x/ x6 _1 q8 ]2,segment 本身是很粗糙的,做字幕勉强能用。
9 z9 R. B y9 M& m. D K) |3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
& N- o2 ^" D4 U* ]4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
7 Y4 T3 m$ u( @; v* e! r* g @, ?比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
0 k) \ b E$ Q" i1 Z$ B5,model.transcribe 中参数说明:! q0 B- Z; W2 T# {. u) t: Y
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
& Q6 Y2 H! {% y其中
' G9 Z4 ^- y! `/ V+ N4 i word_timestamps=True,
3 m: q) I0 ~2 f: E4 Y( {* l保证了你能拿到 word,否则是拿不到的
9 i3 f& g. H! H) q initial_prompt = "Hello, welcome to my lecture.")9 f3 g. ^$ v5 J- Y2 d) b, X
保证能尽可能准确的断句 punctuation,但是不是决定性的。
- v. ?6 [, I; [; R+ C; \其他参数可参考源文件:. L3 V: Y' S" c% y
https://github.com/guillaumekln/ ... isper/transcribe.py
+ Y8 z" B1 C5 ~* a5 }152 def transcribe(9 M2 S6 [% f2 s; D+ ^7 f
从源文件你可以看到是支持中文的句号断句的。2 J% i% _* N, v% a+ F
* |& ?! M) @: E9 I4 O
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
- J; M' i1 _! l9 G& u" f+ t7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
7 ?9 [4 l9 l; [1 g8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
- Y3 w8 s1 H9 A$ o- V* L/ T
" ~& K4 ?/ Y8 Y+ g- e/ e
w7 N; F% T% r2 { Y1 p+ U3 M5 b0 ?* y9 d. s' F+ T9 h; F# p+ o
|
评分
-
查看全部评分
|