|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 2 u: Y$ L0 r D7 L8 ^# Y
) D% @& y2 |* }. t8 w" `! W借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。( \0 A% |6 B% \3 k6 \ |8 P7 a
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。2 I% o/ J9 P0 Y4 V1 W
----------------------------------------
, A# o/ U+ n) j" k' y! w& c显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
6 P2 R& }$ i, f2 W& e" ~在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。; h l6 I0 T1 [9 ]
----------------------------------------6 R3 p u7 D1 o% a8 z) K5 j
https://github.com/guillaumekln/faster-whisper
& A4 ?, `8 t' T7 W4 `; D, h3 A2 P安装如下:
! I& X! N/ p o I$ u; C" L1, Windows 10 e( H3 L8 P) H6 k
2, Python 3.10.11
* i; @% ] Z5 I" M9 Q3, CUDA 12.1
1 w, u- W ^2 z' T% H" o; q4, 在python 3 中安装
+ H: Y" z- R2 G4 R$ x% }pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
) m) x: X8 M7 P) L) m# ]+ @9 X这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。$ ?1 \4 \. `$ u
5,pip install -U openai-whisper: X; y! Q3 _) [( e. _$ [
这是向whisper 致敬,可以不装. A+ J' P$ F, F1 y/ R
6,pip install faster-whisper
6 C2 f: S) \' y* C& c----------------------------------------
9 F7 V: W, }% C* x1 x! uwhisper 我用的命令行,faster-whisper 我用的是python。
) d0 o' ^+ i) X下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:0 S" X: c2 q R) Y8 L' G4 k
. c$ I' A8 k0 @1 j6 O2 ]
----------------------------------------/ T$ w$ t+ H! c5 @' q$ W3 H" Q$ M
8 D* Z5 x1 Z3 s, ~7 ]8 d6 a
from faster_whisper import WhisperModel6 r0 a0 Q0 m1 h h
3 A1 o y* Z1 y+ ~( r
model_size = "small"
* X: {7 V! H$ A+ e7 i
, Z. c( `' _; n5 y$ Z$ X B5 ]9 Fmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
. D/ O$ K7 r1 x b, R3 U- C2 r& U; y/ ], N
segments, info = model.transcribe(5 i' {8 o! f5 Q
sourceFileName, 6 p: q+ O" F/ {
beam_size=5,
4 I1 ~/ n8 S+ k language="en",
- K3 w0 s6 r+ `1 w& X, Q task="transcribe",
8 b$ t" i' e) W5 T" Y! ^" Q! N word_timestamps=True, : v7 `/ R ]& c$ d$ P( r u
initial_prompt = "Hello, welcome to my lecture.")0 Q, M' w2 T, v2 L
3 p1 p/ n0 J H! `- P# Lfor segment in segments:4 t% ]; q [1 L
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
3 n f4 [9 U. z9 D. Z1 d, E% T1 H- X% L4 J' v. Y3 w
for word in segment.words:
. s1 |2 ~6 P9 u9 }+ B. H+ E- n # W1 U- s x% J: p3 G
----------------------------------------! M! y' v9 t" b! W% F
( q* P+ E: {- S) V7 S代码说明:
$ @& m0 v+ F( d( A5 \$ l/ m3 T' A( k1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。' U7 s" {5 _$ M3 P
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
9 G% s8 q+ b1 _# w2,segment 本身是很粗糙的,做字幕勉强能用。
* L- b. X! O( ~! D& ~! ^3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
) }# I+ E. d0 \# p8 x4 f+ K4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中6 E, f, f# w! k
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。. ~* Q! f1 l9 c5 }
5,model.transcribe 中参数说明:
, d: c, Y) n$ F8 f; g% Y7 P你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数5 h3 g6 h: l" M" N3 M4 \4 r! r* ^
其中 X7 s; N+ f' B" e, n
word_timestamps=True,
5 J' M8 I* C1 l( q/ E保证了你能拿到 word,否则是拿不到的# @) U# A$ c- T7 r$ r& K: y* c
initial_prompt = "Hello, welcome to my lecture.")
8 ^; {" ~' {/ p5 r3 M保证能尽可能准确的断句 punctuation,但是不是决定性的。
4 _2 X, K- u j其他参数可参考源文件:
2 t4 ]+ ^+ f9 m @/ G3 V2 rhttps://github.com/guillaumekln/ ... isper/transcribe.py: A' g2 T+ T/ I
152 def transcribe(7 _) w0 q( e% G9 @7 n
从源文件你可以看到是支持中文的句号断句的。
% D6 {& `- q" J6 P8 p9 j0 N
- B$ F# q7 w; ?/ `5 O" a) R6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。' U9 o9 P1 \- J3 g
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
, Q( `$ z" h1 A5 h9 ?8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
9 B4 g. B1 o! R8 l: T
7 C; \9 u5 O' `! O
0 f" p" E0 ]& u0 m
% e* Q' v" R" z0 q, P& O; X |
评分
-
查看全部评分
|