爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
8 `+ W, }1 Z7 Y& H8 g4 w- x
- k: c- i3 n/ @- M! i
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
6 @* A, [8 Q \2 ?: ^
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
5 q' o% }4 I) S9 u
----------------------------------------
" [. ?1 P: k8 |: w! e. w8 f
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
" N% a, B- ~ O: {' U I7 Q
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
9 g% L0 b7 g7 I" F' w/ f
----------------------------------------
# e* V- r! m+ \9 g* w
https://github.com/guillaumekln/faster-whisper
) Z. r' ~/ [% s7 q, \
安装如下:
" B8 E) b3 |/ a$ S K
1, Windows 10
1 F6 ]- U) N% w3 b) E
2, Python 3.10.11
! T% {" ]2 C9 K$ X+ X& J5 A
3, CUDA 12.1
1 T. \0 A) n1 g
4, 在python 3 中安装
+ M" ]& b& e5 N9 m! b- {0 X0 ?/ ?: p
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
5 c" l+ m( b7 l- d
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
5 l1 Z$ _ |$ \
5,pip install -U openai-whisper
+ u. k Q5 y' p
这是向whisper 致敬,可以不装
4 O/ m O- [( G# Y# ]: a$ i
6,pip install faster-whisper
# f' C# B$ G* a- J7 E9 ]
----------------------------------------
/ q! ~4 U% b# }" k
whisper 我用的命令行,faster-whisper 我用的是python。
: D2 b r$ m5 p
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
, B7 ^& q# e/ m9 H' X. c
4 W* a) A1 z" o+ g% Y, d- P
----------------------------------------
; ]3 w! W. W0 P0 I
: M% c. e3 V3 x6 I
from faster_whisper import WhisperModel
$ J5 |! U/ H5 s0 w4 P8 a. X' o8 i
, k% g8 m; ~+ Z ]) m
model_size = "small"
* B) W# J( d% L5 d+ b
1 X/ O& H& C6 G; i
model = WhisperModel(model_size, device="cuda", compute_type="int8")
* R( A1 x2 ~1 z Q! w9 u1 }
) X8 w/ {1 Z4 _7 ?% A
segments, info = model.transcribe(
& Y! y& }# X1 m3 x* Y! \* E
sourceFileName,
. e; p/ z' A2 A# m3 F
beam_size=5,
% h! e! U2 \. |% v
language="en",
. h+ B3 G" D! x7 \/ b1 z5 d1 I+ X
task="transcribe",
9 M8 a6 o! c' X& o+ P+ M
word_timestamps=True,
5 @5 E1 r& Q; h' M/ \
initial_prompt = "Hello, welcome to my lecture.")
. w8 G. a# Q: f7 t7 m0 W3 V4 C+ T
- `( R: B4 M2 u4 u. D( C
for segment in segments:
7 x5 k7 `' G" y9 R- ?0 P; s; o f
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
) Y* k/ a! p3 [' a
! ^$ v, A# a$ d4 D' F
for word in segment.words:
X2 t( S+ g8 [' |. g
7 D7 Z/ T9 s5 t$ B6 t q
----------------------------------------
0 D9 `/ `% ^% x" }
" [+ n8 c/ \ Y, k) g1 q
代码说明:
4 b Q- c0 n$ A" B" n
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
" G0 j; B. j4 ?7 ] A5 o" i
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
' V G+ v6 {0 E/ R' X0 l+ T( b4 y
2,segment 本身是很粗糙的,做字幕勉强能用。
6 [' e z2 ^# j) q! i
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
. n) O/ s7 h3 s, z0 r
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
$ J5 @' U5 `. [* u' h- y+ w
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
+ h5 I, e1 @% D3 f k, Q# S
5,model.transcribe 中参数说明:
$ I) a/ _0 h" l$ ]# a3 K; l2 M
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
. P" |( P0 ~3 d: y7 C; @0 K
其中
P6 @: e2 ?6 S
word_timestamps=True,
% Y# o, c5 Q. @" o
保证了你能拿到 word,否则是拿不到的
8 Q8 J4 b) ^3 J4 D& B1 q
initial_prompt = "Hello, welcome to my lecture.")
! O# g/ e l& t$ Z8 W
保证能尽可能准确的断句 punctuation,但是不是决定性的。
; g6 H/ U1 H% R5 I# T# J
其他参数可参考源文件:
7 ^! U6 Y& S* W6 T* N. ~! C
https://github.com/guillaumekln/ ... isper/transcribe.py
1 |% K6 B. z4 H0 Q
152 def transcribe(
0 W: V) T1 w3 B4 R* L4 ^% I4 R
从源文件你可以看到是支持中文的句号断句的。
0 m4 y( p- Y+ v% j6 R v
- j1 {: n' v% t. a
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
0 Y2 h3 X. r" o& H7 h
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
6 `1 L$ x. @ h1 M; l( h7 E* }
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
1 v% j5 W& L0 r) h6 `* _
L7 ^% F. l& J) Q, ?5 |0 ^# y8 q
9 S8 [2 C3 z; i2 B& u' f
8 v( u& `! m* x. u2 G
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2