爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
( P/ A8 G' M' ^ Q$ I( f8 n
/ F2 W, H+ a N* i- O9 R
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
1 q: F1 e6 Y) m9 B
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
, C# K i2 N+ t/ @
----------------------------------------
$ U b( r0 C; I$ O% d: a
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
* G1 u. I3 i( j( W! k2 _
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
$ r. @" C/ w6 V7 y$ G# ]1 t
----------------------------------------
. G( V' t, @: i" ]; q
https://github.com/guillaumekln/faster-whisper
8 Y) ]+ o) ^2 I; N2 e; }
安装如下:
4 t, g8 r. e, X: e/ L8 F
1, Windows 10
9 V2 e, V7 d6 Q
2, Python 3.10.11
7 {) L9 N* f9 d9 {4 T
3, CUDA 12.1
! E% D2 G9 e$ q% ?
4, 在python 3 中安装
% S) {+ ~- g3 q) @/ ~
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
* I1 d; v" _7 z6 }# [
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
/ R3 ^; L& E( D6 }) }% t
5,pip install -U openai-whisper
2 M9 Y$ p! g+ a1 j2 V
这是向whisper 致敬,可以不装
$ A9 y% S& a, V( }& _0 s1 i- a
6,pip install faster-whisper
- i" R, y/ ^4 }) v+ U5 V2 d
----------------------------------------
7 N P" T* w! l; M- W
whisper 我用的命令行,faster-whisper 我用的是python。
4 `6 g$ B& G4 j* f u8 }. L3 n8 v
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
( I! a( t& I( ?7 c$ k$ P: K
0 x N* v; g5 f" j( ~
----------------------------------------
* h4 A: b& U4 \" {# i0 F' T
- } e3 L# r! }# J: `* ^5 v
from faster_whisper import WhisperModel
; R( J$ w5 q2 ?" p1 G, n P7 B
5 Z) ^4 C0 R& B1 q* D! Y
model_size = "small"
% t" _) O# L' ~5 ] f
6 }* y$ p; a. t" s2 H% h
model = WhisperModel(model_size, device="cuda", compute_type="int8")
' U% h0 \: t% \% @1 K
~7 k* I, n( O, ~. k' }, p
segments, info = model.transcribe(
) S/ a5 c$ ~& o2 r) l6 t6 N
sourceFileName,
) x: Y. ^" @! S5 ^' Z/ h" U
beam_size=5,
1 Z. A$ w6 y8 X3 A; u
language="en",
/ ~% ^; x* \3 u! `& e* }, `
task="transcribe",
: G0 L3 o3 j" q
word_timestamps=True,
2 p3 \# [9 u ]
initial_prompt = "Hello, welcome to my lecture.")
8 U% [0 J9 ^/ { v5 o0 S/ Q
/ L4 S& G0 m# @2 L& E* J
for segment in segments:
n% K) q ~7 L+ ^' @5 e4 M/ \$ b$ ~
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
) J0 S2 [- L' ]# n, Y& P' r
0 g- ]! @" j8 H
for word in segment.words:
6 ~& L: g: f9 v4 g5 a( d" \
# }3 }5 |- ^; \$ H/ D
----------------------------------------
& f" R8 B$ V$ ~. y+ L* Z4 x
- f8 g6 f7 w9 [; v7 Y) E! Z* f
代码说明:
. t& C4 X9 E6 Z9 M
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
7 E+ l2 G' j; b I
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
' G8 U3 h& Z. |$ k7 L
2,segment 本身是很粗糙的,做字幕勉强能用。
' E: h3 F( h9 E5 P) P k0 M! B
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
- ^5 R( `; k4 C0 I
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
0 o1 q* q( k7 o* e
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
- G. V3 F( m! q$ U6 y) H' c, J
5,model.transcribe 中参数说明:
4 H0 T C, c! i! Z0 U9 W$ O
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
l# t7 n; |- ~3 M9 N
其中
& e2 E" w/ I7 Z. I q8 b0 K
word_timestamps=True,
& B( ]8 K# c; p
保证了你能拿到 word,否则是拿不到的
7 U. u) z' l# r' S/ d$ M
initial_prompt = "Hello, welcome to my lecture.")
( C; F) O) c6 o ^; F
保证能尽可能准确的断句 punctuation,但是不是决定性的。
/ n' J7 S d( ]2 s
其他参数可参考源文件:
5 J/ f6 U1 ?* @( l% e
https://github.com/guillaumekln/ ... isper/transcribe.py
# p; |0 Z5 _% q6 ?; G
152 def transcribe(
, I1 c2 h% D6 X
从源文件你可以看到是支持中文的句号断句的。
% x+ }! P2 @: U3 ~
3 t% i* b$ W9 E p i0 s
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
4 s5 ]: y7 P+ Z+ m4 w7 T" v
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
4 ~' q8 Z% u% d2 G; K( u" [
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
: ~" l3 d: ^2 j- r
+ b! h2 A" i- G5 p- k3 p
# c3 m; V# I" p
7 `0 n0 _$ J/ u
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2