爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
/ a8 [ m6 e; r- l& B _( g# m5 W
2 v4 e5 ^* f8 D* r( U
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
* J8 |) P6 L1 Z6 ^: Z& j* e& @
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
4 p: m, ~. H, j- I
----------------------------------------
/ d7 g3 q" J7 {7 f- {2 Y
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
1 H" G; H) d9 A, J# M
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
$ i9 q7 B6 S" E9 ~- l" M3 g
----------------------------------------
' I/ a \# _3 G1 P7 I, H
https://github.com/guillaumekln/faster-whisper
4 t( ~8 p8 f. L7 E# W) h
安装如下:
; e( u5 s7 Y0 S$ f" j* k
1, Windows 10
6 |! ^+ ]8 b+ I- A/ o# i
2, Python 3.10.11
: b9 m! H+ [' R- D# n+ ]
3, CUDA 12.1
7 L3 S2 s( `- f n. `' p% n
4, 在python 3 中安装
: Z& j0 }. K" E M* w/ N" ~1 u
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
& s* M5 D [6 e5 e6 O9 |( d, _% w
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
9 u# ]3 G( L6 c& h! _9 Q3 w
5,pip install -U openai-whisper
$ `4 F; i9 e7 R1 E4 b
这是向whisper 致敬,可以不装
- O2 u* G8 ] G- W+ x+ y- y
6,pip install faster-whisper
% ]; O4 p, E, q' P2 q& i* }; K. t2 g* X
----------------------------------------
2 r* R5 G0 T/ d/ \& ?
whisper 我用的命令行,faster-whisper 我用的是python。
: L: T, F$ r! L
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
6 _( R- l2 g4 D3 s: E3 ]0 h
4 }% i9 M2 X7 C8 ?: |4 o: Z
----------------------------------------
) c+ m/ X* Z1 q# O; E3 U
, A2 F+ l# I$ `
from faster_whisper import WhisperModel
' a. [9 x- V8 |
6 o2 j/ L: n" r
model_size = "small"
9 h5 Z* b' x( ]5 D1 }7 t2 ~
0 H8 o, ?. p' G' g% m$ \
model = WhisperModel(model_size, device="cuda", compute_type="int8")
4 x+ k: N. z6 |1 n) ~& x4 r, `
- Y2 {. r ?" P( | \$ h
segments, info = model.transcribe(
0 X. `' \: X7 O) C" @. z( J
sourceFileName,
9 x. O X6 K5 L8 B3 m# @- \" @
beam_size=5,
w% F% B# M! Y7 J* R$ M
language="en",
) O$ l& _. d: Y8 K! c/ K: J1 B
task="transcribe",
/ I. K$ g6 A3 ]0 z$ c* Z9 v$ L$ ]
word_timestamps=True,
7 O) r, N0 N4 p1 A" E
initial_prompt = "Hello, welcome to my lecture.")
, F6 r/ z2 w" P/ [, o
4 Q W6 h& q# p
for segment in segments:
7 w# Z3 n# C& L1 M( ]. P; q0 k4 }
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
7 N/ l/ D& c6 D' Z$ E
" \9 b: e Y+ g$ `
for word in segment.words:
- N2 [; f7 [9 R1 w/ p
! l! K$ x9 q' A& c9 C/ ~
----------------------------------------
! Q3 }' A5 l* t, Z/ F& _
: u* ?/ p, y% y. t+ y
代码说明:
8 c8 z' g- ~# F8 P! h, Q
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
: ^+ k7 J. [/ L+ k
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
" o) Q) D3 u" x
2,segment 本身是很粗糙的,做字幕勉强能用。
( } B" X: G Q3 G3 _
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
# F9 P/ y4 ]$ W0 S
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
) D8 l, G: |4 N9 v3 J
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
- u) n* T' x9 r8 R% @( \
5,model.transcribe 中参数说明:
6 K% q, t! a! S; Q. ]
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
& M$ e! \* W0 ^
其中
# P! _" z9 r+ H4 X4 [
word_timestamps=True,
/ G! K' @7 D6 z4 a# l
保证了你能拿到 word,否则是拿不到的
W9 N% O) W! v3 V+ f3 b `
initial_prompt = "Hello, welcome to my lecture.")
& L7 D- N1 B4 ~, N2 ?% N
保证能尽可能准确的断句 punctuation,但是不是决定性的。
4 A! m$ t/ j5 r. O' g- u
其他参数可参考源文件:
4 H- n$ W$ g7 ~ l
https://github.com/guillaumekln/ ... isper/transcribe.py
6 E. F4 _' C3 T1 N$ F( a' v
152 def transcribe(
' d3 m8 H) n, h
从源文件你可以看到是支持中文的句号断句的。
9 j: p; a/ o/ M
8 n% f. A0 O( l, o. _+ C& l7 Z5 Z9 {
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
6 E4 L! U7 C3 v5 w
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
$ U" H) Y: j9 }! u; C# L
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
( u. {* Z; T% V6 Q. s
& g, ] N2 ]( O
9 w! }8 k2 D4 T! L% ?0 ^6 l. |6 `0 b( H
' h- N( n: t' o/ Y6 } {( I/ F
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2