爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
( T4 S, v7 s, |9 B5 b
2 b/ g% U4 D- o. l4 p* O7 S9 m
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
z; d, b: ~% E8 H0 |+ Z$ U
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
( r9 }0 u/ ?8 w6 e9 o; x% V9 }: E
----------------------------------------
% a$ P( K& `% _- r/ I6 S
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
. g d* C" _/ g O; ?
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
# {/ ~' \' ?% m" x) f
----------------------------------------
9 F; y$ C% o# R" h+ p" T! {
https://github.com/guillaumekln/faster-whisper
$ B6 d2 m8 P5 k/ W2 p$ D. p0 m% \
安装如下:
! S( n) l0 m1 q5 B1 k) P# V
1, Windows 10
/ D3 @. [4 m, w5 s; { s% a
2, Python 3.10.11
+ ?7 P+ H; d7 R$ [$ x
3, CUDA 12.1
8 ^6 s" ?& L3 ]" a: M5 s
4, 在python 3 中安装
- E. v5 C8 t5 r( w9 {9 [
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
7 d2 s( A0 d/ V/ j* S
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
7 ~# P! C9 R6 V/ i$ E7 [5 h, k
5,pip install -U openai-whisper
6 _7 l% D0 I+ D
这是向whisper 致敬,可以不装
; n2 C9 k9 o" `
6,pip install faster-whisper
h. r) |( V" D8 z4 y
----------------------------------------
" d: C P3 G' h. a6 c
whisper 我用的命令行,faster-whisper 我用的是python。
) l' N8 Y9 ~+ g; [ E- q2 D
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
9 |3 E9 y+ g" Y" w/ I
. `0 O' p) w6 @* w+ [. Q
----------------------------------------
) G4 y. w1 y y: U( Q% X1 c- J( b
* N; U8 k9 L9 o' I
from faster_whisper import WhisperModel
# K9 f' e9 }& o& {- f" _+ d
: Y- Q e& a4 _! c1 \5 k2 Y
model_size = "small"
! s' O3 z, T& S. {* e5 i4 a
0 r; _6 v6 A; D/ ]
model = WhisperModel(model_size, device="cuda", compute_type="int8")
4 o; b7 k6 q7 M2 ^2 c
; T2 S9 ]$ h% m0 k% A `
segments, info = model.transcribe(
8 q9 @9 U+ j+ X2 v# G
sourceFileName,
. j2 @7 `5 j; c6 a$ a3 w4 K
beam_size=5,
# s' G4 A, G7 J# K1 {
language="en",
" x) x2 H9 [- ^0 E5 L: ]
task="transcribe",
) `+ N& a. }6 Q6 b, U0 B) ?
word_timestamps=True,
+ Y9 a7 a# e6 j5 Y( h- U q9 ]$ A
initial_prompt = "Hello, welcome to my lecture.")
( r* J" s1 I( U; v+ s$ c
& D5 P2 `, `' Q. \! }8 {' n
for segment in segments:
4 l% O! z0 H+ w
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
/ M7 p/ p) B* w" B, s+ P
( z: Y. `; v: n2 e* H
for word in segment.words:
) Z6 w4 L( z, @9 l% ~
- ]+ t; {( ~: H. X2 f1 R( ^+ i2 @
----------------------------------------
$ _. {1 P0 q, B
* @5 w8 D& c: ^1 l S
代码说明:
& S" G- \/ m% u3 _6 t7 v
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
1 f/ c( x# M6 c/ k! z
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
. V; ]6 e$ j: ?! s
2,segment 本身是很粗糙的,做字幕勉强能用。
2 S' I6 F7 M6 R1 g/ k0 O
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
0 X- f- ~4 ^9 ?
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
: E6 c$ j2 L7 g& q1 d
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
) y$ a) [, `& E! ]0 y2 e$ X3 l! P
5,model.transcribe 中参数说明:
& x, D( X4 k/ r$ Z) Q
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
4 w7 W7 b/ Y8 o& V- |5 [* @7 I0 s) |
其中
& k; p6 j3 M$ z& E" f) N/ l
word_timestamps=True,
$ A) w* b+ s* I% @0 I2 Y
保证了你能拿到 word,否则是拿不到的
3 k$ \1 R1 \( a9 h7 Y4 H0 N! @$ D& L
initial_prompt = "Hello, welcome to my lecture.")
( C1 H+ Z, F7 i8 `
保证能尽可能准确的断句 punctuation,但是不是决定性的。
5 p+ i4 R- _/ f& J; G& b) K
其他参数可参考源文件:
! P" @: k2 S9 p+ k* X
https://github.com/guillaumekln/ ... isper/transcribe.py
. }* e: p$ ]& U$ a. P" R
152 def transcribe(
7 f. b( g3 K$ x2 h: p
从源文件你可以看到是支持中文的句号断句的。
1 Q) F1 {' `' W! B+ M/ U5 n3 d# |
! u9 ?/ a% X: h: V
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
6 _! b& O1 O7 O5 m( O e
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
1 V# T. m5 A% Y9 D8 b
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
. P# l- N6 Z- m# D" n5 Y7 x
/ ^/ u F3 q4 m! F1 j! E6 ]
" _0 o9 }* R4 I$ F8 m: L4 N2 t
1 J! z& E8 z5 t; E+ ]
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2