爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
9 [, V- P, b) O) i
% g1 o& H3 ?+ C- L' D8 m# t
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
, }5 U2 N' f! N4 R$ Y) s
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
: c3 h( M8 b' j! O
----------------------------------------
1 Y9 I3 R% m2 Y6 o. R
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
! C! P o% \& j
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
1 v" v; x! K6 k0 o9 Z9 K
----------------------------------------
+ m: o" M4 y* r% X2 `6 t) d
https://github.com/guillaumekln/faster-whisper
+ V, d3 J1 [+ |& m5 S9 m/ |
安装如下:
2 p' D6 g. [% x, L
1, Windows 10
; o$ r& g# L! s, D% |
2, Python 3.10.11
) c+ {$ ^3 W' z% ^ V- k: ~3 p
3, CUDA 12.1
, |$ _0 Z0 x* V7 i# i
4, 在python 3 中安装
8 G- @4 H, |& x# ^& ?0 s% E
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
& y* D+ p. K4 w/ `5 b
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
, B# H2 T& ^) L+ a) L
5,pip install -U openai-whisper
3 N) j! ?. n4 D8 C
这是向whisper 致敬,可以不装
s/ I" F u* O: N% v7 y8 U
6,pip install faster-whisper
* R3 R, H! M7 ?+ g l- W
----------------------------------------
( @; P' Z7 P$ e" }
whisper 我用的命令行,faster-whisper 我用的是python。
; I1 d) G: J. A% o6 A
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
' c. a7 g _- s( ]0 E% l0 t; L% Q
- F4 s& L3 Z: Z5 T# x' W
----------------------------------------
& ]/ C) m; G4 {: }! _
. z1 [$ M/ _' V
from faster_whisper import WhisperModel
' i+ a: Y# k# E) ~' L5 s; _# M
$ I) e& G4 @8 p8 N
model_size = "small"
" @0 A" _1 F& a: _! e
- X* d4 @# {. `* `8 \ q. G
model = WhisperModel(model_size, device="cuda", compute_type="int8")
" ~. G! [" S' ?$ h0 [2 V
3 D9 Y- N. t$ G& ^8 Q
segments, info = model.transcribe(
9 _7 Q; @, {! L7 U8 s. N. T
sourceFileName,
f v$ i% f8 F4 w- T# p4 `
beam_size=5,
* H1 C3 E8 c8 t/ {
language="en",
/ c0 _7 l3 |3 {( N
task="transcribe",
( B- f" H, _7 O; z8 C9 Y
word_timestamps=True,
* ]2 s7 L- @$ T- C
initial_prompt = "Hello, welcome to my lecture.")
- N0 `" K/ c$ W, W! p/ \4 u# k
6 A( s) N$ d( ]' K) B8 s
for segment in segments:
1 H3 A; m5 q( O( o/ Z
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
) [& ?( f F4 U, u) N! m( z, {+ g
- R. j. D* Z4 o
for word in segment.words:
1 U3 y* t o/ h" i* ^
: ^1 C( R/ H; k: X4 t
----------------------------------------
( t2 H7 R2 Q+ G8 h# \
( h |2 }' B8 L# c7 |
代码说明:
: b' x$ Q! V8 R+ c* y" \
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
, _+ f; A/ J4 w" Q2 T' W6 @
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
1 Y6 L8 J# q8 t! u$ K( V5 ~9 Z% A" z
2,segment 本身是很粗糙的,做字幕勉强能用。
+ A- A; c5 M1 d, J& ~
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
) ]/ b, l9 X) `+ p
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
( D3 n( q* Q( p; s% m$ w t1 U( R
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
: u! ^! y: u, C/ Z. ~. n7 [' Q
5,model.transcribe 中参数说明:
2 Z2 d$ |+ f( Q9 Z
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
; d( i& i+ E( f2 X" j# k) }
其中
1 B6 `- N/ |3 j
word_timestamps=True,
9 R0 u- I5 m, Q3 k3 i# s
保证了你能拿到 word,否则是拿不到的
: F% o& o8 ]3 D. `1 l
initial_prompt = "Hello, welcome to my lecture.")
1 y; A: y( t" a6 W
保证能尽可能准确的断句 punctuation,但是不是决定性的。
3 O4 C% a4 R% M' P2 Y5 O
其他参数可参考源文件:
& [( ^* `' E7 {) V/ t" ?( [1 r4 y
https://github.com/guillaumekln/ ... isper/transcribe.py
/ u6 k8 g2 \/ R" T( @; o" T
152 def transcribe(
2 m( i) r6 p- @5 R: p; x2 Y
从源文件你可以看到是支持中文的句号断句的。
% j. z9 [3 ^; x1 n
0 L C4 V2 o& d) _: T
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
. x0 @0 a( S2 x
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
; b( J* T" J) {; W9 s3 P$ n1 D+ a! n+ O
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
- Y$ a/ ^, e0 @7 u
P4 I' v; Z2 |8 M: [4 b6 h
3 x- i! f! x9 k1 M, [: H
. G+ Q. V9 P; Y4 i9 ^1 U
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2