|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
j7 M P- y! {0 U8 Z, e% p9 F( t8 Y" P
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
l U# k& F9 o8 s" Z4 H效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。5 k/ m# P. Z3 P: J5 } a4 b# m
----------------------------------------
# ~) n5 e$ m' v" X1 Z- E$ v显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
7 x4 O- U, u/ M) B! R% L在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。( \; |2 k( I" u1 b. Q
----------------------------------------
$ B9 {5 L, n6 j i, Uhttps://github.com/guillaumekln/faster-whisper
2 Q1 H/ w8 b) T: `- X" G安装如下:
$ B) u! a) m, X1, Windows 10
& d! M9 d' l3 `9 _, Q. A1 e( W2, Python 3.10.118 ^+ j/ K a3 r" G. J/ n1 V3 C
3, CUDA 12.1
% { Z+ W; E; ^5 L5 E4, 在python 3 中安装. x4 q+ n- z I. t
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117, Z( ~: Y1 l9 s/ k2 J& X' m
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
/ F" l$ b- @- n2 s) h2 K5,pip install -U openai-whisper3 v# q! c+ u/ x, x% O$ u' P/ w
这是向whisper 致敬,可以不装+ K% l- I: i; w' Q& o: Z
6,pip install faster-whisper9 f4 |& F9 a3 t' D5 k+ b
----------------------------------------
! E" U. r7 u0 S2 E1 W+ v. A. Fwhisper 我用的命令行,faster-whisper 我用的是python。
& `) |0 L+ x( p2 [0 n; |- n下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:- [8 a/ s- l4 z: k. A2 ?
0 j/ \, ~3 T- ]3 m" J
----------------------------------------
# M' p4 f# v9 Q3 R0 G8 M% C1 g* X; E" @: v! p
from faster_whisper import WhisperModel4 L$ D2 d1 A8 M( w5 G& l' ]
" m9 l; N, h% ?" `model_size = "small"
; X/ d# r! A/ p( r8 ^7 G7 m& C) y8 X1 C2 H
model = WhisperModel(model_size, device="cuda", compute_type="int8")
7 N3 O$ W" g8 n. I0 W- i' T" l5 Q* F6 L
segments, info = model.transcribe(7 ^8 u; E' E; C5 p( _; R/ i
sourceFileName,
/ I- w' j; x& _* j beam_size=5, * {4 x+ J C) x9 M7 W$ o* E
language="en",
9 c( A6 A% {8 f task="transcribe", 2 P/ T8 j$ N: c! D
word_timestamps=True, 7 h) C+ ^! w/ _
initial_prompt = "Hello, welcome to my lecture.")
& s& s, q: f* W2 {+ o6 Y: `# C! j8 _$ M/ f Z5 r
for segment in segments: ]! t( H; I( G2 D
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))6 ?; n" D' Q* C V# Y2 Y& t4 T
) L. \; @# e E, N' g
for word in segment.words:
% R# L; j& h& H$ Q+ u/ Z 2 \" T7 \6 L& y7 V( Z2 w% B
----------------------------------------
' K5 u, L b5 Q
4 h* k5 N+ O$ F4 e+ p% `代码说明:, Q5 }% B0 E* y/ |' c* ]
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。3 j- _% ~$ @1 [0 L, E- m
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。) o- T5 t+ c, {7 [5 ` m
2,segment 本身是很粗糙的,做字幕勉强能用。7 u+ C* Z) ^0 b" ?: P. p3 I
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。3 j0 _5 A) P! S- a, s1 s
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
& x. g% s G+ X( f/ s& k比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。. o4 y k' N* j, c0 p! Q: I
5,model.transcribe 中参数说明:
% h& l |7 ?7 h- R/ t4 P你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数/ K" Z5 Q3 d& c3 d* L; c
其中, o8 U4 ?9 A5 c) m0 t1 k8 u
word_timestamps=True, 7 L: u6 y* A5 u3 }9 h
保证了你能拿到 word,否则是拿不到的. ^ x# w0 R" H4 ^) ~
initial_prompt = "Hello, welcome to my lecture.")
6 D( A# m, O8 o保证能尽可能准确的断句 punctuation,但是不是决定性的。2 M, z/ Y+ P# H3 T
其他参数可参考源文件:) t+ K4 y, [1 y# `
https://github.com/guillaumekln/ ... isper/transcribe.py/ H" C% h# ^/ D. v6 [- Y: [
152 def transcribe(5 V' N: S1 t9 A( d+ j
从源文件你可以看到是支持中文的句号断句的。6 X2 r( l) F- V3 y5 |
: N ]' J. C! U- E6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。 u: S; R* C6 C# e+ ^/ z: e
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。 o& t) v& R( i$ n" O" x
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
) U6 U0 o/ J) d) m4 N+ L( S: o! o" `3 w/ o7 B
" ?: r' k/ e' v' o) d! C7 Z' b' ^, g: u; O' f' h( |3 [; h- T$ D
|
评分
-
查看全部评分
|