爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
$ d0 t! n$ F5 q8 f l
2 P" W4 j. |+ o
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
& m$ p9 ~" i6 e
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
+ a6 Y# Z/ ]5 p6 C, Y8 i# k$ T& a
----------------------------------------
b0 W0 x% a, E& v0 [! e! q
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
3 Z! S; z4 ^; _5 _
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
; J& j+ n/ ~9 d! P. g
----------------------------------------
; d6 y/ h" S8 Q0 D) O
https://github.com/guillaumekln/faster-whisper
% N5 Q [$ z t9 |
安装如下:
5 u, g, h0 x/ y7 U$ b
1, Windows 10
( M9 P4 d, T3 q3 P0 L5 [
2, Python 3.10.11
4 R: }5 E0 A1 `0 H8 z4 b
3, CUDA 12.1
" a" |0 E* _$ Y
4, 在python 3 中安装
( K0 ], g- K$ o$ P
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
. r. l+ w E7 K1 k- a& ~
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
' Z/ z8 S2 L5 b
5,pip install -U openai-whisper
# Q$ J/ y5 v- Q- T' e* b4 j
这是向whisper 致敬,可以不装
" u, I! O$ w) r x) o) s4 o
6,pip install faster-whisper
( Y+ x- f- M* i
----------------------------------------
0 l% C8 r: N& k! Q: O- e H8 L
whisper 我用的命令行,faster-whisper 我用的是python。
p; b! m+ O. \! k1 ~+ H: H2 }% q
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
4 J/ O! t$ `# ~( W2 I
2 o4 s" i5 ~9 p7 W) M" l8 f
----------------------------------------
1 r* g" F5 s0 q1 g3 m+ q
" H3 y, B) c4 N8 r, ?& M* f
from faster_whisper import WhisperModel
; y% ]* Y j& _/ A
1 [7 j$ d6 z4 c( ]) i
model_size = "small"
_8 r$ \, L; t3 Y& ^' P
5 E1 _) S1 ?& F% \! g E3 r7 Q; f
model = WhisperModel(model_size, device="cuda", compute_type="int8")
; J9 |& ?9 p# e2 n8 \1 [( b) T
. ]* A5 O& K/ `7 n8 v' `) j: O8 |2 o
segments, info = model.transcribe(
3 F/ d+ y; F! Y
sourceFileName,
% j) c1 a7 d( V: B
beam_size=5,
/ z6 S" w+ @5 D
language="en",
9 f9 U/ \& L" l+ B
task="transcribe",
' q: r2 _5 [" k& M- r& @$ Q( w
word_timestamps=True,
8 N% b+ y% c& g' D+ U
initial_prompt = "Hello, welcome to my lecture.")
) v) [* n: P7 T) P1 L
9 W9 W& H1 l: X- ~# ]
for segment in segments:
( o; i6 L; j$ O! q9 |0 e: K4 P
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
m" I' G* ]9 s9 q% b) C% ^1 ?; ^
+ X4 Z) K2 B( v; Y# Z" g' E
for word in segment.words:
: s* u% {0 f+ E0 [
, k0 e3 a4 G8 v* |$ e& Y% i
----------------------------------------
2 j( o9 c0 E: `. y( D- t% n+ t# H
& \3 n; U |# q3 A4 i6 [0 C* X
代码说明:
4 s) r4 A* G" t$ d0 z/ [& c5 y
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
6 a8 U/ j* z5 a J
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
{6 s( G P Y: J
2,segment 本身是很粗糙的,做字幕勉强能用。
1 B3 O" F4 ?% g' X# i6 ?
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
' ?! w) A) G& p% u% U J
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
# [# x6 P& R& j/ `9 `, z
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
1 ]4 {( }% [- o" S) k7 K
5,model.transcribe 中参数说明:
# }2 u# t5 o1 o7 W! ]( X& A1 a
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
& @3 s; _6 Q# [ Y% b7 l6 C
其中
0 q0 Q* p D" Y* |
word_timestamps=True,
. s! } R" Q3 A. O% _4 U
保证了你能拿到 word,否则是拿不到的
) K. N- I6 F' x. Z N9 y- C
initial_prompt = "Hello, welcome to my lecture.")
' q( O& j2 a# S2 r4 J
保证能尽可能准确的断句 punctuation,但是不是决定性的。
' @4 h* b( r5 J8 s' f$ l
其他参数可参考源文件:
, I- d/ ^7 i. l! L
https://github.com/guillaumekln/ ... isper/transcribe.py
6 k3 p8 Q3 `- t1 k u, J5 P& T; o
152 def transcribe(
8 G. G" w- ^8 f) M; c! Q4 s
从源文件你可以看到是支持中文的句号断句的。
5 V2 W G# [/ O0 H
2 b" v6 ~( W4 S* ^$ ?7 l! ~
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
# _# }; d( ]6 e" X
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
& E' k. c* H: _4 I8 L4 K! x( F
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
: [$ R1 y- V/ F
5 h/ l: ^ b( a7 q
! T) r2 l. c) e' x
' i. Z) c0 s/ X- P; p& t
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2