|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 " r6 e' ]: m, g
, B7 s7 y1 b9 `; G' _4 W( K借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
4 I9 L% \* F; e: \5 t4 c1 e5 ^, R效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。( o( S" ?0 o5 R" b! o4 s, N/ S
----------------------------------------
2 V3 _9 V I0 w+ ^# O" j显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。# U! H. Q' Q! A/ i$ Y) V
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。( d: q0 T3 Z7 ^1 s* L
----------------------------------------
4 c. @! A8 q! m. y% Ehttps://github.com/guillaumekln/faster-whisper
. D5 E( H! @/ p! u/ p, P安装如下:
- p% F: N# ]1 b* J# L; m, ^1, Windows 10+ g6 h, Q' X0 P/ t! I. ~5 n
2, Python 3.10.11# w& W5 ?9 X: V3 A
3, CUDA 12.1- H! s8 ?) q- U
4, 在python 3 中安装# n; g) X0 o' ^. F, F
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117& p# b3 j3 @. y& d
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。$ j* S. e, q( f: ~+ F8 x+ V8 J; T* B
5,pip install -U openai-whisper8 o+ c) Z e& ]" v# s w8 `4 g
这是向whisper 致敬,可以不装# V4 Q9 C* |3 K$ N* b6 j2 X9 Q" W
6,pip install faster-whisper
2 k; w z& ^* g$ A, m) u----------------------------------------5 n5 G8 l A4 p1 O Y/ A
whisper 我用的命令行,faster-whisper 我用的是python。
/ C& F4 ]; `7 {! y下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:6 J8 f$ G" B+ u1 S ?$ m; M
2 O: M b0 A$ ]
----------------------------------------: {. v) k* h+ X9 t' @4 c- P; v3 B
: n( @$ V) `( z' \from faster_whisper import WhisperModel) K+ M+ M3 Z. {7 w
2 J3 a* s; z: i3 q3 e/ F9 j+ Y
model_size = "small"0 b) x" r: Q }7 C- k$ l3 {' S2 s
# Y+ r0 I! g2 u6 Z
model = WhisperModel(model_size, device="cuda", compute_type="int8")
. T6 ]- z" Y' @* u4 L+ W; v/ Y3 E# J4 l/ G& U
segments, info = model.transcribe(
5 B+ n) w* q2 n5 n* L sourceFileName, 8 n v v9 \ g- K1 t4 x
beam_size=5, 0 H9 Q$ M' F- j+ n6 W: c% Q
language="en", + W4 X4 H L8 K- {
task="transcribe",
* k5 U4 U' w" ~1 K; \: H2 I word_timestamps=True,
+ M& M8 F4 \- v. n initial_prompt = "Hello, welcome to my lecture.")- S/ T8 E& j% D$ t
* I" d1 Y/ F/ T3 B1 ^# ]
for segment in segments:& T# q5 [6 {" T
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
2 d( A/ W& h1 s" ]! Y0 I
( T4 P6 M% p9 w2 X0 l' {4 c, ]* B for word in segment.words:5 V- B! e$ D6 E8 G0 C1 G
& Z8 g/ v# _3 c/ ]) H- M
----------------------------------------$ m; x X, }9 R$ @- T
! P: d6 d- k" G( h& F5 U0 D
代码说明:/ P4 ]5 x0 E5 B& P
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。% q" F2 q- d1 s5 B
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。1 @4 o6 |1 J* o! P. S
2,segment 本身是很粗糙的,做字幕勉强能用。8 y4 \) h5 k% _
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。6 a/ @" w3 v1 c$ A* ?# K2 _
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中* Q, F. r( X2 g4 J& L
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。/ n( O1 g' R' w# e4 ]/ w( d
5,model.transcribe 中参数说明:
5 |; g( t( f/ [* J: J: l你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数" q$ ^: P: l8 b0 |
其中
! k% I" ]0 X4 S! g* \ word_timestamps=True,
" T2 i: }8 r5 e; T. c5 T# T保证了你能拿到 word,否则是拿不到的
- Q, t) A9 J0 i) l initial_prompt = "Hello, welcome to my lecture.")
4 Q6 X) W( r+ `3 T. X0 R保证能尽可能准确的断句 punctuation,但是不是决定性的。6 R* r: g3 v" h( U/ `6 T2 ?! m
其他参数可参考源文件:- Y( g0 w3 d1 h _; `
https://github.com/guillaumekln/ ... isper/transcribe.py
6 B2 B* j! w# w, w M% v9 s7 c3 v152 def transcribe(3 S/ N% v, z1 z0 a9 l1 Y% f# `
从源文件你可以看到是支持中文的句号断句的。& Y( @# F* \2 Q& M0 j
- u& Z4 W" f3 n6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。3 r, m2 d# Z# w7 D W; v
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。4 T2 @; t: ?/ @0 R: U
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。7 B- G2 k( W2 Z& H$ b- _, _5 z
) f/ r# |2 V; I
* E* m* \5 c( r5 A8 e/ w0 ?: J: q# Y) T+ L9 B1 w7 l6 X6 m+ A3 @
|
评分
-
查看全部评分
|