爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
, B$ M& e) z+ t2 [+ e. _- B8 x
: w& I" Y/ T. G0 N1 G8 X! R' `% D
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
! S/ f" T# b0 ~
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
& ?4 b1 S' k* e1 x2 _4 s
----------------------------------------
8 @9 Z( K0 P4 O8 J6 {
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
$ s/ p0 q; n' h) J0 E5 I5 Y- K
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
& I8 j/ A* ?) ^1 N5 ^7 r- e
----------------------------------------
0 X u1 G3 n. M7 S# t
https://github.com/guillaumekln/faster-whisper
- }( b0 g7 m! b% v, Y, O
安装如下:
1 _) W$ ? x7 [' W4 Q; f
1, Windows 10
: K& L9 v- p' q5 O
2, Python 3.10.11
8 H4 X+ K* l* L0 |& x% W$ ^
3, CUDA 12.1
, P J, R% e. S0 [" }
4, 在python 3 中安装
- f8 \' `* c6 o/ h+ M# i# {$ }9 h
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
( m4 H6 q0 h! J; S$ E: Y
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
9 ^; u+ m# V8 A( I- }- i+ ]
5,pip install -U openai-whisper
, F* }0 w6 L) s1 w/ r! L7 A0 T. x0 \
这是向whisper 致敬,可以不装
# O. a, {' K4 d* T
6,pip install faster-whisper
" C% ?% s, {% t* p
----------------------------------------
& @' Q/ g; ]8 a; _
whisper 我用的命令行,faster-whisper 我用的是python。
. e' M$ C4 {, e" B& ?
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
5 G U( I; e" {; B' m( c) a1 ?6 o
/ S6 m9 q0 A+ J# @/ Z) y9 R
----------------------------------------
: d. c' H) s& ~* v* P8 `3 L/ O- O
: R6 ]7 U4 ~" k" g( R
from faster_whisper import WhisperModel
& f# [4 }, ~" R
& [- V. D" X) e$ ]$ r; Q" q
model_size = "small"
+ `6 X. H0 z& H6 W7 n! d: L% i
9 ^# j( P9 p$ r; O, O
model = WhisperModel(model_size, device="cuda", compute_type="int8")
8 \5 c* z6 o- d/ F, [! u, e
6 n+ N4 E q2 I. ~
segments, info = model.transcribe(
8 j' g+ {$ x; Y* c
sourceFileName,
+ b" y* B. r& F6 B% U
beam_size=5,
, u7 h# L" p6 Z! m; {* R1 O1 {7 [% O
language="en",
. X, U; [% x. a) z, Y) v
task="transcribe",
# _! u+ G8 s; p. W, _3 x/ z
word_timestamps=True,
1 U5 U, N! `( ]3 q0 s# W
initial_prompt = "Hello, welcome to my lecture.")
3 ~6 s) k0 L; D; {5 F
/ ~, k) G8 W8 s- q ?
for segment in segments:
& Q4 H0 [* U" q. h
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
: J7 p/ _4 e; a) @' i6 |
; r( t2 z3 E( l* ^/ ^
for word in segment.words:
" [) F( l! p; p
" D m! ]# H; G; Z8 t" H
----------------------------------------
4 e8 Y( V ?- }) f5 c* O4 j
8 K | p) \; u
代码说明:
4 L+ p8 a. t) y3 a+ C) ]
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
1 {5 U9 h6 U+ w# t- E
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
0 s; n$ g0 e' G
2,segment 本身是很粗糙的,做字幕勉强能用。
6 r9 v. _4 G }; H5 ?$ N9 I( @
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
; L/ t% d$ m/ w. B$ L
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
8 O9 n4 s: n, }8 Z
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
- l: o2 ^) B1 l& {8 ?- _
5,model.transcribe 中参数说明:
4 R- u( B! y8 `5 ]
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
6 H: ~* v; I$ Q$ s+ u6 k
其中
8 h8 q( N7 G+ f% q" W. ]
word_timestamps=True,
4 {4 j, j& P U" F6 H
保证了你能拿到 word,否则是拿不到的
( L" r# ]! b" O* ?- u
initial_prompt = "Hello, welcome to my lecture.")
0 B1 Y L5 Y: B8 g9 @3 u, a$ g
保证能尽可能准确的断句 punctuation,但是不是决定性的。
4 e% t' E. G% \; Y: N
其他参数可参考源文件:
6 }0 d- f# n$ h& V
https://github.com/guillaumekln/ ... isper/transcribe.py
3 d, i2 l& G$ A) n' T4 V& h- Y
152 def transcribe(
" s8 s: e5 R( j8 H9 Z$ b6 I6 @' U( q
从源文件你可以看到是支持中文的句号断句的。
8 b! {& _9 Z/ Z' D. y& K# i
9 _/ T* W! M: ~* H( y6 ]
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
( [' s# z: {3 j' D/ C
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
1 e/ Z+ W6 j) e; @' ^# R8 y, e
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
' q& J0 K5 Y1 O6 g+ V% V$ C+ o2 m
1 u6 d, b6 C+ V
" T& ?0 b8 a* O4 Z! l
2 m* q. f0 x+ _* t4 U" z
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2