|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 $ ]+ j6 }% |9 T; T; ~
" S2 e: Y) t' M6 P7 c1 }* j2 j2 y借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
* X+ w" K' l7 E. O效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。4 {, k! T# q0 q& [
----------------------------------------
: q8 ~6 O) q2 K8 J显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。: T1 E3 V0 u: u$ b: i9 {
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
! J& d! H; d0 _----------------------------------------
0 E; o+ _% u! I( s0 Ehttps://github.com/guillaumekln/faster-whisper
1 E0 x7 B9 |$ x安装如下:9 {# i0 D9 ~# s# p( u
1, Windows 10
, f$ C/ E" _% Y3 {/ x( m2, Python 3.10.11
+ I6 _6 s0 d" l$ U8 c6 n3, CUDA 12.1; {) q& q) y: U, A& f* r
4, 在python 3 中安装
- d# X( U& o# T7 ~pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
. h9 F2 Q3 L7 R1 F+ N& R这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。9 a& H$ U& N9 z; E0 ~# G
5,pip install -U openai-whisper
6 I* F1 |/ j6 b2 i3 k0 q+ D这是向whisper 致敬,可以不装1 A! V" v( s; x3 s7 `, j- @
6,pip install faster-whisper2 K9 E3 L& R' N9 s
----------------------------------------
7 X8 k" ?4 C7 k+ G" p. qwhisper 我用的命令行,faster-whisper 我用的是python。: W9 a7 j4 |. q1 X& H
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
$ @3 P2 f0 h5 f @8 m! r( X0 u$ T; R- Q7 D/ I$ m& c! w
----------------------------------------
: K# k& v1 s5 s) H" ~; h4 Q: c" G6 m4 b
from faster_whisper import WhisperModel! N- l) Z! H {8 ^5 V4 R
8 K6 f% W5 A3 U( }2 M& r
model_size = "small"
8 h W( R1 Q& l0 H3 n& C: N( A% k) u5 O+ t% B2 j
model = WhisperModel(model_size, device="cuda", compute_type="int8")1 C% Q4 d7 E: V) ^7 m* H
+ O3 a& P5 K7 T) P+ U
segments, info = model.transcribe(9 l" f6 k3 M2 H" R/ u( b _
sourceFileName,
4 w# j0 Q K H beam_size=5,
9 F4 j8 r' {3 Y+ A language="en", & X4 h1 \/ t, \5 h& r
task="transcribe",
: d3 M. a5 S! @$ B word_timestamps=True,
; I& [0 C( O* G0 f- \; o, T( { initial_prompt = "Hello, welcome to my lecture.")
( q* M6 d/ \" f& S; r
* n* H F& W) G3 Q( \' z( sfor segment in segments:5 T7 |- v* H! N7 }% r
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
2 W+ n A; d8 N. y
0 B, _5 g: p8 e: f" m3 Z2 \ for word in segment.words:+ O' @7 q" w7 O E' ^. ^
" P8 L* D( A) N7 g9 t1 {
----------------------------------------
, m$ Q& Y: C" O; e2 W0 K$ y" R+ G- o# M0 ]) d
代码说明:/ g3 U2 d' c. ]5 I- r
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。% x# _8 H9 Q* ~' Q! t1 i( m# f0 ]
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。- h5 _, }! s" q* y" S& D; z
2,segment 本身是很粗糙的,做字幕勉强能用。$ @) d- T$ c, n ]* a+ K$ o: g
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
$ \( J" p2 \/ R/ {4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中4 z0 r2 F: q, T) q
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。! O+ N* s' v3 M9 j0 m. c4 {4 C3 v
5,model.transcribe 中参数说明:
+ M+ M; y0 c y. D/ a; z$ U7 x4 X你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
' h% k% c$ l2 X. X6 x0 o其中2 \. k: L+ {1 U2 k
word_timestamps=True, % J5 C* D8 {* J9 ` O. D
保证了你能拿到 word,否则是拿不到的* O6 A1 p0 @$ h1 D, c2 K; t/ k
initial_prompt = "Hello, welcome to my lecture.")
O$ I; Q7 L f8 u% P" C保证能尽可能准确的断句 punctuation,但是不是决定性的。
. H; k* ^4 W3 Y: `8 v. R6 N其他参数可参考源文件:
' d2 U5 _$ e0 O+ [& j1 ~8 P0 yhttps://github.com/guillaumekln/ ... isper/transcribe.py
1 {5 d* k% r3 K" Z$ ]: Y8 o152 def transcribe(7 w0 B& \: o) m( o9 A3 k, B8 s
从源文件你可以看到是支持中文的句号断句的。+ u) m& C3 e v
" q. }- m! j" ~0 J
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。+ t8 O! d. \. t
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
5 x6 B. Q& e6 \( x8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。: G, \* ?6 }/ m' c
% \' F0 N) h: Z* u/ l
" Q! s; e" c2 u, v+ k# H9 c' J. {# M$ s6 s9 t
|
评分
-
查看全部评分
|