爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
/ I* @0 o8 `# x- u' t! I4 k& e; m' |
+ z6 K0 Y# h# h: q
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
5 h. D8 `- q5 j2 d/ F
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
- ]& b3 O7 w' y @! C5 a( ?0 c
----------------------------------------
$ C, M/ m- f" z' a. H1 ^
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
+ x% C: P; a$ ~+ Z
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
6 M5 ?# `. S a8 y' Y$ Q9 q
----------------------------------------
- Q. p7 J, \8 e# b6 X
https://github.com/guillaumekln/faster-whisper
( N8 u4 D4 z1 m2 w& w
安装如下:
0 Y. N4 a; R0 N
1, Windows 10
% Y- S/ q5 a* C" }4 @9 u
2, Python 3.10.11
% W6 N+ m% i e3 }
3, CUDA 12.1
8 ?) _ T6 D( r* N% v6 t
4, 在python 3 中安装
' P' `, Q; \( T7 h; ]. v
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
; {9 ?# d* x0 R7 a A) e$ n! y
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
8 c9 {2 T" x: l& ^2 z' ~
5,pip install -U openai-whisper
0 O9 h! r! \' J9 }# n" q9 M
这是向whisper 致敬,可以不装
+ V' v8 o* w; N7 a! V* y3 a
6,pip install faster-whisper
3 f: a" J" p$ B5 y8 |
----------------------------------------
: a2 y2 y4 o9 `2 d% w% R/ k
whisper 我用的命令行,faster-whisper 我用的是python。
5 A- Z% M# o: C* U
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
: O0 f: {' w5 u2 t
: l: q! f7 P+ a/ q' {; z4 p* u c
----------------------------------------
. d G5 n8 d* o7 M4 g
$ B6 p. {3 }8 H' u0 C/ w
from faster_whisper import WhisperModel
3 b% {- j1 X+ b, k
5 e) b* q- c* P* X& r( E1 F
model_size = "small"
+ E! k3 G8 E7 a8 s( i5 [
/ b9 t, E& {0 a0 D; _ l; a
model = WhisperModel(model_size, device="cuda", compute_type="int8")
& f# A( ?, F) [4 |, l
/ ]4 F# D1 C( c! Z5 A7 M7 F
segments, info = model.transcribe(
( l) b/ W0 d/ m
sourceFileName,
2 E$ s4 y B* H( z2 O
beam_size=5,
5 S6 C% N8 r: r
language="en",
5 B6 s) [$ O0 C! x% N( k
task="transcribe",
0 i9 K7 I( \5 I6 `+ o# Q
word_timestamps=True,
7 P3 h& V7 w9 W* |
initial_prompt = "Hello, welcome to my lecture.")
, {: o5 h- ~* Y6 Y
' B8 m7 x& d) k( W; B! C
for segment in segments:
t7 C) f0 z s" b0 D K0 _
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
3 \, H/ Y. `8 e: y( x; D
1 e6 F. C; S/ [7 Y) l' L/ @
for word in segment.words:
% N- v9 v, Q5 }1 t/ q2 B
/ q0 X: L0 W# c, P) t
----------------------------------------
8 \" x C5 X$ @# _" ?8 \4 g7 W
5 T! i' h$ G( C. K: a
代码说明:
, x( m+ m" K. H: d$ r
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
/ S; o5 S3 c! F: z# _5 u9 V, K. v
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
6 B2 v5 ^% J2 p F! I( `
2,segment 本身是很粗糙的,做字幕勉强能用。
/ l$ N! ~7 s( d, P+ f6 v
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
; ?0 G1 x F& a$ K( X# O8 c' c- O
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
/ @5 I e3 f" d9 d
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
6 l/ j( O! Y* a% ~2 R8 {
5,model.transcribe 中参数说明:
% s1 x7 s7 t5 V2 P* {) |$ o
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
, j+ \' j& _6 ~: \
其中
$ A) Z& z" F: Z( s
word_timestamps=True,
5 P, C/ [ i: @/ N( e" O% v
保证了你能拿到 word,否则是拿不到的
0 _7 s4 v/ Z: J( w0 C- U' h
initial_prompt = "Hello, welcome to my lecture.")
1 D' y0 |3 O5 G8 }0 i* T) U
保证能尽可能准确的断句 punctuation,但是不是决定性的。
, [9 N* W* `! Y6 Y) ]! [
其他参数可参考源文件:
9 f2 I+ t1 W( u; i; {
https://github.com/guillaumekln/ ... isper/transcribe.py
# C4 c) V4 s) U, c3 ]4 M
152 def transcribe(
2 M3 ~3 X9 {5 D+ W4 n3 Y0 v+ }
从源文件你可以看到是支持中文的句号断句的。
8 x7 x( j3 U0 J- s* a5 h! k8 `: h2 u
7 ?( v, |1 E' i8 @: y; ]
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
" z( d! \9 `$ w
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
7 D3 u6 F& f7 s1 M+ T
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
" c8 [5 \4 Q6 v( y
( w4 Z+ U( R/ L: O9 Q) X. M
% z2 ], T' b5 T! ]7 h# _ `
6 C2 s9 }% Z. N7 E i$ @1 G
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://www.aswetalk.net/bbs/)
Powered by Discuz! X3.2