爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
' v" E. ~$ o: X/ m ]
|1 n5 U6 [1 i6 p
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
% y: D; _% [% S6 [% n
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
* g6 R9 {" t. b8 l: A, u
----------------------------------------
% B! q" H9 f, L- o8 P# F- E2 P- n+ r
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
/ L- ?4 |, P3 f. F9 A& Y4 y& ^ X
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
5 X1 L* O+ C. @; B8 x+ I# `
----------------------------------------
3 {4 ` n1 P5 h+ V4 }. P
https://github.com/guillaumekln/faster-whisper
% C* H' h- g7 z" Y# r, z7 V
安装如下:
R6 Q, [/ T* n9 B" X0 i9 p7 y6 C
1, Windows 10
4 E0 _, }: k, O( v' y
2, Python 3.10.11
# J4 M! O4 N/ b1 _' y5 v1 y
3, CUDA 12.1
: E k/ Y0 S4 b, H
4, 在python 3 中安装
( n- Z- z- z2 C, s5 s
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
1 b% M8 a7 A* N2 Z6 u$ N% A
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
) F& f9 p* A1 q3 v
5,pip install -U openai-whisper
8 `; v7 l: ]9 S; a8 k& s
这是向whisper 致敬,可以不装
8 l7 b) ]3 q1 D& N
6,pip install faster-whisper
# C- w5 R" j' Y8 C0 c
----------------------------------------
3 D4 }. V5 Z! Q7 n4 {
whisper 我用的命令行,faster-whisper 我用的是python。
8 a( k$ z Q( @0 z: q/ I+ c
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
+ ^" q. w0 ?4 Z0 g; f3 I
?) T2 W1 V( D3 C9 J) _1 h
----------------------------------------
# P7 y1 K) g- ]8 F
0 w) W0 ^5 `: V! p I- s
from faster_whisper import WhisperModel
4 D, ^$ t0 Q1 Z( E4 R; G
* ?% d: b, m4 r4 |8 k
model_size = "small"
5 [- o% ?4 U( e( d' z T
4 d2 D) o- S0 T K! f; @0 E R
model = WhisperModel(model_size, device="cuda", compute_type="int8")
* Y, q; Q/ E4 b1 v4 h6 Y
3 P: [8 z f2 X- ? D
segments, info = model.transcribe(
1 B6 i, Y1 N# ?
sourceFileName,
/ w( Q( z Q+ I# z6 a$ i$ k
beam_size=5,
: H; g1 g6 O, K8 r/ j
language="en",
. ~! J/ U) r% i6 Z8 J
task="transcribe",
+ L+ Z j" o5 l3 P! w
word_timestamps=True,
' t' z( f, O2 m# P
initial_prompt = "Hello, welcome to my lecture.")
* G k; D' |% C( N
. h3 C! j9 R* D
for segment in segments:
6 Q! _7 L' ^2 m4 J& @6 m1 C: l
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
* q8 u$ G6 x# b B
% ^5 n: I. g6 O2 m# P: ?5 Q
for word in segment.words:
) ^- G' F2 W2 I# h+ E
$ ^ ^8 m' k& ?3 L
----------------------------------------
" _" Z1 {! x% y2 f
7 s. r2 |3 k4 _
代码说明:
2 q' V* H7 e/ z# Z) _4 t
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
0 L3 ~. B$ r: A$ ]7 B$ T; g, Z" r
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
9 E2 g2 [% h6 ?+ t' q! t2 o: N
2,segment 本身是很粗糙的,做字幕勉强能用。
M2 Q T9 w: R
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
/ [( h( C: _1 B! `% w
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
& P) @! T$ q$ `, G0 _, K& p- a9 i
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
6 U/ X8 G+ u4 j( A) u' f
5,model.transcribe 中参数说明:
3 X2 V0 i6 |9 Y! c5 p
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
2 q# ^$ Z: D- W3 X6 T* }6 |
其中
) W0 |' p- u% p: J+ }1 ?- Z: \/ u
word_timestamps=True,
0 Z4 ?3 N+ f* `* Z, Z4 J
保证了你能拿到 word,否则是拿不到的
( Z1 V6 T3 H7 L3 z+ Z
initial_prompt = "Hello, welcome to my lecture.")
) W8 ~' c% b0 s" }( _, X
保证能尽可能准确的断句 punctuation,但是不是决定性的。
" f% k& ^# s! Q
其他参数可参考源文件:
( Y! {1 X+ {/ x$ E9 ~/ [, F, U
https://github.com/guillaumekln/ ... isper/transcribe.py
* K6 P$ x# k3 i' A7 R
152 def transcribe(
/ Y, a4 R4 \9 |( d6 E& d
从源文件你可以看到是支持中文的句号断句的。
; O1 Y/ r. [; n7 U
; t' q# o. W. B" B2 t
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
- p3 r6 B( d$ T2 ]. s- r( M. ^
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
0 G- n3 u' s+ _1 n$ {3 R0 b
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
* k) y8 t- Y. S" c8 M' j
0 V q# B: b4 f! ?. W; w" V
% r7 ?4 G e/ O
# c' S3 `6 n E# w# z. N C
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2