爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
r9 q! C. W' Q5 i# R+ Y" F9 n1 Y
% [7 Q4 P6 z7 a l) T
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
% h |4 e6 o( L9 q& h6 C# }; O
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
, O& | j. ]" R' k& w
----------------------------------------
! `- @9 k, j+ b. y$ _7 ?
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
8 ]+ \3 V- H9 x4 e A7 e1 e" {, _- `
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
' l2 C: q: _8 |+ B0 ~
----------------------------------------
4 B* N. L( q4 I/ }5 E" _+ Y+ @' v: Q
https://github.com/guillaumekln/faster-whisper
D3 ? E- n* s. X: p+ C3 r, |. J$ @
安装如下:
% {1 D2 e% p, w. K
1, Windows 10
6 c! m% z5 K {' b
2, Python 3.10.11
* t5 l3 O- D* _/ Q8 _
3, CUDA 12.1
4 E- u1 ?3 `; P
4, 在python 3 中安装
2 X1 y3 k, M2 P( S/ S+ u( U
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
c+ E5 g2 V/ L& ] W) E4 v+ C
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
8 b7 o! p# l+ U! K
5,pip install -U openai-whisper
2 M! e1 @2 q- K9 m* n; I
这是向whisper 致敬,可以不装
. n1 R/ g9 D- I. E! p8 O6 k
6,pip install faster-whisper
1 R0 K S; @% B4 C. \' W+ ?8 h
----------------------------------------
5 r% K' T) h3 M: l1 {% `
whisper 我用的命令行,faster-whisper 我用的是python。
6 _- r& V% U6 M
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
9 q$ A8 x7 d% O( w% e1 ]
" U: K& d( U* z( s1 R' A
----------------------------------------
4 Q, s" t; [6 N% g
1 w% {/ Q8 s( j6 h4 W4 ?
from faster_whisper import WhisperModel
& X. t+ N0 x% ~
' \1 o `, z* }) N, J
model_size = "small"
( F1 D2 j9 ~; u; A4 \
; k; N, s+ t9 u+ I: f6 @
model = WhisperModel(model_size, device="cuda", compute_type="int8")
+ V; _, N' R) a$ `0 o% P
$ {1 Z4 E' P4 G0 p
segments, info = model.transcribe(
& U3 m! U P& [
sourceFileName,
/ G% U) Z" [5 P
beam_size=5,
/ t5 s8 G: Y; S3 \7 O' }8 i
language="en",
: ^) z6 ^( `; |$ R
task="transcribe",
- A3 W+ N) ~3 G& \ S1 j) n% p
word_timestamps=True,
5 |* Z' u6 K. V* z. E& M6 E
initial_prompt = "Hello, welcome to my lecture.")
0 z3 v' F: Z: H
% {% S4 W# D- n( s
for segment in segments:
& s* w: W% F! ~ ]. j# D
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
1 l# k6 B# e, R: L5 Y: \' m
! q2 q1 a' Y! A( } ^
for word in segment.words:
) Q$ G, C( K3 |
0 o2 P- N* H, `0 R3 r$ Q: E* J$ s
----------------------------------------
) C; M6 ^, D5 K0 P9 T
6 E* M ~, }6 o9 n I+ @8 ]. P
代码说明:
5 S+ \, h2 W, F3 w; a: k
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
X( l+ [; d6 i9 O. P8 m
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
1 C% @- Z+ F4 l8 X8 ^2 t" T
2,segment 本身是很粗糙的,做字幕勉强能用。
( \2 {0 L$ L5 e
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
# a4 c$ \5 Z% H; }( |) T, l$ b) h
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
0 f7 `, Z6 N) \6 K/ S6 {
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
8 N; W* n( l+ t# d4 m
5,model.transcribe 中参数说明:
2 V& [/ n* g. v7 d* J
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
7 K" |* }, s( s$ }
其中
$ Z, ~9 k J. h/ j- V5 \4 l- A
word_timestamps=True,
4 x0 a5 \: n' \5 M) C) E
保证了你能拿到 word,否则是拿不到的
4 |( @8 a4 ]- p' y( N ~
initial_prompt = "Hello, welcome to my lecture.")
i% b0 v& W) C2 J
保证能尽可能准确的断句 punctuation,但是不是决定性的。
" d. C% I3 k4 U/ x5 Q
其他参数可参考源文件:
3 d8 R* E# k: ~7 Q
https://github.com/guillaumekln/ ... isper/transcribe.py
4 q. W! E% S- a- N
152 def transcribe(
' ^5 _. [" ]! h v4 {9 c
从源文件你可以看到是支持中文的句号断句的。
5 r3 [7 O" l% F
7 t6 [ _8 A) t& Q1 U+ \
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
/ ?- Y3 s: [. S& b- |! [
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
, z0 k5 D( r; ~# p0 ^6 u8 s
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
0 k4 R% _- r4 B, v% P4 r# I
) A& i) |, X: u: O6 @- T
2 k( @$ ` i( \/ q& t
* L" g5 C0 q7 `
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://www.aswetalk.net/bbs/)
Powered by Discuz! X3.2