爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
8 E) S. ^1 q5 y1 ~& @
% W x+ |" ]" Y' G+ |. f$ q; H
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
# p& `0 L, u' p% F
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
; C! \) Y% B7 o0 L9 A
----------------------------------------
6 r- K3 e2 l, k9 F1 t0 W
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
5 c4 ^' \/ f0 ?% Y' C
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
; j- ]& j/ h$ K$ A% I6 f
----------------------------------------
4 f3 n9 A. _6 @1 G/ \: \. L( Y
https://github.com/guillaumekln/faster-whisper
, D) y: ]4 L( R
安装如下:
& A+ c$ ~2 |8 r
1, Windows 10
1 n" z% t7 G9 s/ M
2, Python 3.10.11
) x9 a X" ~4 n0 \# i* ^, u( R
3, CUDA 12.1
$ N2 [) u4 c% {; j
4, 在python 3 中安装
: M6 E, r8 O& i' U! j+ P2 b
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
3 F2 @/ B3 p- E" @% G4 N9 M
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
7 B0 T" G6 s( W( Y) l+ ]0 s8 E
5,pip install -U openai-whisper
# g* P3 }( t( G; k9 f
这是向whisper 致敬,可以不装
! l/ g) }/ r0 Y9 V
6,pip install faster-whisper
# B9 ]- y3 R4 h. c9 X( C6 {
----------------------------------------
4 Y7 k- o; k* w* R
whisper 我用的命令行,faster-whisper 我用的是python。
( f" J' i& v9 k9 E& i0 X- [
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
' N1 j; x8 w1 d; T/ X9 E) b: {
6 Y9 V4 i) W6 X9 A, T
----------------------------------------
7 ?+ x/ u: t5 G$ v( E( I) z
1 \ w2 U4 ], ?6 [( C
from faster_whisper import WhisperModel
( Q' O5 [7 ]/ \# S/ [' c0 a
6 O/ x( F' d6 L: D7 \ n
model_size = "small"
! l" b% A/ R |( p; Z
0 @6 n: n1 l! T5 k* E8 n
model = WhisperModel(model_size, device="cuda", compute_type="int8")
, N3 R3 ^5 B9 U& V3 y: o
5 i! Y. u( D7 S/ v) `0 {
segments, info = model.transcribe(
- ]6 F; W& E" T7 k7 {; {6 B
sourceFileName,
7 P7 |4 m# R4 W/ p' E! A3 ]
beam_size=5,
3 \# U- U1 P) z# S! E9 t3 B
language="en",
. U3 ~! o% [1 E! W( O8 g
task="transcribe",
P6 P0 l5 B! U. W) V3 t
word_timestamps=True,
+ _- ^; n7 O( Q0 q! e# y( R" D' @
initial_prompt = "Hello, welcome to my lecture.")
/ l; Y5 v( s" u: _* W) I3 B
3 d: w0 q! R9 b9 w+ x( K3 D
for segment in segments:
& r4 ]+ r6 t1 S* g3 `" p
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
, _% D6 u* W8 ^) u, [
' b% t: e; m; P' m
for word in segment.words:
* s1 P. V" S# U, _2 W# P
: R* z3 T- N6 G. C
----------------------------------------
: R8 {5 A) R0 l' l. B% ?
: P# N2 `' T' B8 W# A9 R
代码说明:
W2 x6 r( u3 c" @; h, z
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
4 X7 D+ _. D% Q
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
7 [; Z" K, `8 l5 G% }- w: n- C& `
2,segment 本身是很粗糙的,做字幕勉强能用。
y5 Y. z7 z0 g7 h4 l) r- d- d
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
2 \3 F3 \" ]+ C1 }7 H
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
4 N% S C" O2 h# l6 d
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
6 Z1 w' N- v% u
5,model.transcribe 中参数说明:
2 e ]6 ]7 Z4 h* L; U2 }
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
- D# \$ G l3 W7 I4 _
其中
, s, f# ?& N/ s1 j' h6 y
word_timestamps=True,
y% O( {: |8 @) Z) G+ k) o) {: h
保证了你能拿到 word,否则是拿不到的
5 k# C! U. K# V6 G* h, t
initial_prompt = "Hello, welcome to my lecture.")
% T' \2 k3 k. H4 j
保证能尽可能准确的断句 punctuation,但是不是决定性的。
/ m- I+ A# e$ _" r
其他参数可参考源文件:
' A" g- L0 ?- x, `1 n {
https://github.com/guillaumekln/ ... isper/transcribe.py
$ x6 Q3 G* B% E8 @4 B7 d+ }; L
152 def transcribe(
u ^8 Z: a5 a M
从源文件你可以看到是支持中文的句号断句的。
8 C% a! p: j \$ E7 {
0 z( @! h% _' F2 E; c8 ^0 X9 j" P' ?
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
0 X. e" N/ k! O: R0 ]6 W* D
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
! O, }+ s4 X/ C4 n/ H6 e( D
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
. |) u4 o- w4 e' D: W
, i0 X5 S- w4 ~$ x/ ^
; d/ Y# i$ v0 a1 E! ?* ~
( a9 K9 [' u* R
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2