|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
) h1 k# Q5 L$ i7 \& r9 C3 n8 A# D& r; }& i
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。8 U9 ~* g/ t6 W3 T7 r) p
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
! A% {5 P& H7 ^; J: R3 o5 J- e----------------------------------------
) f7 P& A. T) u* i ~6 I: A3 e显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
& e. X. n2 F, b# E+ c4 ^) {+ d+ ^& m在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
2 t C! Z" P' |+ g----------------------------------------
5 u1 g# U: Q8 \/ rhttps://github.com/guillaumekln/faster-whisper
( w. U) Z. L8 V6 ^( s# G+ K9 o, x安装如下:
/ l8 z8 m1 B, }" t1 V( _5 p0 C1, Windows 10
+ M' U: d z" D# F3 x5 c8 e2, Python 3.10.11- d; p. u6 t! j0 ]5 k8 R5 ~( H* m
3, CUDA 12.1+ |3 u. f- M _1 a
4, 在python 3 中安装. z6 l m% a4 }4 ?6 D
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
. D% k9 e3 |" r9 _- v3 }% D这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
! R& x! G: y" {% g: t5,pip install -U openai-whisper
4 U U* Q7 u \8 e这是向whisper 致敬,可以不装( `8 @9 R8 Z$ m# Y, y$ I
6,pip install faster-whisper* `/ ]0 W$ I$ v" S7 S7 C
----------------------------------------' c. y# ]0 J4 g# c
whisper 我用的命令行,faster-whisper 我用的是python。3 C5 E$ q7 b! y8 ~1 J/ U+ @3 I
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:. l$ v7 e6 @. N% N6 I% Y# z
5 v9 K8 r8 t" h7 M----------------------------------------: e: Z: ~6 A" Q; B' S7 D# Z: N$ R* d
5 P* b5 D @6 \from faster_whisper import WhisperModel
2 ^, K9 S3 }$ \
) _) |1 ]# I ^3 T+ | \" ?model_size = "small"
+ x. p/ P5 o: x! ^4 B- g0 z# P& L! |( \
model = WhisperModel(model_size, device="cuda", compute_type="int8")
) ]$ ^) I, L1 t! |/ {7 `$ F
: P7 K: T) M, C1 W7 `0 \0 Rsegments, info = model.transcribe(
: B. k% o/ s8 ` sourceFileName,
# H9 C" b8 I: k! f: G# i8 o1 L beam_size=5,
% ?8 m' @% X5 e/ a. @- I language="en",
1 P1 E+ ~1 i9 l4 B; N) Z task="transcribe", ( f& z7 k& p) ?5 r2 r1 ?) Q& |
word_timestamps=True,
0 q0 t3 q+ p! G2 R! L/ n6 C3 N initial_prompt = "Hello, welcome to my lecture.")
* _$ w7 [( I0 M# }) z! H) R4 W9 Z+ E4 s K5 H& s) H) q% ]
for segment in segments:
/ t$ H! z2 k. x* k# k: @' i print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
; K9 V$ m( y- d' `
; p$ @6 V+ l4 p/ g for word in segment.words:4 p5 e7 E+ y; }! R ^3 Z4 ]
3 P& j0 z3 [3 G8 l: l! M2 Y' T/ Q---------------------------------------- y) E: b; i6 @/ j5 ^8 B& R& G
4 O- J2 Z4 m6 U2 s2 [代码说明:
$ g1 x7 B; a. m) j- _8 w1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
n7 ^% q/ T" T5 E# h但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。5 z; ^( T" d3 O. L# Z& T. I' F0 w8 P
2,segment 本身是很粗糙的,做字幕勉强能用。
5 c ?2 S2 v3 o2 n# k3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。. c2 z. y. O, m/ X
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中* b ]7 O+ [# D" k* S2 z. e
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。 R& z( Y5 Z; N4 `1 `! A
5,model.transcribe 中参数说明:) y( `/ u$ ?- ?+ M0 H/ k1 b: c% F3 w
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数9 X8 `; j" g$ C) Z' |, i: m6 `# b
其中
' f& e- `( o0 p u2 W/ m) R: L5 J word_timestamps=True, 4 k, i( z! a4 Y, ?( Y5 U& J
保证了你能拿到 word,否则是拿不到的
. }( h G1 T, z$ x0 e3 d6 I initial_prompt = "Hello, welcome to my lecture."). E7 y( n% S g
保证能尽可能准确的断句 punctuation,但是不是决定性的。0 x8 K9 \# Y2 W! ^6 x
其他参数可参考源文件:
6 G+ {; E ?, G+ Qhttps://github.com/guillaumekln/ ... isper/transcribe.py0 s4 C. ^" e, K% D3 f
152 def transcribe(
, s' H% X- ^7 R( ^7 _% m从源文件你可以看到是支持中文的句号断句的。
7 r, W1 r& G( F2 C5 e4 U5 t8 a: Z/ J( r% R8 o8 h/ D$ S! j" p
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。1 A( Q3 B( i$ h
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
3 K) j9 U2 p9 c; _* g8 X2 o B& g8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。+ Q5 ~3 M# D! g
8 o# _8 b) T& c
: g& `( X4 k- O1 W, M5 z
% c; Y& ]9 }4 v |
评分
-
查看全部评分
|