爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
* W4 ?& }& _9 u0 {
$ W/ a4 ?8 U& [
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
1 j- Z( {0 a$ U' D4 C' T
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
% g7 J# D7 v4 Q h( L
----------------------------------------
% z2 M2 h3 \# h- X( P
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
) x' ?3 C0 N8 w4 F( g+ ?
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
$ v4 U: w& v: v
----------------------------------------
: ~3 P: c4 P; l
https://github.com/guillaumekln/faster-whisper
8 W4 v# }* x- h
安装如下:
, w4 ^9 i" ?9 R/ G9 X; Z
1, Windows 10
% M- {/ i$ _5 n/ `5 K$ t/ M
2, Python 3.10.11
. y M4 c9 W* k6 c; d
3, CUDA 12.1
: A2 n+ m6 w, Y+ M$ B% Q; i/ P
4, 在python 3 中安装
6 _$ u( ?5 d. s/ [- m5 N' ?6 D) V
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
" g) Z' S3 L+ L) J: G/ f
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
% D% _: T! @. m
5,pip install -U openai-whisper
3 T$ L" b" k( @1 s7 p u3 x& G( l, S
这是向whisper 致敬,可以不装
5 y" J- J& F+ W2 W; S1 x
6,pip install faster-whisper
- s. t2 ]& R6 C! i) \
----------------------------------------
8 k; ~1 d: X1 @6 ~
whisper 我用的命令行,faster-whisper 我用的是python。
1 E% S( x) S' B4 M/ n9 Y" h8 {6 Y
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
- R l. s9 S' l2 D
: O$ p+ k* V0 S$ s
----------------------------------------
7 t& A$ P5 _: X0 I' N( l
: }4 `0 s1 n5 E" Q# [& g; c4 [
from faster_whisper import WhisperModel
. _3 z2 [* i% ~2 A, f
* S/ A. |( C- ~8 X
model_size = "small"
- z' \8 g5 l. w% c' R
& A3 F5 V( K5 P. l: G1 v
model = WhisperModel(model_size, device="cuda", compute_type="int8")
0 h: W! P- ]: q0 s0 t
4 h0 M, P% I0 }! N# B1 r3 r
segments, info = model.transcribe(
( {2 U2 d/ g2 F" ]2 C9 f! h* u
sourceFileName,
, c6 r4 {; c: b, y/ @
beam_size=5,
+ `2 J; g3 P2 B' ~
language="en",
z' v3 X+ y) l+ r2 w! f- x
task="transcribe",
8 L4 M4 I% {, e5 H) n; s8 M
word_timestamps=True,
/ ^- o4 @. H% y
initial_prompt = "Hello, welcome to my lecture.")
$ @ D5 I. U u. P( _2 M. Y# u9 e7 l
% k% h5 \' t' y0 U/ e( ?* G( ?# x
for segment in segments:
9 U) ^8 d. C4 ?, p
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
) G$ d6 y% e( ~" D6 |
: \4 e$ b. \2 t Z9 G: l f! P% }1 y
for word in segment.words:
! n7 k( H! N4 @ q- U! u/ Z
! S/ |5 L7 c, r) S/ e/ X! M$ O0 H1 w
----------------------------------------
+ }6 W- l& {2 Q: r1 T
4 o$ N. v) F: `8 J, r- }/ W/ l: Y
代码说明:
R* W8 a- e2 @6 a+ b7 b; U. \
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
: a# M; _9 O) C' [) G5 Q
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
( k4 |9 N" D1 r Q# a
2,segment 本身是很粗糙的,做字幕勉强能用。
7 f& |, G. u/ e/ Q4 k
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
+ a4 `7 j2 z( g9 y- l
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
! Y+ d; r" R% K
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
: f4 S) r1 R4 P& O
5,model.transcribe 中参数说明:
7 h( @' y, f6 [" O0 g" K
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
2 l" t; I: l$ g9 }
其中
4 B) n1 f0 C+ G! o
word_timestamps=True,
# x7 J' L9 d- s7 A- A: w" ?5 h) I
保证了你能拿到 word,否则是拿不到的
% C; w8 R, J. ?$ Q5 Q
initial_prompt = "Hello, welcome to my lecture.")
& T" z- t5 g) b+ y- f8 M4 q
保证能尽可能准确的断句 punctuation,但是不是决定性的。
: Q$ j( t6 B9 B) l8 m# p. ~
其他参数可参考源文件:
1 m. n1 a' Q1 A- S9 w* z7 Q' x
https://github.com/guillaumekln/ ... isper/transcribe.py
) W+ W. g* w4 p7 S
152 def transcribe(
/ g9 {( P" p) B2 s& G
从源文件你可以看到是支持中文的句号断句的。
. Z( D5 g! A2 B. H; c3 y8 D
$ }& a6 r" ]2 @. o5 X, q: Z* C0 B% r$ d
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
1 ^3 `" ?) o2 h
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
K2 m( d+ u9 [1 ^( P8 I% n3 e9 d6 M5 k
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
* p, e3 [& S3 B+ Q# E% C: q
# J, P$ V$ [) n
7 _5 T* ^4 Q; p1 _, N) N6 |/ M# Y
7 t" ?4 v I6 ?$ l# j1 B4 M; |
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2