|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
) B. H1 W2 G8 `9 S- |: M6 Y. s \2 u8 b% W- F% K3 o
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。& D1 U( h( D, }% m/ z9 m
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。1 S, y! b+ o6 k; F, W" w- y
----------------------------------------3 Q6 m) o$ Y2 w9 C! d/ \# S: w
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。& M9 S2 ?# ?7 o& u& i, x
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。6 q T% z; b& V4 a# F% i
----------------------------------------4 t5 T1 ~- d) ^0 z; l" K& ?
https://github.com/guillaumekln/faster-whisper6 w3 \* W, l( z* Q- E1 {
安装如下:
' L& m4 T+ B9 X E, w2 p- a4 C1, Windows 107 ?2 T9 M/ c) q6 g' l
2, Python 3.10.11
1 R4 ?" k: y* J. J% D3, CUDA 12.1- V* V. }, L$ ^! X! y; n
4, 在python 3 中安装
1 a B6 E$ C& u! rpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117/ I! y& a+ I7 t( Q5 E- i8 a4 ^: F
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
" W3 S7 @4 \& L0 i0 R5,pip install -U openai-whisper1 j& R1 J, I+ v: I6 {- r% W
这是向whisper 致敬,可以不装
: K. W# \. n" u6 m; v1 N6 N6,pip install faster-whisper
% N) D& \; ^9 _----------------------------------------$ \4 o5 v% P" G, ^( k Q4 x9 _
whisper 我用的命令行,faster-whisper 我用的是python。
1 l* y, n( M; y. l; ` v3 {; O# k下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
9 B3 U" G& p9 l \& x1 ?) d; ?: ~2 F
----------------------------------------
3 W0 b- g l8 }% R
2 b& E" q& ]& i: Z# lfrom faster_whisper import WhisperModel7 ~0 e) y( F8 Z6 O9 i
9 r2 ^ R$ o; M0 smodel_size = "small"
/ J7 }- v) A/ z/ b# n. S+ b* k
' l* Z$ _: z2 f) j0 u* m$ bmodel = WhisperModel(model_size, device="cuda", compute_type="int8")3 j3 Y6 y8 U: r; k! A& U1 ~3 G. l
( t4 ]8 v. k, A# e v
segments, info = model.transcribe(
; A) C" G- W% o$ e { sourceFileName,
2 U; ~" c5 i! Y4 o/ V9 v beam_size=5,
6 g* v i$ G- _. O; F language="en", $ X4 p4 ~& y# U
task="transcribe", ! |# | T5 `+ c& A
word_timestamps=True, 4 J A t J' N2 K( r0 z
initial_prompt = "Hello, welcome to my lecture.")4 J7 u! c) h/ W K8 d# U: r7 U4 A# _
4 q. |9 z& @4 A) k' k- k( Dfor segment in segments:( j" T1 l$ Q) V" Y( ^
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
1 h7 y7 v5 X: V& Y6 j. J. r2 o/ `/ {
for word in segment.words:9 @7 L- j* g. r1 q$ Y$ g2 u5 g `
: y J0 w( X- X1 c) [) g5 s
----------------------------------------2 u! d/ P; T! S! q( p
+ R' d) p2 S f1 ^' b
代码说明:3 b6 `5 V/ P* N8 c4 a7 _, W
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。5 O0 z, e b% O# F4 x1 O1 R- t" ~
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。& {" {1 C4 N% c. Y* l, }
2,segment 本身是很粗糙的,做字幕勉强能用。7 I- I" ], s/ q- N+ X* V
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。- k+ G4 k8 `% W- u) @8 u) V
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中5 \ B- z% ~% u8 \( r9 w& L
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。' t2 V1 a3 i0 V7 B* Y
5,model.transcribe 中参数说明:$ z; H# @* G Y. d7 z! `( g
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数# V/ r! G3 u9 {: w* E4 I; E. y5 Y' w
其中
( D: U$ t e1 F: H, k& u1 Q7 X$ a word_timestamps=True,
3 S" D4 w1 D+ t S. {% r: d保证了你能拿到 word,否则是拿不到的7 ]. V1 `! s# z1 T& l4 q
initial_prompt = "Hello, welcome to my lecture.")
- X' A8 t4 V! p* ]& V5 r保证能尽可能准确的断句 punctuation,但是不是决定性的。+ M8 z/ K! e0 w/ }; v& m
其他参数可参考源文件:
; e, ^( i. K# Z7 O! `% q* j" m; q! Ohttps://github.com/guillaumekln/ ... isper/transcribe.py/ K3 x; a$ S& n6 S- W8 w
152 def transcribe(
% e q. {7 \7 H* G, W1 I3 C从源文件你可以看到是支持中文的句号断句的。- c2 O- g2 C" U2 a& u2 y
# j$ q/ L) V3 u! f3 b# B- A1 c
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
g1 Y3 o9 q" V/ u* O: f7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
# \$ X6 ^2 ]/ g) c8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
# \2 z6 i) L$ Q7 z- j) ~
& D$ c7 v; ^# b: S% l
D+ C" _9 r8 [9 f' G' T0 n- Y* y( [' X: ^5 y" w
|
评分
-
查看全部评分
|