爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
) ?% j9 b0 e/ O0 M
* S3 u3 o2 h8 D+ s! N* T
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
8 U+ N) W2 ~' r, Y- X
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
% G2 C1 z7 S9 M) W4 _) m
----------------------------------------
' ^2 T1 k' }: ~8 W* o
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
4 F/ b4 T \8 @; \8 r U* _3 \
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
/ ~) a8 t q" b6 d0 h: P1 b' n
----------------------------------------
& G3 W0 F5 A, z/ g; m0 r" f4 Q& {# m( Y
https://github.com/guillaumekln/faster-whisper
/ N9 n$ s* N2 U' k7 d1 J j% T
安装如下:
, m9 h' S, _+ M5 k
1, Windows 10
3 ^% K. Q: W; O9 j9 l) k
2, Python 3.10.11
+ j1 K2 l2 f) `8 `
3, CUDA 12.1
5 ~9 X" ]9 q; R4 `
4, 在python 3 中安装
) T Z* ^/ T# A; f* j
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
' \+ I- v' J; \$ H {
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
/ d& ~2 l D f1 b6 z! N$ x
5,pip install -U openai-whisper
- ^# a- k: H" u, j8 p* V
这是向whisper 致敬,可以不装
. W; Z! D- d! H! d7 [
6,pip install faster-whisper
, W! f. H, |- ~$ Y+ L) V b% H
----------------------------------------
9 u: p, {& W, R. h7 i9 x* i
whisper 我用的命令行,faster-whisper 我用的是python。
: P: F. G9 r* {) q; L4 b- v2 h
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
a# Q8 j- R" E% H1 \0 f" _
; w' O# p8 S, d- y: O
----------------------------------------
: o6 d( q+ A K
! p- r" p/ T: R! L
from faster_whisper import WhisperModel
4 I4 q) y2 E$ c% \$ h- F0 t: [: h
4 b2 A( j! |$ U! @. e
model_size = "small"
+ K$ @' }. W0 c/ M
! V/ N u1 l0 q
model = WhisperModel(model_size, device="cuda", compute_type="int8")
& X5 o/ i- N4 j2 E: D$ I# V5 u
5 A0 ^4 F2 s% i+ h
segments, info = model.transcribe(
) Z8 x; H- Q8 Q' A) u
sourceFileName,
# U& i Z$ V$ j9 F& f* x, |& M4 y7 P9 w, X+ v
beam_size=5,
/ Z+ q7 |/ p" [& q' I
language="en",
$ {/ X' ~+ a7 W4 e! R, a4 c8 t
task="transcribe",
+ W2 P: _: K+ T( C; g& Z
word_timestamps=True,
4 H- O# x! |% d x/ @6 o5 p1 \0 Q
initial_prompt = "Hello, welcome to my lecture.")
- e! t% n9 J2 P6 k
% ]5 y7 h4 r3 \9 B( h3 g) D
for segment in segments:
5 |! N0 S# `% J
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
8 u, R2 ]) d" z8 w
! \+ z' Y; K8 w! b6 C( o
for word in segment.words:
9 w1 i( q2 [8 h/ P1 X$ ~. N) Y4 ?
^6 z6 X+ T2 g& }8 v
----------------------------------------
6 e0 |* ~1 q; q: z# i
0 x; d5 E5 t+ M* n
代码说明:
6 e I) l* _, K% `) K: Y2 k
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
4 {1 h/ i" U* Q4 t/ R3 ~
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
; }% t# t7 G. g4 x; @5 ?
2,segment 本身是很粗糙的,做字幕勉强能用。
" T0 k; I+ {# O
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
' b! m$ S' t9 o; L0 G! l" s! z, j" ~) J
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
. B" _! t" Y* t9 }
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
# n6 {$ i4 |' u# e8 S
5,model.transcribe 中参数说明:
7 G5 V" W6 o- ]0 S, k/ x9 d
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
0 `# Z/ A1 X' [& c
其中
7 x6 p. P, a# [- I$ Q
word_timestamps=True,
4 N2 q7 Z: Z# q# F
保证了你能拿到 word,否则是拿不到的
9 t' ]0 R8 l3 e* {, b$ ^8 E
initial_prompt = "Hello, welcome to my lecture.")
; G2 C6 `2 ~( T: T% E7 k, _
保证能尽可能准确的断句 punctuation,但是不是决定性的。
) g3 i5 [( H: I' f5 \
其他参数可参考源文件:
# f# [6 o& e( F
https://github.com/guillaumekln/ ... isper/transcribe.py
, M8 e) r) J- o6 v( z' h( P9 N
152 def transcribe(
8 `0 |9 c/ n- h
从源文件你可以看到是支持中文的句号断句的。
! Y2 u0 i( `- G' H2 y8 O
: ^- ~ E, Y2 x- [, |5 y8 y" y
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
+ [) }" E4 p6 H
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
9 z/ N4 Y. ^6 s9 O& _0 z- w
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
& J8 O1 @: V+ n6 o/ _! @5 z" }
6 R k9 ~8 i/ e1 X! R5 r0 r3 K
3 X3 U! f+ D! v" y1 ?0 q
) t+ [6 ]! R7 P1 x$ l+ Y/ C5 \
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2