爱吱声

标题: faster-whisper 更快的语音到文字的识别 ASR [打印本页]

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ' L4 `) A# }/ _8 O- H

( {2 H9 ~( {& ?/ ?: O& f借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
: i" T' _% P: E# a, H, k+ |. X$ f效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。  ~6 Z5 h) W, V- E# _
----------------------------------------
1 w9 C! C' j/ x, U显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
6 D& q- l# `( U7 S% V6 E" n4 E在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。% ]! u) `9 o! w8 ~2 E4 T
----------------------------------------3 k7 F5 M# ^8 ]+ l
https://github.com/guillaumekln/faster-whisper
" T+ A  ]% E8 ^9 G; m: s: T安装如下:# z) y  l! b  ?" e6 w  u% V
1, Windows 107 J' w% x# W: I/ E# ~1 L' i
2, Python 3.10.11) z7 Y' q  [/ z+ t
3, CUDA 12.1
% r" J9 C0 j: f+ E6 x+ G: q9 t, D4, 在python 3 中安装
( p4 }0 m( m7 [( X* y7 z0 ~2 V4 x1 |pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117/ L; {" g& ~1 T+ Z
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。5 N, C* R5 ^: @# E9 ^( b
5,pip install -U openai-whisper
+ z+ \5 t) R; U" q; m这是向whisper 致敬,可以不装0 ?$ F" B: j2 O
6,pip install faster-whisper: z/ u* L% T1 O9 z( v
----------------------------------------( g3 y4 f9 W) D' A
whisper 我用的命令行,faster-whisper 我用的是python。
) b- j% K, h7 Q* X下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
2 {9 C8 X! s% B: K+ q# v& ^
  ^4 O: M4 N% Q% U$ n7 i----------------------------------------+ c7 X, {4 [7 R: o  N+ I( k  m8 M
# F7 N8 O- {* a+ K+ y8 o
from faster_whisper import WhisperModel4 {8 E  k& O6 _$ r
5 @0 y9 [' j4 z6 e" f
model_size = "small"
3 X* a2 ~5 K0 b3 U! B* I) t1 ?$ E4 w1 e6 k  l/ j" ]* O
model = WhisperModel(model_size, device="cuda", compute_type="int8")* V* c2 V$ q; G! c3 r/ @3 d

$ ~5 u+ {! W. x* I# Y& wsegments, info = model.transcribe($ s' ^8 s/ w: d; c* f6 C
    sourceFileName, * P: `! O* c2 e& W- ~" X& V
    beam_size=5,
1 ?9 g) a* w' q* r$ @) L) P2 p    language="en",
1 x9 d/ ?! H, X6 n9 e5 U- K. w    task="transcribe",
" c6 n: @* Q" A& ~* V3 _# ]    word_timestamps=True,
, n. N% v1 x1 W% v6 o0 [    initial_prompt = "Hello, welcome to my lecture.")
2 D. j2 C9 |# c3 N% x# ^  O- ~
) e& I9 S) E9 {$ F  V& Mfor segment in segments:
* A3 x; i6 O6 c' n# i8 d    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
9 ^/ f" N6 x8 z: v; a  V, E0 h4 n4 T5 \3 v
        for word in segment.words:
. `1 f$ `0 T4 @1 k( g- E               
. Y0 {! y0 x. Y6 b3 b1 y1 B% _----------------------------------------( A1 W) Z( X  O

/ G3 ?% G+ v7 ~3 _代码说明:' @+ O- N" G; w% |3 s0 s" F7 g
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。2 W, G% O& f/ W! _
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
# u( e9 e3 k( E: D2,segment 本身是很粗糙的,做字幕勉强能用。
, V+ `1 j6 w8 i3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。( }$ c; b5 [5 Q4 R+ B5 ?: ^
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中/ `1 P( d! v2 X8 K) q2 ]6 V" [; i
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。5 }9 g3 i( {2 r- {
5,model.transcribe 中参数说明:
* B  _; l4 e; k) T: T你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数1 w6 k0 o8 U- `
其中7 J! G: B0 h) a* ?/ R; s1 g
    word_timestamps=True,
$ Y" a  {/ f9 k4 w: b/ i保证了你能拿到 word,否则是拿不到的
4 i9 K( h" C# L# ?' g    initial_prompt = "Hello, welcome to my lecture.")
0 [# q  k* J* H9 E$ ]5 r2 V保证能尽可能准确的断句 punctuation,但是不是决定性的。
/ c) h6 m) N" B其他参数可参考源文件:) P5 y$ n, x2 j$ T& ^9 B" u+ J
https://github.com/guillaumekln/ ... isper/transcribe.py6 U! K& E6 p0 E  G( p0 t+ k5 j
152 def transcribe(' x  n- G# ]% J6 L: `! h8 b
从源文件你可以看到是支持中文的句号断句的。
- _& n2 g+ I9 P* b1 V
7 w4 z, w( |  {6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。* L/ l# I. Y* c
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。# Z0 e" M% `) B' v9 w% h& w& Y1 S
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。" z: W, o9 W1 y1 H; a/ n
* g" M$ X$ q& [0 j, H/ o. c" Y" T
5 b  O" @2 c! H. C& ]8 q1 s: i
- ~) G& S: u! {! r) m

作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




欢迎光临 爱吱声 (http://aswetalk.net/bbs/) Powered by Discuz! X3.2