爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
9 ~) u& M* P9 R) r+ @
8 W0 O( [2 R+ W1 F, h/ e
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
3 s8 h$ d5 f2 ]6 E/ X0 ]( j
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
' [( E; q* |5 j
----------------------------------------
8 |' x- q6 P& D; }; T5 M
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
. ?4 U" c( H0 j% N: R
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
0 u& }- G6 n: K0 O+ }7 G
----------------------------------------
$ V9 X$ c) Q8 w4 a# r+ ~ t5 L3 }
https://github.com/guillaumekln/faster-whisper
2 p$ b* x9 |8 Q5 P/ q+ P" [
安装如下:
1 f$ Z! d% i$ E- g/ r7 ^
1, Windows 10
% Y% T* w) E' I
2, Python 3.10.11
6 Y, w3 G! v3 ~. }/ h- y
3, CUDA 12.1
, z% i: U! V; {1 e6 u4 C0 B
4, 在python 3 中安装
% m+ ?1 H0 X+ @
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
$ n1 k* U4 Y/ Z( |) _. L- k5 ?' L
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
4 g% D8 R3 e( G ~ s
5,pip install -U openai-whisper
7 w& r) c8 N* G) o/ v
这是向whisper 致敬,可以不装
1 I4 Z, [" w* p8 W5 Q& M O
6,pip install faster-whisper
& o/ |( p( P( u7 S: r0 n* i, o
----------------------------------------
" m% b$ g( Q' i$ R4 _( z& @2 m. t
whisper 我用的命令行,faster-whisper 我用的是python。
: h: f z6 h a# a( {7 b
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
% s. s4 S+ Q3 s
4 _' i7 G7 H# t
----------------------------------------
- C. Y9 F: C( y6 K Y
6 \& j S5 p& t# N8 Z) C: b
from faster_whisper import WhisperModel
M( g/ h9 ]; M/ }! \, ?5 _
) ^+ f9 u# ~' f' F$ r
model_size = "small"
" o) B( X% A7 K3 q- B8 O
% P. v) x$ h% S ~: Y( F; A( V0 U
model = WhisperModel(model_size, device="cuda", compute_type="int8")
9 V/ c5 L1 z" ~: X: ?2 o i6 z" D
O! R& N% m( V. j1 r
segments, info = model.transcribe(
5 ]: B9 T2 v, M( ~2 T
sourceFileName,
" n1 P3 ~- {/ b3 g. ^/ K
beam_size=5,
3 E' g2 b. o- F4 S: p
language="en",
! E; `% y/ \$ M. M# w! {/ J1 Z. Q
task="transcribe",
, V: I0 ~5 s! ]( F4 M5 F) |
word_timestamps=True,
# B7 w1 d$ @# V( }: X
initial_prompt = "Hello, welcome to my lecture.")
% `8 f! Z1 W( G- g, T
`0 ?! S4 D& I+ ?8 j% D- r) k
for segment in segments:
& z9 I' a3 F7 G) H
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
% U1 @! x @# W2 q9 ?/ z+ U8 l1 e
4 W0 b# q# A1 v5 I
for word in segment.words:
* s4 m" m7 s% M
% y; F: G! H& x, z4 d% g
----------------------------------------
6 D* `- ~: k, m# U. b4 Q* R
# p3 y: R3 d0 M
代码说明:
, B( W4 f( h+ i2 z- V7 _, v
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
! b) O( o9 ?0 o' } `
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
4 ]1 r0 C7 l7 \- o8 O! [! Q* ~1 ]
2,segment 本身是很粗糙的,做字幕勉强能用。
, ~! d. I8 R) S4 R' V" ~
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
( w- t. l8 }& B* D" z
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
/ W. R7 i3 C& y* X6 h: h3 s6 Y
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
# ~4 h6 H1 |: H7 q* n Q2 E5 j
5,model.transcribe 中参数说明:
8 M* w$ K$ C* f" D6 t: u
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
; M# C' x* `% R/ b) R7 B8 z
其中
; S5 g) k. I+ B% o q
word_timestamps=True,
9 |& h. Q& I! ?9 G
保证了你能拿到 word,否则是拿不到的
. t& d. ~1 {* d7 D
initial_prompt = "Hello, welcome to my lecture.")
, C* w5 w6 T" s
保证能尽可能准确的断句 punctuation,但是不是决定性的。
* `/ Y) y0 l% G+ e
其他参数可参考源文件:
" E- r8 L. Z! ]. Y: f% ^. T
https://github.com/guillaumekln/ ... isper/transcribe.py
; O& l3 H; z, j4 q4 ` b5 L
152 def transcribe(
8 w1 W- z5 w0 s6 P
从源文件你可以看到是支持中文的句号断句的。
R" y! K4 j! r
# m: b2 Q p$ ^/ I9 U1 }
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
" w* ]& j. l$ v! I+ b2 C: B: C, P9 q
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
2 Y! n ^6 f' _" }
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
: n# j/ I# d( h. `+ f
4 l) d9 H- x5 Z- g" x' A' N
* \0 W( N, c% z( a
( n- c0 m; `% _
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2