爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
+ L" k, p9 [' E. X
% _4 T; z5 e3 m& v7 Q
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
3 ~; d# ?: a& E& Z, I y
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
$ G5 x w: {' f# O4 M
----------------------------------------
/ ]* d7 P& q8 a6 Z! R* x
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
! E7 _5 U' P p' ^0 @& r/ L# E
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
0 C1 T- Q$ m. T' F& ?3 _( V
----------------------------------------
% s1 }1 r7 h) D5 l* b; T' `3 R ?
https://github.com/guillaumekln/faster-whisper
) A1 u* x& {. b/ K, i5 X( j% h
安装如下:
# b- |4 T& [9 M6 s$ f& X
1, Windows 10
$ |6 C* q. W. W6 H
2, Python 3.10.11
. S n( A9 m2 |. {. l5 n6 f
3, CUDA 12.1
# B. Q8 t& k0 W* \: M1 ], n, B3 a
4, 在python 3 中安装
( {0 o. T0 P* O5 F& p
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
4 f6 v1 G' Q4 S, ~8 J2 @
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
$ k% X4 H7 `8 `! q8 M7 c; Q# g; o
5,pip install -U openai-whisper
6 O2 D9 a' b& x6 K# s, h5 B/ T7 p7 @! y R
这是向whisper 致敬,可以不装
: q% u0 |2 K' M6 f( W
6,pip install faster-whisper
2 k A) a( [" T6 A0 Y
----------------------------------------
- A% f) |1 l8 v3 h) C; g
whisper 我用的命令行,faster-whisper 我用的是python。
" B1 E7 |! B2 f, E
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
& v# c3 r, E$ H m$ W# z1 G
# h j, \9 [! G& T& y- k5 U2 y
----------------------------------------
3 p. t2 }2 m' n" `
, e2 ~- z0 N8 N+ l- d9 s' M
from faster_whisper import WhisperModel
# h/ Z# t; {- x0 V7 f) s& }* @
0 U" w8 ]7 d' z _: T6 b0 @
model_size = "small"
$ u: Z* j1 J' E% G: F) }- C
( O( ?/ s4 l$ Q/ D- S- N$ |
model = WhisperModel(model_size, device="cuda", compute_type="int8")
7 U9 N. ]/ i- B: M
) Y r5 H6 f! }- }
segments, info = model.transcribe(
1 g( r" V4 e, D. y& A) `4 ?. C
sourceFileName,
8 i% V& A+ w$ I" r& z8 V. |: U
beam_size=5,
: ]8 ]$ M" D: a6 \, N
language="en",
* v( G* F; U" C. K3 z! {- B
task="transcribe",
' B. f- |0 o& v, v
word_timestamps=True,
" K4 V* C9 S$ D) n% t
initial_prompt = "Hello, welcome to my lecture.")
+ a/ i5 S0 y$ Y! z" r/ S( \3 t
8 g( M" c+ O1 R% F/ K S9 k: o$ _
for segment in segments:
2 z2 c0 f+ X( [% ~( e# H( Z0 T
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
) G" m/ N3 r8 J* W5 G% D+ |
; V+ i- |9 P6 M! l9 U
for word in segment.words:
" S; D/ q& R* {/ y+ R! ^5 Q' D# w$ K
4 W( C! `# y* G7 q
----------------------------------------
# ?5 ]8 y. h1 [2 ~
/ Y' U! }. J( k7 o% y
代码说明:
- g5 E9 M7 N! G4 T6 P( f+ q& _6 ?( R
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
* v& [. t6 {% R7 S& i8 W! z
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
. _! u' R; B" ^+ U1 k" m6 P
2,segment 本身是很粗糙的,做字幕勉强能用。
3 q1 t, Z9 K& L* R/ c$ C+ C
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
+ M9 d0 K; e) f
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
8 H, p1 T: Q: j$ N' Q. V6 Y1 W2 r+ S
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
7 y5 w1 i% o8 n2 C4 n2 L
5,model.transcribe 中参数说明:
' P# W4 X: U: j: O4 K
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
( v& f" ]$ C4 X& n6 D1 g
其中
# r" r* Z- Y, y+ s. d
word_timestamps=True,
7 v2 t! m7 G% o- N, i' ?
保证了你能拿到 word,否则是拿不到的
7 B6 B* Z6 X) c3 M/ a
initial_prompt = "Hello, welcome to my lecture.")
4 D8 V4 Q$ h$ h
保证能尽可能准确的断句 punctuation,但是不是决定性的。
1 Q# |3 | H4 T/ X( d: a
其他参数可参考源文件:
: [2 `7 Q9 h6 v' G& Q8 G; z I
https://github.com/guillaumekln/ ... isper/transcribe.py
" `- s" O3 L: z9 a
152 def transcribe(
* {- I3 S$ S' [, N/ N
从源文件你可以看到是支持中文的句号断句的。
' c* Z7 v" k) t2 Q6 l' g# T
! n6 e# g) ^- Z/ q4 z. y
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
$ _/ G5 Q s# x9 p7 ^
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
: H0 X& F1 v* r. o* \6 n3 x2 `* \+ g
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
( ]3 _* Q1 j; A+ w X
5 m1 ^. F: q7 r1 {! q- d
/ p. m& `" m; t
+ p9 k/ H% S- \3 }& \( R8 K
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2