爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
! R# \, P2 i& B1 }# f' |
$ [) W5 {8 z, n& o) M
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
+ e* k {$ I& N6 k) V
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
( ?* J& G7 a8 [: A+ i- b
----------------------------------------
2 i/ M: z% C* B" {" {
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
2 E" {5 Z4 h- k4 D" s4 X
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
c6 r' a6 x; ] T8 F, A- i! L
----------------------------------------
5 n! @/ g7 a) ^$ y
https://github.com/guillaumekln/faster-whisper
7 Z+ P0 O+ G6 z9 C, K
安装如下:
% J3 T6 f% {- F3 A2 n& g2 e
1, Windows 10
, d0 c: N1 P5 i- k) R I% g' v
2, Python 3.10.11
) a5 a* F! E2 `% C* u
3, CUDA 12.1
9 O7 @ `6 U$ S( `* W# i2 b$ k
4, 在python 3 中安装
/ U& W& c2 O5 q/ Q; Z6 K
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
) y) [) G( A2 n) K% k9 s) @
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
( Z6 p$ C9 |& `$ p5 _2 O
5,pip install -U openai-whisper
) t5 z# H5 F& H. x2 B6 B) s
这是向whisper 致敬,可以不装
" [7 s* ]; [7 K2 t' U
6,pip install faster-whisper
" [7 S% j6 [8 Y0 k Q
----------------------------------------
! ?& x/ x% v5 T$ M6 _( L& w
whisper 我用的命令行,faster-whisper 我用的是python。
) f$ [# a9 K% J; B9 k/ K# e1 R" y
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
" z1 w% n4 m* i4 _+ o
/ k! [# Q4 E6 t. l* e1 y
----------------------------------------
, l* X" }2 U- B' {# G/ w
, }2 l$ B2 M& ^8 w
from faster_whisper import WhisperModel
+ e% r: _0 F9 Q7 W6 e( V$ y8 A
8 Y6 v$ S% o- X7 v
model_size = "small"
" g K* F: Y% ]% }
6 V0 n5 Z; K, S, x
model = WhisperModel(model_size, device="cuda", compute_type="int8")
4 c& k( }* O: {/ U
# b) ?' ~" }; x' P! W7 E
segments, info = model.transcribe(
$ M3 w, D# ~+ ~' S: d+ ?
sourceFileName,
2 x$ C5 p3 G0 ^ C' J& y% J, A5 n
beam_size=5,
5 P! m& [2 y2 I4 L. j/ u. T. g
language="en",
5 f) R/ T2 T8 o0 }2 |5 r) v( e
task="transcribe",
6 u! @+ L ^/ j+ l* E9 s% X
word_timestamps=True,
4 o! K* M3 a8 ~/ f" n( a( i
initial_prompt = "Hello, welcome to my lecture.")
5 P' f% K4 P$ g2 X0 k7 p
1 a( d6 G) q( R8 P5 ?9 ?9 M: u6 T
for segment in segments:
1 W$ |6 ^0 I. s7 D) k
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
# }& x+ R+ f. y: P+ [6 O& `
3 K% I( }3 a3 z; p& P; }
for word in segment.words:
9 X8 a7 ~1 O. y/ v9 O9 I0 l" n
: Z) w; Y" \1 Y- N
----------------------------------------
. s& S# B/ I& e$ b
- a' K8 t( D+ w8 r3 v
代码说明:
! C2 j$ U& K3 n
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
8 n5 L. ]& x3 C: ?: n% E# F
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
" G. f9 d$ D: e# J7 o. D4 a
2,segment 本身是很粗糙的,做字幕勉强能用。
! w: _: J: Y9 w7 {6 _9 |; p, b2 c6 N& Y
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
! X; e ?* R! D+ I& L( T& s
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
8 i6 _ I: B4 n8 S& k v( r
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
) F1 h( D+ t3 `3 y& _. W0 ]
5,model.transcribe 中参数说明:
6 b' W+ z5 u9 Z) i$ c$ V. q5 e( {
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
( M0 e2 G3 T: Y @$ F# i9 k' |! I
其中
; h3 K8 u: E& ^! r/ ]' w4 S; D
word_timestamps=True,
4 Y" m, ^$ P# V6 C2 a- ]4 w+ S
保证了你能拿到 word,否则是拿不到的
- }& T$ Z3 M& G& _, `% X2 g2 L
initial_prompt = "Hello, welcome to my lecture.")
) j$ L& D" f$ L1 N W. Z/ ~
保证能尽可能准确的断句 punctuation,但是不是决定性的。
: c) Z4 d. b& G5 {( `5 A: ]( S( {% m
其他参数可参考源文件:
- V) Q* W+ X% g* w4 r/ y
https://github.com/guillaumekln/ ... isper/transcribe.py
- y5 S* c2 _) E! O) p: G
152 def transcribe(
- N* ~# c3 V1 i6 V
从源文件你可以看到是支持中文的句号断句的。
1 s a5 b8 I$ ~* g$ m) V ^
" B: u9 R8 Z0 l1 q7 A
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
) R/ R& I n) f! Q
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
8 n# B, j4 I6 w7 b7 V
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
4 L- {) z/ J7 S
2 \( K) g6 e; w! A# n4 N. Z
& W% e( F! v4 _0 |3 }+ d
9 T' D' q$ N m( {9 k
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2