爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
+ p1 ]0 M# Q* M& _* A
7 y7 q5 V0 C3 B
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
; R$ Q/ v" o: e
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
/ g j* [* e i) ^% s# Y; K% d
----------------------------------------
* M! z- |$ b1 d: H; b# k
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
( s1 l* f) u+ N% E0 U ?' i
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
O, N* i# A; V" F& N9 i
----------------------------------------
: |/ X+ A5 K! Y3 T, s, V) y' B) j
https://github.com/guillaumekln/faster-whisper
$ B. L7 p, z+ e$ B. p
安装如下:
# K. ]( `) Q. R, t' f- \
1, Windows 10
1 r1 ?8 a4 o/ l2 A4 a# g7 b* E# |
2, Python 3.10.11
8 B3 Y" Y* Q; t' T
3, CUDA 12.1
: F# c' X# N' f: j: ? a$ C; R
4, 在python 3 中安装
$ T! Y9 z6 K( ^/ Y' X& ^ c
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
1 ?# u$ R A' ]- p2 Y$ }2 O
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
/ s3 Q! a; B' c `5 Q. J0 n7 T1 e
5,pip install -U openai-whisper
# }2 a6 Y( [1 g ]& {, Q* E
这是向whisper 致敬,可以不装
5 A1 j5 ? L8 x4 \8 B$ t
6,pip install faster-whisper
' y. i% T( Z5 c" S- }8 k$ B
----------------------------------------
% v _& E. ^' d2 ~ T
whisper 我用的命令行,faster-whisper 我用的是python。
; Q0 D, F$ I# d
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
$ T% L7 L* w4 s, K& P9 x
" E8 }: D9 c: Z9 U7 }0 c$ q5 E
----------------------------------------
3 Z8 r1 z2 y0 ~. K$ r$ o: ^
$ G( T/ ~( Y2 n7 Y* [& Y
from faster_whisper import WhisperModel
4 k& `* y; m; J" E7 Y' Y4 w9 Y
+ Y4 q B9 U9 x+ Y
model_size = "small"
8 O0 i( U9 ^5 p) O$ I- ~0 L1 \
+ J8 K1 b9 \; S" ]3 \' u
model = WhisperModel(model_size, device="cuda", compute_type="int8")
- Z. M2 J1 m! I x. `8 T' n& @
, z3 A1 G0 Q* z$ B" G3 @
segments, info = model.transcribe(
) _+ o$ \( x& |$ G
sourceFileName,
& d# a, L; R; X6 y% f6 X$ Y
beam_size=5,
- \5 O3 \( S' n/ b" P- `
language="en",
) F( j3 Y( r+ ]
task="transcribe",
& V4 I# t( v" q9 ]; Y
word_timestamps=True,
% T9 s& _- l0 r! z
initial_prompt = "Hello, welcome to my lecture.")
& b! }# d6 O& f; Q: E: N* |5 ~
& A; f$ {$ f& Z1 K9 w9 b
for segment in segments:
8 b) b9 \; p4 i" I# o! X8 L$ ]% D. D# I
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
* `4 N- z5 c; y l( U) @0 R
# V# j! `4 p Q, m6 t
for word in segment.words:
; k' G) r7 @2 [, F6 }$ S" F) c, Y
6 i# Y2 ?' |8 D9 P2 G8 _
----------------------------------------
3 x: J" [2 W6 {0 |8 F& Z
0 b- r5 a$ I! ]8 ]
代码说明:
! B8 ]0 X, ]1 @9 n/ }% p
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
; Q) z& H, O* R& H1 R! X
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
$ Z: E3 V/ }8 E- O1 u
2,segment 本身是很粗糙的,做字幕勉强能用。
# K+ Y! T) N$ g! Z* }9 v4 s( J
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
$ s6 ~" q2 T4 @
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
: I; {# F* x( w& t! g* u: E
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
% |% P4 @( u! Y7 Y1 K- P
5,model.transcribe 中参数说明:
1 D( @2 |' y, S
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
1 K+ p0 C) [* s- h# L6 m2 C F
其中
- x* Z& M) F1 j) ~2 e
word_timestamps=True,
; X0 `1 I- p ^( v/ F: M
保证了你能拿到 word,否则是拿不到的
& ]& d+ h8 K* C8 p4 p
initial_prompt = "Hello, welcome to my lecture.")
' m( E) T2 w0 F. o4 Y- |4 j
保证能尽可能准确的断句 punctuation,但是不是决定性的。
+ `, k8 f' n4 S! u C1 d, i' S
其他参数可参考源文件:
/ e4 S+ E4 V1 G: i+ n" j
https://github.com/guillaumekln/ ... isper/transcribe.py
% O1 t* l6 d! G/ }* b8 Z0 x0 w" O
152 def transcribe(
5 o8 G! Z( [" f- j6 f( Y2 Y' u
从源文件你可以看到是支持中文的句号断句的。
4 w4 d& v; n/ x
3 Y2 R4 e, d% N. ?6 }7 N! @7 j
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
. c" \& n# |& @$ U# c2 g$ c
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
" j7 |' t. W# c. x7 |" M6 `
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
* \6 G9 {6 s8 u2 Q7 e
: u# U+ J; I Y
) J/ @: j! a* t8 \" y9 h8 D
7 B4 A% O/ s7 [8 O W
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2