爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
2 u7 k6 H; c6 D3 [3 U' R
0 ^- v$ u! k( U- a, c
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
2 h5 u6 |* M: p' x" ~5 D3 j$ t
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
% Z/ O& [: z; r: F7 a; l
----------------------------------------
% N+ U7 I; w" e5 k1 ?
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
- _; Z. ?9 S& m! ~
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
! s) ^! k6 o4 t: W! J
----------------------------------------
2 g, g" Q, w( R; X, ^
https://github.com/guillaumekln/faster-whisper
7 ~- H3 [* c/ i0 z( Y
安装如下:
% W0 n" P# r( H8 J7 F( \9 P) S
1, Windows 10
0 V- ~- p- w- D% N- D
2, Python 3.10.11
1 Q: x J/ L; h1 \9 P; G M7 _
3, CUDA 12.1
9 f* F' Y5 A# Q5 P) B
4, 在python 3 中安装
8 r3 y; ?1 H1 \! e
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
& y" ]: K: r- X: Y( Q( M( J7 k
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
7 U. \1 c* M3 l" Q- o
5,pip install -U openai-whisper
4 @5 s# t) A1 z g; q% M3 L
这是向whisper 致敬,可以不装
4 g. e! y. t* m. c! i- n y
6,pip install faster-whisper
$ J$ u3 _2 N+ P' a
----------------------------------------
' f+ r4 n$ S/ ]- T7 C
whisper 我用的命令行,faster-whisper 我用的是python。
" F: U6 ?% ~- j" p; A0 m
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
: W9 }2 B$ d! X" a5 \) z( S" z
% y) ~# v3 {- J2 }
----------------------------------------
4 G! |1 h) w9 I
- H9 G) C1 B3 w z# e
from faster_whisper import WhisperModel
$ }3 A+ U. ^. v
- [, P* ]& ~5 W5 U" Y* [& d; ^
model_size = "small"
& x) d% F' z2 v# b7 y0 m& u
# L0 ^! d2 T* j% A1 J8 v( }6 t
model = WhisperModel(model_size, device="cuda", compute_type="int8")
% z: X1 a( Q, k) V: \
9 {8 \# ~$ E: d- m0 h0 H1 {# h
segments, info = model.transcribe(
( h6 }2 s o9 x7 d! _- k- k
sourceFileName,
8 | D, g' x; w7 R/ c8 @- o
beam_size=5,
( p# U, {4 r- M0 s9 Z
language="en",
: q9 Y# m: ^. |" I
task="transcribe",
: ]$ r" Y" ~1 h4 Z$ y+ M/ Q
word_timestamps=True,
- k3 Q; ~8 n j' q
initial_prompt = "Hello, welcome to my lecture.")
- K: P2 t+ M# t1 S
' v" z* ~' u! W" q7 f3 B+ A
for segment in segments:
+ X+ [+ \; I2 M8 i
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
}. B" N% [/ z. o9 b" V" Z
$ v9 M2 {/ d1 i
for word in segment.words:
! r' K; I) S( T8 I. r) Z
7 \9 c7 I7 w1 ^$ u0 x$ a& f7 c
----------------------------------------
8 x8 a4 g: I* f1 c' B
& M4 ~( Y( j7 j+ a/ ^4 I
代码说明:
/ `6 x0 l; |0 U" r7 j
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
; [* ~$ E3 l& l2 l/ s; W0 }
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
) j! g+ [& D# k8 b7 i! P
2,segment 本身是很粗糙的,做字幕勉强能用。
( Y' l4 b: i- `7 ?$ e
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
0 z/ ~# e, G6 Q& T$ L2 U, ?
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
1 d% ^3 \! h7 X8 T
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
, A7 _. Y, F' m
5,model.transcribe 中参数说明:
9 |& [; i" b, N% K
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
) s' }0 o2 h( l J2 R
其中
" G$ M4 N$ m3 S! t2 X
word_timestamps=True,
( ?6 v/ c6 K# A# ]
保证了你能拿到 word,否则是拿不到的
5 j* C1 @7 R& ], _( M: z" ^9 B9 [
initial_prompt = "Hello, welcome to my lecture.")
5 \* Z; M& v Y1 r4 E7 h4 r
保证能尽可能准确的断句 punctuation,但是不是决定性的。
) g) ]: T2 R9 u9 B& ? t2 E5 t
其他参数可参考源文件:
n" K2 u8 u% l
https://github.com/guillaumekln/ ... isper/transcribe.py
% c9 m& a) h& Q% ^- b4 D
152 def transcribe(
- O" S+ Q; N$ t# p, g* V
从源文件你可以看到是支持中文的句号断句的。
5 G4 ]$ v: ]7 d% D( |
2 G- T" n6 }1 [+ o$ k% s4 x' [2 K8 `
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
0 \& E2 H3 {5 X r
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
2 e/ c% R$ I. j/ F
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
, H' X1 H, u* T8 r8 Z0 Y" }
% A' I4 ]: O( [( s
4 K0 A9 H- X8 A9 b7 ^8 C
7 [. D5 Z: b$ x5 L3 T/ _
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2