|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
$ v# u- y- H/ M6 |5 B7 ]* X1 x. `, `) `# R( C R
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。 Y% ~; ]' z: m
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。( e' a& q8 g) K! a3 l3 V" s" ^7 a
----------------------------------------
* Y. x9 S" r: V( S. D显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
4 v2 Y9 E8 B, x! l在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
8 y5 Y, `7 u: ~1 T6 I----------------------------------------
$ @9 q& {1 O# r0 dhttps://github.com/guillaumekln/faster-whisper
|5 \! m0 ]" S: Q( S8 e; B安装如下:8 c, p. u$ @1 m R; I0 j3 C
1, Windows 10+ y4 S8 a* A" L/ J- j* U& I( J
2, Python 3.10.11
% i1 U; H0 h# E( i4 u. ~3, CUDA 12.1
n+ y. N! ~3 R4, 在python 3 中安装6 Y- T1 S* j; o/ `
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
7 i1 \, \( V* @& R; O- M R这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。' i( ]( F. @3 O( k
5,pip install -U openai-whisper3 y5 }) ]" n/ y3 R( [
这是向whisper 致敬,可以不装
; s& R M7 y$ ^0 t6,pip install faster-whisper
- | q2 v( T& h----------------------------------------
% M* K+ d9 J% [! uwhisper 我用的命令行,faster-whisper 我用的是python。( T6 b% y8 s9 O+ y0 h0 h3 J6 ` N
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:) p7 o, } f! v- P3 o3 }
1 e2 j6 v, U' C+ O) ]) Z----------------------------------------+ D6 V) g! R8 w7 h
* Z2 y0 c& u* |
from faster_whisper import WhisperModel: Z9 ^& x, w; ?; ~8 e
. L3 K- e& J$ M" d; }8 X3 X
model_size = "small"
: f( m E; b5 ^. u/ p1 x" C' F2 l
model = WhisperModel(model_size, device="cuda", compute_type="int8")
2 J& z" r* e0 \! [1 W- W3 }. t
" b( O3 q0 k7 R/ ?) ^' s) V6 _5 tsegments, info = model.transcribe(
4 z+ y# j7 I$ h" b0 I sourceFileName, 9 s6 j4 O0 ~* E+ f _, i
beam_size=5,
* L$ X& s1 z1 N* } language="en", 0 m M% _- W' o7 M
task="transcribe",
( E' j0 a F" e! q1 B7 b word_timestamps=True, 8 X/ h8 m, n, J' V+ V4 k
initial_prompt = "Hello, welcome to my lecture.")( ?1 h9 ^, g9 Z1 K9 _. A' s$ P: i
' }; L0 T; q$ _% gfor segment in segments:
0 Z5 g) D" _. e4 x. W print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))' P6 q5 k, a- T$ x5 [1 E7 C$ I
& U9 z, x, f+ \; i8 k* Q# K" F, S0 a
for word in segment.words:
6 W$ }9 w2 C. |6 u u( \& E& \ ' R0 O: U& V# L7 q. U
----------------------------------------9 b: F. X1 m& ^
) n) ^+ Q( a7 j& Z2 M; D代码说明:
& {. W3 n+ Q% t5 X" S1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
& f) h7 m1 }0 x6 |但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
3 q( l9 B/ V7 [% s% }2 N2,segment 本身是很粗糙的,做字幕勉强能用。0 ~( {# ~4 K8 {
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。: I$ i# R' F+ p) x
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中* u5 Q) G# O4 V$ I% m. M
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
- |6 }$ s% f0 O6 n. [5,model.transcribe 中参数说明:
1 r4 Q4 b3 V# T7 l) K你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
/ ^( E0 \2 e6 I其中
M5 y( A$ R0 u1 c, U \4 v8 m. e8 S, r word_timestamps=True, 4 T7 w5 q2 Q3 G9 p3 D
保证了你能拿到 word,否则是拿不到的* Q+ {2 ]6 D8 M$ v
initial_prompt = "Hello, welcome to my lecture.")
8 p5 l6 D/ J6 `% Z. p保证能尽可能准确的断句 punctuation,但是不是决定性的。
. l# N5 P- m% o7 A4 f0 x! i! [其他参数可参考源文件:& c. g1 M, `/ f% L7 n" ]
https://github.com/guillaumekln/ ... isper/transcribe.py
+ a6 i8 b, G: n$ h" V. U3 \152 def transcribe(
! Q, P c: j, r5 ]从源文件你可以看到是支持中文的句号断句的。6 {4 `+ T: [1 n8 q
) q; p5 p6 }0 L) B: s. l! c( S
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。$ M' |6 [0 i. n" b( p: t' {
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。) S8 K9 b1 g1 z) x- J$ p6 k+ i
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
. @& b$ O' j+ Y1 N Z: m5 w3 T0 N5 Z) A2 R: s0 w
: q8 C& X: W6 Y7 z9 v/ Q& e5 j5 d
: A3 u2 [7 Z1 R4 c+ L- f! r |
评分
-
查看全部评分
|