|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 7 e/ J/ d# |% W
# D3 K1 w& o9 @4 h9 d5 [$ u6 I借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。" D/ I" F- i# s6 d' e
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
- _, P* | Z# Q5 K. q$ p" r/ b% C----------------------------------------, P1 A# y4 z* O1 }' c5 I8 l2 _
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
6 d" ]1 R& S6 z5 T% z在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
, E/ M6 {* F7 @3 R5 `0 _----------------------------------------$ ^& y5 ?5 u4 m( }5 F- R
https://github.com/guillaumekln/faster-whisper
: d) d2 V" T8 T( K o' k* @安装如下:3 q. p1 O6 f: k6 [; q( [3 v; x
1, Windows 10! C" b0 n" S+ V& ?$ W/ z2 `
2, Python 3.10.11
9 y$ d4 q+ ]; K; {3, CUDA 12.12 H/ V3 J8 [; K
4, 在python 3 中安装 P3 Z. B8 L, H. f$ n- g
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
' f( H& Q6 K$ w0 {1 ]这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。7 W, |( H8 x# T1 q& M
5,pip install -U openai-whisper; v1 {7 h, u2 a v+ v! F
这是向whisper 致敬,可以不装' P+ [/ h& e9 ~! o3 _0 F
6,pip install faster-whisper p7 y3 K8 u. `9 H( f: B9 [- g, M
----------------------------------------
7 v7 L* V1 W, c/ d5 Q2 V" Fwhisper 我用的命令行,faster-whisper 我用的是python。
8 L7 }# o! E8 o0 z! D9 a6 d下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
: Y+ D7 W+ C4 ^9 W$ _% B% i |6 Y6 T: Y J+ |1 v
----------------------------------------6 d" t) x4 S, z+ c4 a0 T& t4 o! u
4 g2 x/ q3 r3 Y3 N
from faster_whisper import WhisperModel
9 ^, @* [$ q" V u% Y! i w6 h* c; f' Q
model_size = "small"8 `+ D g5 C V% x" B6 D2 R
+ x; m+ a- r/ C& K z- B
model = WhisperModel(model_size, device="cuda", compute_type="int8")
- F$ U1 }7 j( @9 y) I( `7 M' Q! S. V8 k3 d- v
segments, info = model.transcribe(
9 U4 p6 J3 g% v8 d% a$ i sourceFileName,
$ x3 T' T+ {/ t6 i- r beam_size=5, ( {! h& o" N% E! _
language="en", 2 Y# y8 @! U) L
task="transcribe", : p* i3 M3 B2 U+ t4 a, |& |
word_timestamps=True, $ B! f8 w4 c& K+ G: D6 a
initial_prompt = "Hello, welcome to my lecture.")
: N! S& g, u) v* t6 p- _7 g) _+ k
. B2 Z4 g. ?' _4 d2 O L' S5 M, qfor segment in segments:% G8 D- E% G! w3 ?' g
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))# ~3 g; \- S) T+ V( F. h! F
9 C0 g% l! Z) ^* j/ @( @
for word in segment.words:9 F! m$ e7 v" E, E Z' a
( X$ N7 c4 r& z, K% j* U) J----------------------------------------
2 N+ S4 T" s7 X& T5 b
$ N" M* ~* P0 J" ~代码说明:
# P, M$ G1 P0 j2 T" E1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。0 ~) p* _, j; S- t. T! V, v
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。4 E3 X8 N- T9 \& l* d e8 [
2,segment 本身是很粗糙的,做字幕勉强能用。, |4 ~! N8 w7 ?0 J
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
8 p) X. J( d* A9 r; `4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中# {+ I1 B% k- z; S* a# y& m/ D* D! y
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
7 e- K* A& E& Z4 R n5,model.transcribe 中参数说明:7 ]2 D4 C2 ^: H8 J
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数: p, c( f7 R: r0 w4 S
其中
# O( D2 M$ |/ q$ v- z word_timestamps=True,
4 @1 L& k( d3 H* O* C保证了你能拿到 word,否则是拿不到的
# a2 c$ Q) _- l# L initial_prompt = "Hello, welcome to my lecture.")8 {" |! ~1 _* I1 {' d1 l
保证能尽可能准确的断句 punctuation,但是不是决定性的。6 n, `) V9 v1 ?1 ]
其他参数可参考源文件:
6 z4 D o" |- I* ]( i9 |8 D$ k6 Whttps://github.com/guillaumekln/ ... isper/transcribe.py# r+ Y- c. N9 G7 O- u
152 def transcribe(
) g9 d2 a- D* m0 `0 N. Y从源文件你可以看到是支持中文的句号断句的。
: I7 K# c. z+ A9 N. W
$ q. {( |* h8 ~7 ]6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
0 ^: i% K' v3 Y6 C4 {- r0 _7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
- z6 k# {, j' i" e5 e1 I/ E2 |8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
. @/ n0 ?$ N- f3 i1 D1 Z9 ?; w& d w+ i, O4 d0 C: S5 f1 f
: ^2 _! n: w1 T1 j5 P. {
' p3 W# j/ C$ S$ w* N( ^1 O
|
评分
-
查看全部评分
|