爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
. a# Z2 r; q$ F* ^+ Q5 g" D
1 b) ^) d# S+ M0 T
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
9 S5 C6 _, \* E
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
. q- D% E7 U/ d4 S8 g% @
----------------------------------------
$ G' i+ Z4 L; Q. ], `) }4 Q9 t
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
) ^& i, P$ N2 }2 R; j/ L
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
! v& @5 O3 Q g! v& V/ H
----------------------------------------
D7 e# A: C+ C6 k# P
https://github.com/guillaumekln/faster-whisper
! J8 w2 t! K+ e+ u
安装如下:
4 l8 ]2 d5 ]# |8 \3 m! i
1, Windows 10
( o- K6 z* J" h o) G1 y
2, Python 3.10.11
' N# d2 K9 U: A3 K
3, CUDA 12.1
# I: { |4 g7 n
4, 在python 3 中安装
# `' y, J* |" x' U
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
1 D/ c n% n: \) T
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
2 m; Y: l6 u* N9 T0 h' e6 j; S# O h
5,pip install -U openai-whisper
5 Z+ }* j B: k1 `! Z
这是向whisper 致敬,可以不装
" d; `% b& ?7 H" h. L5 U; U
6,pip install faster-whisper
2 |' {+ D: _2 E9 l
----------------------------------------
' w. _$ X( T4 D! B
whisper 我用的命令行,faster-whisper 我用的是python。
9 F9 H+ @: I3 r- ~
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
# V" p5 a9 s6 o! c
( A2 h; L/ s" D
----------------------------------------
6 m- N) J- @/ a5 f* l$ X) x2 C
% g; c: M6 f# i3 D/ F
from faster_whisper import WhisperModel
1 }9 w5 n- \: g5 O* j
) m' \% v' _5 b
model_size = "small"
- y* k' [) Q$ H% W% p- |
3 i8 O. f0 x* c/ {6 d
model = WhisperModel(model_size, device="cuda", compute_type="int8")
' j( y* p6 }- j! f
. H4 a1 N' Z5 j0 R
segments, info = model.transcribe(
) l. Y6 g% b7 O5 ]9 R- ^
sourceFileName,
3 d* v. D$ V6 F& o0 V5 ~# o+ k# G
beam_size=5,
: U% F; @8 V9 Q, d/ I' N' [
language="en",
: ? M% ~+ q* l
task="transcribe",
8 N4 k) J- s' ]2 K$ P4 J/ H' X
word_timestamps=True,
/ z# U" h4 \2 f2 d! \$ [
initial_prompt = "Hello, welcome to my lecture.")
* l; z3 ]3 S4 Q. X/ \8 W
9 [- e# i' m( v! R/ Y
for segment in segments:
. c2 `* E0 O+ `" p2 r' R
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
1 ^& Z: D" }( B1 ^' \# p8 X
( b- o0 Z# D7 k+ h: V/ a# y
for word in segment.words:
( @! w* a' d! E- n' E* L" P8 }
9 q* k& `0 ]0 m0 C
----------------------------------------
4 w$ M w. l! r, {! w
% Y7 W4 \ G& `! o" S
代码说明:
" W& [! ~. Y+ v& {7 o$ [2 |) E
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
9 l. d+ z4 f- @
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
) M. E; d7 `. u2 r7 s
2,segment 本身是很粗糙的,做字幕勉强能用。
9 |# O9 J( e) S. b# d5 T& G
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
8 l) ]0 G; U" ]/ d$ K
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
+ t; b+ X n5 v* U! ~
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
( B/ L% ?! w1 z7 ?( @
5,model.transcribe 中参数说明:
8 `8 x* U. P3 d
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
$ @' h2 m5 ?# V# i' E
其中
1 E6 c$ {0 N# e) [7 Z0 K4 K4 W
word_timestamps=True,
$ o; R7 l) d, E
保证了你能拿到 word,否则是拿不到的
. _- N. v; i! O4 c
initial_prompt = "Hello, welcome to my lecture.")
4 Z4 ~8 Q$ v1 U* b
保证能尽可能准确的断句 punctuation,但是不是决定性的。
+ [' f9 O3 R: \- K4 Q) t% v& e( {
其他参数可参考源文件:
( o7 b+ k, j9 a; b x8 m
https://github.com/guillaumekln/ ... isper/transcribe.py
# x/ b ?3 d3 I4 N$ a v
152 def transcribe(
0 i/ H6 i7 l: m7 n* U
从源文件你可以看到是支持中文的句号断句的。
9 x/ c8 `# f- A" L: }8 `
# m$ z+ n6 K. f% l
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
* B$ `) T; B' ~; B7 K: s
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
! U& i$ Q, \+ M* A Z
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
0 n2 I1 G) s7 v( Q. Q* q% Y9 F
& g: D+ b' M0 P8 h
* `) b' h0 Q4 F$ Q" ]6 i) H
F# g7 m, G2 B# |. V8 u
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2