爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
9 q8 J: \+ f. i: p. g/ t
u' S* P& j$ ~- `4 x
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
. U) g7 ?: c) o5 l! Y Q/ f
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
U6 {1 m$ z; r. P% e
----------------------------------------
) u2 y: k' q, r# ?+ N' B
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
: U" p& F1 P; L7 k: E/ q
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
& Y$ O9 `) a3 Q, ?; ~1 |. m( C. F' [
----------------------------------------
4 [/ J4 P* s# G) k% m8 F# }5 v3 W
https://github.com/guillaumekln/faster-whisper
6 P& E; G# S) k( _" g
安装如下:
- E( q; ^3 L; P" Q
1, Windows 10
8 s6 } Z% C/ r2 i4 T
2, Python 3.10.11
( x/ A* M" y1 t( l8 O. W- q
3, CUDA 12.1
+ c0 K$ Y8 ~- @5 d2 E
4, 在python 3 中安装
8 L0 S1 Q, k5 g
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
* V' s" r7 c8 [: Z" S! m) n0 k
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
( t& S8 Y' Y- L- y. V. q' W5 U# }
5,pip install -U openai-whisper
% T" n& V) T$ B6 }
这是向whisper 致敬,可以不装
{! ]7 @! s' v- k- `; A
6,pip install faster-whisper
q2 ~0 {6 O- W4 Z
----------------------------------------
4 ~! w5 W0 b* b% s
whisper 我用的命令行,faster-whisper 我用的是python。
* v% C8 \% L8 G$ v6 p; F+ F
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
2 x. v0 P3 j R3 \- X5 `3 `
% o' D. {# P5 |; Q
----------------------------------------
7 b: W: ~' L! w7 \2 Y
4 s/ r- X8 a; {- S# L. Q' |
from faster_whisper import WhisperModel
: z$ k) @& C- x: `
+ w$ U. B- I# }6 q2 ~
model_size = "small"
5 {! d& K8 K( Z) o- n5 a- h
) ~. A9 e6 X+ {, E2 ?! |
model = WhisperModel(model_size, device="cuda", compute_type="int8")
/ `' u4 z3 d; F9 p! J, y% V+ G% o
+ t/ e- K# Z0 ?# y6 h
segments, info = model.transcribe(
" d7 W& M; V/ A7 K
sourceFileName,
% c W6 E& C' p
beam_size=5,
* S7 m& l3 v3 e8 \
language="en",
5 w9 w+ r4 A' w& M: E& n
task="transcribe",
K B: R& Q x1 ]. c5 x! V
word_timestamps=True,
8 W" o* \- `9 c& h4 s% H
initial_prompt = "Hello, welcome to my lecture.")
1 l& c7 }$ r& G
% ]: p. E3 W" M
for segment in segments:
6 `2 ^+ w: m1 Z
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
J) x* T% m8 ` h& c1 B
7 |. E# v' P0 |5 i; _" N; a- F
for word in segment.words:
6 ]7 P E, ]# Z9 {
0 p7 i7 t4 s" G
----------------------------------------
( i* y+ o: ~( j; B# V' `8 p# H
0 g- ]7 _0 G! J( J5 t
代码说明:
. N/ x+ W4 ~* J: x& d
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
$ y' z! i1 } P" d7 y1 N7 x* x2 b% ~
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
" B0 g! G$ @0 _' @; Y$ C; H
2,segment 本身是很粗糙的,做字幕勉强能用。
0 Q: J" A i" @% ~1 I- C2 o
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
6 ?, ` v. \( S5 y+ b6 Q
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
& p( ?2 c0 u: Z7 L8 w
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
: i' B- g9 e v' T# c r) l% A
5,model.transcribe 中参数说明:
7 j: P/ p/ [1 ]; n, a
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
0 [1 o+ e# ~5 X& ]
其中
1 n6 x9 E6 T K. v l; \
word_timestamps=True,
( L+ J! y5 ?/ d& |
保证了你能拿到 word,否则是拿不到的
+ U; G/ P* g x4 Z& A! }
initial_prompt = "Hello, welcome to my lecture.")
4 H7 `! D9 q6 J$ O7 u2 M8 K
保证能尽可能准确的断句 punctuation,但是不是决定性的。
0 p/ d. a# J. R$ @: o) t% Q2 C
其他参数可参考源文件:
6 i8 @5 q+ e1 Y/ L- n& H, p! w; i
https://github.com/guillaumekln/ ... isper/transcribe.py
! h8 A7 S, M) r: ?, u+ h
152 def transcribe(
7 y: ~/ `( ]1 g) v% o* o
从源文件你可以看到是支持中文的句号断句的。
& R5 i: ?- A& B, s) P3 B$ m
# U8 V9 _8 e: f* w0 K, ]* Z) z
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
" {1 d( k# P/ h5 Y6 F! @$ y
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
+ _& L7 ]1 p+ P4 s- V5 K
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
$ _6 k" a, s4 o& r- q! e+ u
9 x& q, V2 J2 G6 m( Z" R5 Y
1 K) O$ [* D4 {. }# x ~
6 _# _# G% b% m4 V2 K
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2