爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
, h; L d0 d7 p* K+ T
9 v/ A1 D" i) D w
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
& a/ ~, U; [8 h2 }4 K
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
" E% ^" [; l% G" R( l
----------------------------------------
* ]. a& q& D7 @ y" v4 E' w! F" m
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
5 {. D: I4 v) q* A
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
1 u8 k( V! e. f
----------------------------------------
" D8 m) E6 A( H1 g( L8 ~9 A- @/ m
https://github.com/guillaumekln/faster-whisper
0 [2 p; E ? S2 h* T! ]! d
安装如下:
. h, H/ h" E+ V8 q# }
1, Windows 10
* o% T0 Q5 S$ p& y' g
2, Python 3.10.11
" }. A1 }3 F2 U. ^& x! x" N5 S
3, CUDA 12.1
" z' d3 z& N* R& z: Q
4, 在python 3 中安装
4 c. O5 k' b0 j( D3 }
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
" v d/ H+ M4 p1 _) T$ Y
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
. p+ J8 ?" L0 X) P
5,pip install -U openai-whisper
6 s3 [* T! P+ S5 ]1 t& W
这是向whisper 致敬,可以不装
9 B8 a d6 `% M2 ]3 w; b: T& }
6,pip install faster-whisper
/ }1 I& x4 o2 X& [- C3 t7 u
----------------------------------------
4 s1 R r* v5 T
whisper 我用的命令行,faster-whisper 我用的是python。
& W, x D8 R2 W9 t: C& P
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
, G Q. E8 L: F R' h( S
( [* K; \$ K1 a# T+ E! J# e& R" w
----------------------------------------
8 a9 h; v2 P4 f* N; a/ W6 I+ x
; [& D/ g' [+ I" K6 k$ t
from faster_whisper import WhisperModel
( T+ S* m* D) W4 j2 g7 i
9 E0 _0 s1 J% h. z6 ?) b2 \
model_size = "small"
( O1 I7 z0 U- P- R" R+ G4 ]
. s1 f1 _. z$ d& m! M" s
model = WhisperModel(model_size, device="cuda", compute_type="int8")
( c! H2 k( h% `8 x) l
/ i8 w1 Y8 N" F
segments, info = model.transcribe(
+ C: u% v9 {, y, K! z
sourceFileName,
4 \ k: S) G* X0 n
beam_size=5,
( F5 f4 U7 |- }+ z! }1 L
language="en",
: d0 V, a% A+ Z. J$ t G$ ^
task="transcribe",
6 _/ q0 `, b3 T
word_timestamps=True,
6 I/ ~3 e2 |) w& u* @5 p) |# S8 d& }" u
initial_prompt = "Hello, welcome to my lecture.")
! r4 E" v: [2 D2 `. j! l: g" G
5 x; D1 M) [' w3 k
for segment in segments:
: Q7 [# x. B" T( B
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
_4 h5 w$ L: F2 ^) z: |' k& j" @
h5 s) S# O" k9 P
for word in segment.words:
3 B7 T6 E8 w+ f4 o
+ h+ h7 B* |" O7 I* ]( k2 I' i
----------------------------------------
+ Q' a1 c: K! @( Y1 ~
! l5 v O* y; t% n1 d5 V. L
代码说明:
3 h9 c s z; S5 l0 V1 T6 b0 F
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
( z$ \0 z7 k$ `1 {1 z/ S+ T" j
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
4 C# ^( ]' \0 S
2,segment 本身是很粗糙的,做字幕勉强能用。
4 V/ l- w: O6 U" `9 ?) R8 A! i" b+ ^7 X
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
) Z. j- C: K+ ~, m
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
- P0 C0 c/ Q; s$ z0 c
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
! f/ }- E! X9 `8 p! e8 A h* d
5,model.transcribe 中参数说明:
5 Q8 `" p) K/ s% {; h
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
! R S* a! j8 b, p
其中
! h' R3 T$ @( C& j: x% [% s% ^# W
word_timestamps=True,
. C; y" p" v. ~: ?
保证了你能拿到 word,否则是拿不到的
3 x/ o% W: b( P* d/ E
initial_prompt = "Hello, welcome to my lecture.")
( ]$ ]$ [* I$ j- Y+ D a6 y4 l
保证能尽可能准确的断句 punctuation,但是不是决定性的。
: t/ z5 p$ j! h" q/ A& d* O
其他参数可参考源文件:
" z- o; b+ Q" w9 E
https://github.com/guillaumekln/ ... isper/transcribe.py
% Y+ f) V1 d: ]) [5 z- Q0 P6 G
152 def transcribe(
) G9 ?! z5 ?% O3 k( ^# v0 R5 y
从源文件你可以看到是支持中文的句号断句的。
& f) P, l! w( `% {. f
8 Q1 t+ ` c- v7 u; ]
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
: Y9 Z4 `# Z4 L
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
& d( Q$ X! m- s, l; n
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
- o) f/ l7 g% ?: G, S
, c1 K) w( ?; z) F/ i
9 `' ?0 g6 `% k4 B: U. I
9 m2 p) X$ n0 i9 e$ _, c( @" v
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2