|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 1 k3 V1 n) _' }* }
3 ]4 t' A6 b& @' F- M! N
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。' t# ?3 v: r3 H/ i7 s; b
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
" a5 K; O) T, D- l* y, W----------------------------------------; M0 S$ G$ f; E1 d2 B8 v
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
( ^" {8 h* l; O+ E6 e/ c1 u在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
& d# Q, V- d. a( D6 x5 R# l/ b---------------------------------------- X8 w0 U8 T! Z: ?( r
https://github.com/guillaumekln/faster-whisper& I: S9 v' s6 a5 W( c/ }! Y3 q
安装如下:
. @2 \2 [ \" A: n1, Windows 10
% O* W1 `8 V/ X- k" P- r2, Python 3.10.11
2 g2 A& y9 `4 W( \9 u8 \$ G7 M2 u. v3 O3, CUDA 12.18 o( `% Z. ]0 O9 a7 O
4, 在python 3 中安装
/ u' v/ E2 k$ r& a0 zpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
1 k7 H# r" E! s) a& Q这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。( M- N& ^+ F: u
5,pip install -U openai-whisper
4 g5 c- O! F2 A1 [! W& X% `这是向whisper 致敬,可以不装
0 c- L/ H# R1 ?; M2 q6,pip install faster-whisper4 ~; v1 ~3 x; `; a8 f
----------------------------------------& q/ K* N, s3 U3 X& d
whisper 我用的命令行,faster-whisper 我用的是python。/ g7 c' S9 {; j0 u* V+ a1 H% e
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:/ D/ d- M2 |9 y/ q; v( Z
7 w3 y# j( p* F+ p2 T$ _
----------------------------------------
, t( s; K! X" f- O- g) Y* Z, h* {5 M0 I6 X* _
from faster_whisper import WhisperModel3 T* k- A/ y3 V" O
* x( Y" O% B$ A" l
model_size = "small"' h6 L8 t+ T- x4 s
5 C# U' b$ a3 l$ x- ymodel = WhisperModel(model_size, device="cuda", compute_type="int8"); \% x2 W6 f# i
. }, i; D# \% Y8 v1 m9 J! o4 r0 z! Y; S! Zsegments, info = model.transcribe(9 _, O/ A4 Y- m; Y; P! Y' ~( j
sourceFileName,
, ?7 h& m2 I: O# B' A beam_size=5,
$ M* h- B! J% w# s language="en",
/ S" d# O6 N& }: z, a task="transcribe",
8 Q. ^5 X; L+ K8 P9 H) N, M1 g. O word_timestamps=True, ! F, w3 s3 [" [4 ?- z, ~/ B8 [
initial_prompt = "Hello, welcome to my lecture.")
( m) b6 A2 j3 y/ ~" @
3 e3 o4 y4 X b( s* Yfor segment in segments:
# f1 Z! y( a; d) v2 h print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text)): u8 F( g; Z3 v9 D# k8 }
* A6 h5 x' |9 r for word in segment.words:: \4 q' F) p$ P& ~* U4 \) F
3 w) K8 }6 p- k9 D
----------------------------------------8 O& Z2 p, f& [% c$ e I
5 E- K( G. o9 W8 T+ Z
代码说明:
9 w% R" e; M. d3 p1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。% R, }& k* B8 Q" u" r7 h
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
0 b9 g. t' i6 H* O2,segment 本身是很粗糙的,做字幕勉强能用。
3 H% \0 O- c0 }4 u- W3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。2 Z- h9 ?1 j4 V Q' d% m7 ?) f% |
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
5 Y) S2 H' ?+ _$ p! [比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。5 U( P) ?7 A0 d
5,model.transcribe 中参数说明:% d4 C) V4 U8 L
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
- ?3 L. k" }" u- Q, D5 |其中" b% ]3 ?2 t6 h# Q
word_timestamps=True,
. T& d8 W, U1 }/ F: Z* [保证了你能拿到 word,否则是拿不到的
; c+ Y+ x$ v/ V2 x& P initial_prompt = "Hello, welcome to my lecture.")
6 G P: ~6 B* \' f: y0 P3 v2 i保证能尽可能准确的断句 punctuation,但是不是决定性的。
& m$ n/ c8 |( [8 t! ?- x其他参数可参考源文件:
7 X8 n @$ `" r+ L0 L9 i- Chttps://github.com/guillaumekln/ ... isper/transcribe.py0 a8 M! [2 d% b; }; m+ ]5 E6 I
152 def transcribe(
5 \# `; q( T( u- G3 ^% \7 q* J' s; E从源文件你可以看到是支持中文的句号断句的。
# G+ Q# l6 g+ L, _5 _' R
( x. ]/ p1 h4 m" Q+ A& H6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。; ^3 Y; @1 [4 P: b
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
/ c/ k* @& g# T+ O6 j8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。* T) j! x: w) O
2 C s1 _2 C4 u/ \
( ]1 N+ H: k; P* q6 H0 W6 b2 g \+ {/ J
|
评分
-
查看全部评分
|