|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 3 q- w6 l6 N; k# w) A+ I
, E- I; e H- M- x7 i. a' ?% i
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。4 g. C3 u4 _! D
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。! Y, P* F/ w. o* Q: u% {" T3 T3 }7 K
----------------------------------------" u# m+ U" b F1 w3 K5 e
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。4 i9 ]2 H. m8 _6 m
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
0 W) p# ^, q$ p( D8 W1 W----------------------------------------
0 n1 ?1 k: B( @https://github.com/guillaumekln/faster-whisper* B% M/ W# ]9 y, q! ~9 a5 l t$ @
安装如下:* |$ N9 y6 |, i5 E: J$ f) Q
1, Windows 100 G# X" f% z$ n
2, Python 3.10.11
; d% l" A1 I, ~$ [2 I/ d$ H* k9 T1 F3, CUDA 12.19 z+ l* W- M3 {
4, 在python 3 中安装
/ `% a, A: I5 L% ?% K* rpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1171 A0 K( y7 H; k1 _" K+ P% \
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。' c8 c! V% k* N* ~
5,pip install -U openai-whisper6 w4 ?8 e- ?: W4 a: I+ {! S
这是向whisper 致敬,可以不装9 i4 a. m3 m$ ]2 ~3 G7 u w
6,pip install faster-whisper
; M) R7 F: u1 d: a# D+ F----------------------------------------
; k, Y) P* F0 o+ hwhisper 我用的命令行,faster-whisper 我用的是python。
( X# d' C& x" f/ i: M下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:- R: G3 G" ]( _% y, A& \9 K) F
' a6 h8 l! Y! { K, D$ ?
----------------------------------------' y; A7 y2 g, ~
* g; Q3 G/ R t$ v" M: R; f8 _" n
from faster_whisper import WhisperModel
' {0 S- v1 h7 l, N$ p* t$ e
* w9 l v0 c& F: X) k, Xmodel_size = "small", g3 E& ?5 [( o, m9 B$ ?
" A: @. ^; y4 V, T: r* P; X
model = WhisperModel(model_size, device="cuda", compute_type="int8")
/ Q4 Y+ N/ v2 h# b, L0 {& J, w0 Z: j, I0 I5 X) b
segments, info = model.transcribe(, z6 {. ^. I5 ]. X
sourceFileName,
: @! B3 ?& k3 N3 H4 P* ~% J4 H beam_size=5,
/ w5 h5 i3 X5 l/ U) J/ Y" {' P2 P language="en",
0 q4 q* \" e! M6 P task="transcribe", / a( [. @4 }2 i: C2 m
word_timestamps=True,
% s7 k) S$ {. p: \7 k+ q: |. Y initial_prompt = "Hello, welcome to my lecture.")
& E0 t2 z- M1 \+ R" F, b& A& m& f5 S/ h- U6 I
for segment in segments:; D e- U5 T: T: i
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
1 B" b& n/ ~- C6 }
5 _" |5 m/ @! f X" T2 o, m$ @ for word in segment.words:. P, C+ K- f+ z
7 w3 o+ a: B1 [4 O
----------------------------------------
9 t2 {) ?; u3 j* d7 J( c
3 v! V2 ]& Y8 n+ q+ u6 M' \5 u代码说明:
+ C9 e# l+ K4 B* p4 |1 g1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
! m9 ~0 h7 ~% A9 N3 N但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
' p; U# g) f' |3 Y$ B4 r! |2,segment 本身是很粗糙的,做字幕勉强能用。' g9 d' S- @0 G9 w* _
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。) W. T4 W% J1 w, C9 j( q) Y
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
. e1 o- |) @6 E1 l {比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。+ x! B1 N( s- Q! n
5,model.transcribe 中参数说明:
) t3 w& R5 |* y6 h) v, q你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
( d: Y) G/ O. d' w其中
2 @: Y( E- C6 p2 V- ^1 y- o word_timestamps=True,
S6 f$ D4 Z/ O) F# \9 u# x. |- U/ P保证了你能拿到 word,否则是拿不到的. E6 S0 M3 [, Y1 \6 Q0 z# U. E
initial_prompt = "Hello, welcome to my lecture.")
5 [, a- Q& ?/ r7 N- N2 u' H& o% P保证能尽可能准确的断句 punctuation,但是不是决定性的。* u/ Y& a; y" T3 r/ L) N0 [ m
其他参数可参考源文件:- B3 |# b& d" z2 r. D/ y7 T5 \2 e7 P+ C
https://github.com/guillaumekln/ ... isper/transcribe.py
& s2 F. I7 u9 [4 w# c! q' N; _152 def transcribe(
* e9 _4 a) [7 Y) D% E从源文件你可以看到是支持中文的句号断句的。8 y5 u/ q, [8 _/ S
& l3 y1 D5 \# F# I1 W d
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。- X# y( t* D( m- d
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。, u) ^1 ` J! @. C
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。' b+ U7 Y. f( B! o
8 e* n' c; t! A
5 x$ C( t$ A- B* h# g, r5 B: V+ T* o' v( g: k
|
评分
-
查看全部评分
|