爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
7 Z7 @4 M# \, x. D& K
, s+ \4 J+ _( w$ @% Z, [! v. Y+ ^ h
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
$ b5 U2 H" v p) W/ S" @7 f6 H
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
/ m9 I' f0 }4 C8 y
----------------------------------------
* M7 S6 B% A6 C4 W1 L& v4 h, Z
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
$ L! d( }( F( r3 I; z
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
1 Y! E$ q7 E$ a4 @ i: Y
----------------------------------------
7 y7 Q: N# U" N8 P8 [
https://github.com/guillaumekln/faster-whisper
- V1 N/ M, P9 | W2 I2 \& @' Z
安装如下:
# b- R. e2 ^0 g2 L, N/ k: o% U
1, Windows 10
/ E3 W( r' O, P
2, Python 3.10.11
) R- W* b- v& Z6 o3 ?
3, CUDA 12.1
9 A$ F3 M: f2 H Z
4, 在python 3 中安装
, [; ?! f, _1 b6 U1 i0 c
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
1 r5 @3 b; M, L6 b; u
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
( A, x/ T6 P) Y9 p" W7 |# {
5,pip install -U openai-whisper
+ Z* {& K9 \, E4 s9 I
这是向whisper 致敬,可以不装
7 O' \4 M; Q9 \- V0 T
6,pip install faster-whisper
H7 k5 b ^6 ?. { m3 D
----------------------------------------
5 N* u% k6 z; l# g8 \
whisper 我用的命令行,faster-whisper 我用的是python。
8 `. T3 R, N7 Y+ H
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
* Q' Q! V/ |3 I: V
$ V2 L0 B& e+ P% B* g. a/ S; o
----------------------------------------
0 f H" ]( \+ d7 O0 _" O
& W' e; y! ^ Q7 h" ~1 X
from faster_whisper import WhisperModel
( z2 ^" D# p' U4 J
5 K' z% |" D7 E [* {8 Y( L
model_size = "small"
2 b! [1 T; K, c8 z z) i W
" I' d4 e- r+ Z& P9 M/ Q( P4 {( |
model = WhisperModel(model_size, device="cuda", compute_type="int8")
6 K8 y( h$ K/ Q, r' _5 t$ T1 n
0 E* r8 j! J/ X8 I! b5 L
segments, info = model.transcribe(
; ]. @: }1 U' ]; x0 @ j
sourceFileName,
% ~' z A# ~; \1 _# E
beam_size=5,
! v c1 j" x% A- F5 v9 \' I
language="en",
7 g; k- T6 D; i0 ^6 [6 n2 O
task="transcribe",
' O8 V7 I) i# V5 C( e# k9 J
word_timestamps=True,
0 Y* y2 o* v* ]2 k" u8 m
initial_prompt = "Hello, welcome to my lecture.")
r: U7 p9 Q1 ~3 M9 w: N4 D
# m, x1 ]' _! F6 }7 y3 y
for segment in segments:
- v/ \1 @1 m- R3 d5 q6 I0 q
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
: ^$ h- M" L# S8 i: k, D# V+ u
: ~3 ^( S. s. }. c
for word in segment.words:
8 W, F* x; K8 c) a9 c1 S$ j
$ Q$ A9 U' a0 K
----------------------------------------
}; E4 k; A8 t3 Y7 |* ?
% J% _5 A7 q, p9 c
代码说明:
) M( q8 P( w3 y1 t
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
: T* W! i$ ^, p2 T
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
+ M, i' W0 H2 S6 I8 K8 d, z
2,segment 本身是很粗糙的,做字幕勉强能用。
( q* a8 w8 ~& ]6 ~! E) N, @, D
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
) T6 K. o2 }$ r
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
) h3 ~0 C0 r' f8 B
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
: T/ W0 X& d8 b) W5 `6 N
5,model.transcribe 中参数说明:
/ e% t2 `7 u% L2 o
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
4 r$ h" g& G) N7 K6 P
其中
* T& K4 t0 l3 U6 U: n
word_timestamps=True,
/ v9 w' e% m; W% v8 o& {" z
保证了你能拿到 word,否则是拿不到的
* K9 j# Y; ?. H- w: E
initial_prompt = "Hello, welcome to my lecture.")
) D. t; u" U7 H9 x( Z4 M. T
保证能尽可能准确的断句 punctuation,但是不是决定性的。
! n o! s' k- X. Z4 Z' m C
其他参数可参考源文件:
) g8 p% G0 A# ?' c1 x
https://github.com/guillaumekln/ ... isper/transcribe.py
7 _! J) k. M: _% M' u
152 def transcribe(
6 C" |4 O1 H$ y( ]4 t
从源文件你可以看到是支持中文的句号断句的。
9 ?8 z& F! H3 \/ T5 O* O" u2 {
5 a! q% R) l- S& S+ B: E
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
; o, \) F. q* X. n/ |/ N( I1 q# @, V
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
q6 y0 V* y5 a9 F% `
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
0 k" a z8 V2 f. P3 J4 m) G3 s, k
' n1 p8 W+ E# D, K0 d
: k; R: Z/ A9 H0 V( i/ V4 m
! ^" [: B$ J& }
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2