|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
& [/ |! Y6 O: y6 O& M- s# f+ k; F. M8 t4 x& O
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。# Z. |0 A2 }* N# u2 V
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
( k# l. r8 k/ u* b+ N- O; [8 E' c----------------------------------------
1 @0 [' E! n, a+ F. o: b显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。8 G) y8 n# i8 [9 x" |8 H3 Q5 `/ |
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
7 p# V- d: l M3 g----------------------------------------
( Z. J/ c# i+ Qhttps://github.com/guillaumekln/faster-whisper3 M- [& F, ^; k0 e7 p: P
安装如下:/ f3 @8 i- ~+ D1 |5 k' V, G
1, Windows 10
2 i" K" w$ U% h. d& C5 [2, Python 3.10.11" y8 @: d h& c, t: i
3, CUDA 12.1/ s# R( Z6 K. ~
4, 在python 3 中安装
1 ~# K K9 p) H* H+ S2 \/ N5 Bpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
; {) m. X5 h6 x" O* M* f+ H这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
7 H* P: D* {% i' [# [: X5,pip install -U openai-whisper9 U, h& m* b1 b9 z+ ^$ V8 a' V9 t
这是向whisper 致敬,可以不装
; x2 Y# t X* Y& ]6 ~6,pip install faster-whisper
B' k% L+ o+ p3 q+ }1 d----------------------------------------
* b; a; p$ `, l4 d. Mwhisper 我用的命令行,faster-whisper 我用的是python。
5 \! \' b/ p9 ~下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
# I: n/ L1 `) i& q# F$ T! q8 `+ h: G0 l/ F
----------------------------------------: Q& T7 V9 w, n8 v* T
: }- `9 ?" N( |3 n O; j% gfrom faster_whisper import WhisperModel' a# s9 L1 l/ R: K- x6 w& \
. \$ t8 H! b3 O+ p+ N0 t: m0 Kmodel_size = "small"
" i8 o7 `" b v4 m/ ?. [
# h1 B# L( k+ z4 m- [# h( i* qmodel = WhisperModel(model_size, device="cuda", compute_type="int8")) e( `7 H y0 g1 f# u- C8 w. ]
E. z; G3 r) V8 E+ E1 i! i+ X% ]$ t
segments, info = model.transcribe(( o* t, S! B2 O" o( }6 y
sourceFileName,
0 O7 B8 k4 a4 F/ |3 @' i beam_size=5, - m! Z! Q8 i! U# \+ G! x4 K7 X
language="en",
; q$ W% {- q, k* h% ~1 R task="transcribe", $ {, b4 Q, p! V/ V, W
word_timestamps=True,
0 d5 L+ c% _- C( j initial_prompt = "Hello, welcome to my lecture.")2 O6 D% t# K2 \) R0 v+ N" W ~
5 Q6 S8 f7 d' \: `" a+ {3 |3 E
for segment in segments:
& Q5 I5 I) { I" J9 i) f6 P9 V print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
1 E2 V$ b7 `" b/ c) ]# Q2 k n L( C1 K7 E' F
for word in segment.words:! q# S* `4 E4 _" f: Z* |
/ H9 Z$ N/ V& e0 |3 d9 [
----------------------------------------
4 d+ R+ M* M# ?, n; O$ o* R, g" D. y
" ^2 t; U9 R1 D6 I0 e0 W2 T代码说明:
; [- t0 s. y7 ~; [& H" P3 N6 Q, C1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。# v, [4 T2 N1 f2 f+ e
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
$ m/ E3 b( n8 `+ M2,segment 本身是很粗糙的,做字幕勉强能用。! Y* b2 j( G( y) V
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。& Q5 m/ E3 ]" s# A
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
, c, M: I \. j2 }- `$ {9 ^比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。/ h0 a4 c9 Q; d, T
5,model.transcribe 中参数说明:
& @3 P, K3 d2 V8 N; }你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
3 g, Q6 E4 _6 x/ K6 i其中
, y7 K. N% b2 N: V( k word_timestamps=True, + x( K' X) _% F# {$ i b( d
保证了你能拿到 word,否则是拿不到的+ F8 U% s6 [! O& T* ?
initial_prompt = "Hello, welcome to my lecture.")
! @/ M* C" q+ I0 H* j x. \保证能尽可能准确的断句 punctuation,但是不是决定性的。
1 n" J) P! _ @( [0 {其他参数可参考源文件:
" b2 D% Q9 Q0 }9 y j" Chttps://github.com/guillaumekln/ ... isper/transcribe.py6 Z* Q! E- c; x4 \5 H
152 def transcribe(
. l/ b$ _- v0 S7 B& `. \( Z4 p从源文件你可以看到是支持中文的句号断句的。
. C9 H- `3 f( q- ^, a' n% a* Y5 e/ y: P2 O: J) y: b6 x% I
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。7 [( z: G. w6 `. W1 B
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。( D P4 V8 |' A) U
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。+ c0 ^8 K1 s5 M2 @- s
" ^$ @7 v# R" B* J ' ?; I/ a: r6 e$ n' a
! A- s7 C6 U, P# R
|
评分
-
查看全部评分
|