爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
, J. a7 T% k# A' `& Q, h. i
" s# f! T6 U, P4 \
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
: r8 X5 e! O# k, [# l" s- l* V
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
7 m/ H1 w- T7 E/ |: @1 W! K
----------------------------------------
+ R6 C# A8 H) H9 S' x/ p/ t, l |% u
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
4 M9 t1 g7 C. [- W6 `
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
6 N5 l# M6 ]1 p4 ^! z- \' P
----------------------------------------
, u/ j/ Y D1 N$ d3 M' f
https://github.com/guillaumekln/faster-whisper
/ ?, q9 U. O8 C( S8 G
安装如下:
( @& o. \4 u2 `. j. S8 g% m
1, Windows 10
9 I' p* X5 y Y% B& V# w" E
2, Python 3.10.11
3 l; B( i s- w& O* o! d3 B- B
3, CUDA 12.1
' y+ i+ h! v, }! T# [# W2 H$ r; H
4, 在python 3 中安装
! x, v0 B. ?/ u6 Q& C
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
9 G! U. V ~* ?) i
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
B4 Q' x# G* t. d/ h8 Y
5,pip install -U openai-whisper
/ t8 _8 F4 R1 k* h& @
这是向whisper 致敬,可以不装
% r4 N- a1 D! B$ l
6,pip install faster-whisper
4 |3 t% v2 M/ t' ^8 F" t0 d, N! S
----------------------------------------
* ?8 z6 u# ~9 J- q# G, m! f
whisper 我用的命令行,faster-whisper 我用的是python。
v/ i1 Z7 k1 k/ Y5 k0 M1 Z: b! q
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
% n6 @+ P a! q" M6 G0 T$ a. k
1 O5 T8 M/ j; \2 ~$ i! \
----------------------------------------
; @; n- k3 Q6 b* V1 b* a) h
# N- r1 P- V; f+ I4 T$ \4 c
from faster_whisper import WhisperModel
9 @5 y$ Q+ s: O) j& M
6 T( O2 {, c( A* D8 H+ {
model_size = "small"
! D: r& m& s# z& w
2 X1 \( _1 t- _
model = WhisperModel(model_size, device="cuda", compute_type="int8")
! p) K, \# F6 Q* W6 V/ V4 R
) h4 }: p6 |( v5 \. ]) r
segments, info = model.transcribe(
5 z+ k2 k4 g& T0 K
sourceFileName,
7 a% |4 F/ V5 s6 \& P
beam_size=5,
) I1 a# }! q8 m, |& ?9 |8 z
language="en",
2 A3 R2 f# ]7 Y- N6 x4 A
task="transcribe",
3 Y" i* a' S o1 d2 y
word_timestamps=True,
3 j# v9 p9 d& L a; p @
initial_prompt = "Hello, welcome to my lecture.")
3 |0 X) b8 C' z. X% j$ ]5 f h
: W9 N5 s0 A' r7 H( {" i- F- k
for segment in segments:
: s4 Y2 g$ C1 C9 P
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
9 _! A" O C) b( l! e, q6 r
+ e) [5 F% ^; v
for word in segment.words:
% \. t# L9 ~* J- V& E
3 T# X) @' E: [8 e
----------------------------------------
- k; r& j4 Y# `9 H4 `$ ]+ ^
* R6 C5 g9 d1 l2 t4 I# k5 n# ]
代码说明:
7 a5 T7 Y2 c8 t5 R
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
7 e! ?! }9 M5 W5 s0 S9 E
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
1 x( ^0 ]( S9 B& ~! n0 g
2,segment 本身是很粗糙的,做字幕勉强能用。
' R `; b& S( o7 v
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
; N4 e9 Y; ^6 q8 k1 M# Q- h
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
% N0 [1 i7 J+ v: y5 _; }7 ?0 m
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
' U9 z4 D+ {, X
5,model.transcribe 中参数说明:
4 Z& b) A/ }, k A* a4 B- f$ ]
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
3 x/ L6 @' W0 S
其中
. ]! h1 }6 a% L* G7 w
word_timestamps=True,
. l$ p% M) C {4 j) t
保证了你能拿到 word,否则是拿不到的
9 D6 M/ P" J; O( K9 N% I
initial_prompt = "Hello, welcome to my lecture.")
, F( Z3 N5 g, l% A7 p, s. D
保证能尽可能准确的断句 punctuation,但是不是决定性的。
0 G3 H0 q: N; ~7 t9 r! }0 s+ q
其他参数可参考源文件:
+ U/ l V5 W; f. c5 |" D% ]
https://github.com/guillaumekln/ ... isper/transcribe.py
. B/ @! M- ^( L6 ]4 I% M
152 def transcribe(
4 A3 e' ~4 F' N. L; z5 C0 E
从源文件你可以看到是支持中文的句号断句的。
; c4 [/ a. t" \4 Q3 T( D
& M3 f( ~$ G/ r" g; z" }
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
9 v; E6 b( ^! b
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
( e+ z+ Y7 C4 Z/ y k
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
$ ^4 [: x/ Y) U& B6 r% ^
) ~* v" Y- k" D3 ]& ?) [
$ X7 |5 D( P5 p
6 H; p! c4 i& H; s, ^ {; J& [
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2