爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
# \) I' Q* X' d) J/ N/ R2 }
" [7 A2 I; s. u3 y
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
/ Q2 K/ ]# ~. D8 x1 a( `3 S L5 {
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
0 V& d1 Q0 h& ?$ K0 b2 \& b; _
----------------------------------------
7 F& [' @" ?4 K+ `; F2 g
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
& A( r$ x. P* I) P
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
3 ~4 S1 C, @* ^
----------------------------------------
1 P, A2 O# ]1 ^) u; g+ M8 M
https://github.com/guillaumekln/faster-whisper
+ n( G7 F$ r5 S; S
安装如下:
( W: Q$ T9 h. Z
1, Windows 10
6 `+ S4 w2 k3 C8 Q0 [! A
2, Python 3.10.11
9 h5 _/ G+ [) E/ ?8 m
3, CUDA 12.1
P) N ]/ ?4 m8 h* _4 ]+ W. Z" j
4, 在python 3 中安装
+ K0 q8 f* U; Q2 l: M
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
; T6 S& L1 \% y3 P# k! G
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
4 h; T+ |: ?' X6 `5 L1 L L9 _
5,pip install -U openai-whisper
" Z6 b8 F- P6 K
这是向whisper 致敬,可以不装
' V6 }) [8 G8 M1 ?8 X* o
6,pip install faster-whisper
1 l* E" q2 T9 E; }1 Z7 g6 x7 ?
----------------------------------------
3 P* r D# W" t
whisper 我用的命令行,faster-whisper 我用的是python。
Q3 U1 S7 K3 L7 S! A
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
. ], Z9 m4 j# j+ E- o
8 \7 q: K/ G; f+ G7 ?7 R0 l* |
----------------------------------------
: J3 p8 n/ F" j9 o) X
9 m% |5 M9 R2 A1 l
from faster_whisper import WhisperModel
1 N* g# Q" V5 V) V' {
2 s3 z7 S: ~8 o& O" D
model_size = "small"
& \7 S1 A$ ^ J1 L5 R
. X! f1 a3 k5 W; d! ^% B/ C+ G, I9 m
model = WhisperModel(model_size, device="cuda", compute_type="int8")
# g# i5 e9 j. S7 W( o
% T, n% Q9 f' {4 S1 P5 R
segments, info = model.transcribe(
) w! L6 C0 E4 {# W& G' Q9 g* H3 a$ o
sourceFileName,
$ s# \7 w; `* k% c t; l) l, G& \) p
beam_size=5,
8 m- ^2 g/ _& n/ N# i5 X6 E! V& O2 m
language="en",
; c0 n! e! Q6 C3 d+ B' Z! |; \( C: X
task="transcribe",
: ?# `, [, n3 ?. E* a9 E/ v' q
word_timestamps=True,
7 L' D0 V, d/ M/ q+ h- s) A3 H. N, |
initial_prompt = "Hello, welcome to my lecture.")
9 U9 _; n% d: [
4 z4 d) I2 D/ ^
for segment in segments:
$ S7 {9 a$ e% n0 k# T
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
6 Z" _7 w% O* I1 L% b- P/ K/ Q
6 s. L7 \% }! \' I
for word in segment.words:
$ S! N2 e- N1 M+ x: N* Z: r
* m$ K0 k$ Q, H, r1 S. P
----------------------------------------
' M( z: T1 h4 v. E+ W1 T
# F( c' H+ i% i2 `9 z( \5 c% y
代码说明:
: P2 z2 r! @+ Y/ r( c( M3 L. o
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
3 \( R* [+ d% d$ I: u2 s
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
. V5 ?! P. \; _6 B
2,segment 本身是很粗糙的,做字幕勉强能用。
7 g8 b( b6 e) h5 E0 R4 ]1 A1 d2 H
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
% C5 |0 d+ K2 ^ f3 L
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
8 ~. I+ E$ }2 [1 J
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
2 G# m( k6 o1 c. W3 O
5,model.transcribe 中参数说明:
3 w8 m( X& E; Q. q4 G8 ?: I8 Z
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
8 D4 w# P& d" w9 R" h- l `; g
其中
9 q9 j7 t8 B% T
word_timestamps=True,
# K8 f _. y( V; N! G) c
保证了你能拿到 word,否则是拿不到的
7 x2 o f: C1 w4 m( f! n
initial_prompt = "Hello, welcome to my lecture.")
% G; o$ K6 e' k P) U
保证能尽可能准确的断句 punctuation,但是不是决定性的。
, @$ C# @0 c: h
其他参数可参考源文件:
' a4 A' P& ~# q, o- d* a
https://github.com/guillaumekln/ ... isper/transcribe.py
* n6 T! ]( F1 C. @. Y
152 def transcribe(
0 _0 G1 A0 b9 {5 }5 o
从源文件你可以看到是支持中文的句号断句的。
" X# l9 Z6 @1 h9 Q/ ?6 `
) \5 Z9 g6 ^+ x* x
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
[' n! K4 ? h! F) m$ B7 _
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
. g3 I# o! \" D
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
* h {: t( d, {. x
7 F( D- i8 \# B4 Z8 A
6 s! H$ e o+ t( u
* u' Z8 ^2 Q3 [; k n) T. {" |! p* x
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2