|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
' q" T' j) P1 I) T" v& [ ?; w% y
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。+ [1 F: R) K! @6 T; z$ A
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。1 {4 g2 B4 T' ~ a Z4 n
----------------------------------------% W* e( L- B% u3 X; E O4 {( z
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
+ R: V8 l% K4 @: ?& ~7 {* E- S在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。! C- O& O. h( l* d B* [* L: @
----------------------------------------
/ {* ~; h1 u1 v' ?7 Khttps://github.com/guillaumekln/faster-whisper
% p; K7 H5 N8 A" P, m; l4 ^安装如下:" N9 ~$ R6 c( _% ]6 y0 \
1, Windows 10
) m/ @$ b, E T+ u6 ]! p) J* s2, Python 3.10.11
6 X0 C/ X& W4 c% i1 l/ u3, CUDA 12.13 ]; L- B5 z' H- P7 B
4, 在python 3 中安装2 v) b' I X1 {2 n8 j
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
9 W: Y) J( l% J7 Q8 m3 j9 c这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。' t% ?( b; k6 u3 c0 K. r
5,pip install -U openai-whisper
& h" J, v& C# t" L4 X: [这是向whisper 致敬,可以不装6 G: P4 j; B+ U9 H/ z
6,pip install faster-whisper
- d9 H6 p- U+ v* A* b----------------------------------------
6 a1 W$ O8 o; Q$ ~& ]! `) Dwhisper 我用的命令行,faster-whisper 我用的是python。
# j- Q/ p5 W, M4 U2 Q J# C& I下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:! C' [! g: O3 ^! Y8 E, I
+ q; M% Y9 c4 u! }/ f g7 C; K# l+ B----------------------------------------: Q3 S, a0 [& q9 k, y5 Z# A# L
4 U! P% W u. o+ `: ofrom faster_whisper import WhisperModel
$ \) `9 H* t2 X' O' D+ n: y' p5 D
& C* z" g! g; K+ F8 u) E" D" g6 Gmodel_size = "small" I, n( [) q( @! K# c1 i- d
; h/ B1 e0 `1 S" \6 Mmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
* G- u. q9 d @6 K+ p: n
8 R% Q" C+ F" z. s4 hsegments, info = model.transcribe(/ p( [9 O: e7 Y6 x! O. b/ K
sourceFileName,
5 t, p0 x* O }1 r beam_size=5,
* \9 z/ R5 _- g; ` language="en",
8 B: Q! Y7 I; m& e) P$ R task="transcribe", 9 W9 r2 V1 g" y9 v) Q
word_timestamps=True,
! [( g( G8 O' ~# G+ C9 S7 e initial_prompt = "Hello, welcome to my lecture.")7 u/ j7 I# o( j, T6 l3 l
# q$ t4 t( k8 f$ O3 Z0 e! T {, @' s
for segment in segments:
6 o& y4 J2 r' U print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))+ C# V( s+ l! C3 L
8 o3 Z+ h5 m2 c Z! C
for word in segment.words:- E! F# ` {) }9 _
- R' [) f, r' q9 d3 I$ X; s; i m
----------------------------------------
3 Z M' k1 X* F! {+ h( t+ Q- W2 w, u- [" R) A* X F
代码说明:
! R8 M) M9 V* I4 S1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。+ Z! z) s. i+ Y( T8 l3 r8 E
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
. f& S/ s0 Q- Q+ _) g1 t+ ?2,segment 本身是很粗糙的,做字幕勉强能用。
. G+ w# Z4 c" ?3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
+ }9 m( C* S: C0 {9 E4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
# i. P2 I5 i6 D( v比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
# Z3 H6 i0 u1 G+ J5,model.transcribe 中参数说明:$ Q5 f1 @7 n/ F) J, t( {/ g
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数! B1 _; E8 x: `
其中, Q/ z' S d" `
word_timestamps=True,
, }8 {7 c$ d& U' n保证了你能拿到 word,否则是拿不到的
! J) k: \$ s; X$ i& s initial_prompt = "Hello, welcome to my lecture.")/ h1 \1 [6 q( _& N
保证能尽可能准确的断句 punctuation,但是不是决定性的。; `* ?( A5 o4 U
其他参数可参考源文件:) H% h* J% o1 q9 Z
https://github.com/guillaumekln/ ... isper/transcribe.py2 X3 r/ n- Y/ P! Z' s- y
152 def transcribe(4 `8 H* g5 T0 F) j8 `! C! C
从源文件你可以看到是支持中文的句号断句的。
( J0 d: d, ^! L' G: h& \0 w
/ w$ J9 x5 f3 b- U6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
* L0 @7 _) S7 r5 f" }7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。# h: t% ~4 o) {5 v0 A
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
& _) u0 l7 p0 `. F( L$ C% j- |, O% d2 h1 E3 D# X" O
$ |. o) h* M2 ?/ u+ s3 J9 D/ Y, u, u. d; ]
|
评分
-
查看全部评分
|