爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
4 }/ d+ B C9 x6 F0 W
. d' k/ y* K# r4 e/ {: S! c; |1 A( H
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
) k; d, |% a+ {6 W/ J
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
5 T$ l0 e4 R" n& x6 e6 e% |
----------------------------------------
W, A3 U, r0 ~) `2 K1 e
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
3 m$ b& a& {! x" N" R- Z
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
. b& n0 e" O# V8 x( x
----------------------------------------
6 R! H& Z9 @1 d/ Y$ I
https://github.com/guillaumekln/faster-whisper
# m/ ?* \( }, `. U
安装如下:
9 ]) t _% b7 {5 p6 j4 n2 D( @/ G
1, Windows 10
* Z0 p+ u; p4 J& J7 }0 h
2, Python 3.10.11
8 \" r# u2 b& E5 Z$ {. r
3, CUDA 12.1
) O( w7 j. P% Z" \3 t; y
4, 在python 3 中安装
. O+ p- x( |- ~' S P' k: v
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
, r5 x4 D; o z3 a& n* Q! s# |
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
- ]: u5 W; J; N1 d2 _) \
5,pip install -U openai-whisper
+ O- l; X4 N4 _# o3 z$ F0 E2 P: {
这是向whisper 致敬,可以不装
! a O" a% ?6 r4 @+ \
6,pip install faster-whisper
1 a' ~0 r3 B% L# p
----------------------------------------
" U1 `+ E5 Q& }
whisper 我用的命令行,faster-whisper 我用的是python。
* t3 o/ E6 K$ ?. U6 d7 P+ t8 x9 D
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
" r7 }/ _! D! y2 F7 j! x+ B
2 e% T% Q/ q& z; `2 e1 b9 W/ r* g
----------------------------------------
9 T& r1 Z2 C: ]! j) |* S' g! C, `
( T5 F; b: f0 k' J6 e2 _
from faster_whisper import WhisperModel
& _' b* r/ j! e( b0 K$ ~
! f5 K: X% s1 r( P' j( O6 G. r1 l
model_size = "small"
5 J! O' y$ }& ]' Y. `& j
+ z, H* | b$ ]
model = WhisperModel(model_size, device="cuda", compute_type="int8")
. N) p# z) b. D$ J+ R- V9 l1 M5 q) p
, ] o1 h* J6 w8 K7 r% h
segments, info = model.transcribe(
1 |2 o: }. v$ U) Y& {+ r2 ]: g( @
sourceFileName,
; M2 u9 E3 f3 S
beam_size=5,
0 h6 J5 t$ `- }( W! \
language="en",
3 f& Q; u+ p2 U' W/ E& h
task="transcribe",
8 O2 d" [0 e$ U7 g- Q0 @( J
word_timestamps=True,
$ m0 R. O: [7 [2 ]! U8 G6 v- L
initial_prompt = "Hello, welcome to my lecture.")
. C; ^& ], ` N! E4 o2 M
+ c5 q0 h+ u7 {' K3 L7 D8 H
for segment in segments:
; Y$ t6 z! i, `4 i0 m2 J; q' W
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
' D' O/ U! `$ Z6 `
, V% `8 @+ B6 ~8 L, T+ d6 p0 Q
for word in segment.words:
: n% i( w# R# T
* b" k7 n$ G/ M. S( j8 { l8 ^% F6 E: }* B
----------------------------------------
( O! j! [- [9 F) J
8 \. [! o |* k, W. R8 ^
代码说明:
" R+ I/ Q% T( Q5 q7 H
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
" k" x1 q5 A+ i& P5 }' f
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
: @1 V" D6 O5 n$ @* j" }
2,segment 本身是很粗糙的,做字幕勉强能用。
, I$ n$ k1 v j7 n* M0 A
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
8 x. i4 Z# Q4 _2 F9 G
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
/ m R9 g1 n- f. }8 A
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
0 \8 t# U! v. s3 T( Z# g* e0 J
5,model.transcribe 中参数说明:
' e% W4 j; M4 T
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
1 }% L M$ j6 U$ a9 N& R
其中
; J0 F7 ?* n# P' ]1 \! }
word_timestamps=True,
4 I! ?4 R A3 Y
保证了你能拿到 word,否则是拿不到的
4 A* k, C/ {( w5 ^+ D! q S: N
initial_prompt = "Hello, welcome to my lecture.")
0 y" K4 U0 F$ v: u7 W. o: t
保证能尽可能准确的断句 punctuation,但是不是决定性的。
8 X% c) z; G+ u0 ?4 d
其他参数可参考源文件:
+ u4 L9 v0 e4 S' \
https://github.com/guillaumekln/ ... isper/transcribe.py
: L: F2 C k/ g g
152 def transcribe(
5 j' i8 p6 l# A! E6 i
从源文件你可以看到是支持中文的句号断句的。
& l5 @4 r6 O1 h+ {$ w0 Z/ i
! b6 q5 Y/ s! P/ l) ?5 p
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
! R* x# u" A: U0 ]9 E8 S* E/ D M% G
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
% `8 \. u3 f8 [# T1 [7 H
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
- j( W; S$ ^8 m, w3 s$ A( b
) b V& V5 @& N6 W9 ]4 a; O B% |
2 N5 k. q0 a9 d( Z9 {# p& g
+ j& v. b$ h, h7 I5 Q1 C2 ?
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2