|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
0 K+ d8 o1 g. }9 \% M: A
4 f$ p( B+ f1 A& r9 d; R! t' Y. U借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
% W, R. _, V- ?0 z& {2 U; e效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。6 p2 T6 s+ |. L3 j% a3 q
----------------------------------------& s6 e, f6 \9 L& N: ]
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。' u/ u, n% ~: R
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
% k& ?& _1 V0 [1 Y/ k----------------------------------------9 M9 u" c L0 P. T0 f% M
https://github.com/guillaumekln/faster-whisper' J6 R/ Q: F B4 s ]/ j7 W
安装如下:6 e k! {$ V. f/ d" p( |
1, Windows 10
t6 h; A* ?: O' G9 I( x2, Python 3.10.11' Q/ ^! P1 T" m, i
3, CUDA 12.1
! K! V! O1 P" o% ?" M6 Q/ ~/ | [4, 在python 3 中安装3 u. W! h+ l" N/ E7 L
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117* L4 e; l1 h. J- U
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。& U1 B- R/ [( m/ F% ^ a/ L H
5,pip install -U openai-whisper
# n" f& Z% P" y ]4 n% Q1 h这是向whisper 致敬,可以不装! ~ C9 k ^ J3 }/ }
6,pip install faster-whisper# `) h2 \- f' ?; N9 U
----------------------------------------) @. O0 o7 w( ^1 J ?
whisper 我用的命令行,faster-whisper 我用的是python。7 W9 m' F& T9 {: S, n
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码: `. ~: h: w7 f" n0 j
. [4 X5 O7 ?- G, e----------------------------------------+ U! r. w2 B5 U
1 x8 z" }4 O {' m6 C
from faster_whisper import WhisperModel
6 {4 d: I: L1 s. t7 r, M. I8 x0 A5 ?) a. O& t$ o# p
model_size = "small"; l7 }, V4 j7 d: s% l# l
% Z, b- X. b5 z+ |
model = WhisperModel(model_size, device="cuda", compute_type="int8")1 y) N% T0 Q. H, j( @
0 _4 O' Z, J$ d' B" P
segments, info = model.transcribe(( R+ }4 |4 c9 V7 P7 E, d
sourceFileName, . \/ e* N% R4 ^+ U' L) Q
beam_size=5, 0 B* @; Y% i l
language="en", * s/ A3 i# V: s9 w7 C5 x: l- Z
task="transcribe", ' D8 N& ^+ r e# x* b& w+ z* ^. Y1 w! M
word_timestamps=True,
% G% z h- K3 t, V7 G initial_prompt = "Hello, welcome to my lecture.")
6 w+ j8 v- K+ l! W1 X! f3 U! p/ L9 b6 R
for segment in segments:: n- t4 p% @8 @6 r) [8 S. Q
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))3 N. L) x, \$ s2 |
4 o: ?% V { @7 {" s; |: J. S
for word in segment.words:
' T' e; N$ P# [1 v$ ^, p8 `8 b, k% ` 2 Y+ B# t9 w: w. V
----------------------------------------
1 G r/ K4 N6 `" J5 E4 @# B8 X! P6 }1 p
代码说明:/ F7 v( x& _, {; H( _; V |
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
}. E* \) L) H) B& T7 s% X# g E. G但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。" d) B% D. l0 B( i9 `
2,segment 本身是很粗糙的,做字幕勉强能用。) u& C9 ^& D+ \" q" a/ ]8 k' q
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
5 ?$ B' z- O9 A4 \3 M8 j3 U4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
O9 z* U6 }$ o) a* f( j比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。( W, a% F) S0 e. s1 I+ X
5,model.transcribe 中参数说明:. V* Q7 ~" ?6 y9 A
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数 t2 l, A# V3 y1 ^, G% e5 h6 Q
其中
& V M# k+ p, ] word_timestamps=True,
( F* A$ p$ p, [& i; @4 e3 _& t保证了你能拿到 word,否则是拿不到的$ i0 {; e3 Q! I
initial_prompt = "Hello, welcome to my lecture.")3 j9 U) k: r4 y: ^
保证能尽可能准确的断句 punctuation,但是不是决定性的。
: |- C$ L* ]" V: O# \& C其他参数可参考源文件:
0 ]6 R J7 w3 n4 uhttps://github.com/guillaumekln/ ... isper/transcribe.py- N3 Y! I# [/ ?6 a6 ^
152 def transcribe(1 D0 U0 _3 {0 n" |$ f! l
从源文件你可以看到是支持中文的句号断句的。
- ^. w% |8 I/ i) [; J- G$ I! e3 K: K* V( n* T0 P& z
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
* P8 G4 {8 I7 k$ P5 x/ F7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
% {, k! [# v% ?8 H! X4 W$ I. c8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。1 W6 s7 k! M/ y* F3 g8 p; a3 j8 \
' i$ |* a; }4 y- E. S" O
5 k& _9 U) \7 I$ B4 U) l
% H( V! n( T6 }4 s' \9 } |
评分
-
查看全部评分
|