|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 : `( D$ P+ M. d4 [( p% x1 b
& E% N+ c' Y: \借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
. a0 R( h. w4 @8 Q# ~" I效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
# V4 I; U2 w& e2 b" s* o----------------------------------------4 |: K: Q0 }2 Y- }( S
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。& U1 P# T$ m$ n* e( r
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。2 J+ Q6 [8 [' d8 j- k# [/ ]6 h8 {
----------------------------------------/ U2 X3 Y9 y* |( U5 Z& a/ y
https://github.com/guillaumekln/faster-whisper9 S v+ H- i8 F
安装如下:* j0 u) D; K9 c. }7 Y# C
1, Windows 10
9 @3 ]" i% @1 a) N2 E. Y; b2, Python 3.10.11
* `" H7 V2 E0 ~1 ]0 L! ^3, CUDA 12.18 ^! W# m' G$ z& K+ [+ T
4, 在python 3 中安装
1 C5 @6 T1 a; i; K$ ]pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
. ^* V* V6 J/ ~/ u9 K- |这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。9 a; O/ [. Y* Z% I
5,pip install -U openai-whisper
, ~4 ?, X$ N1 ^. O, |这是向whisper 致敬,可以不装
2 `5 ~; i/ f5 b6 X- I# I6,pip install faster-whisper
0 H* r: C2 l9 G* |) D# o: I----------------------------------------
3 \9 w* }$ |8 f: ^; K3 w9 ]whisper 我用的命令行,faster-whisper 我用的是python。6 F- a, w9 Y" ~' V7 L
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:. Y) g& `5 ^) q* l/ J, i7 |
9 z9 [" q0 J/ Y8 G/ m; X----------------------------------------$ T! N6 s3 j4 ]' q! X
! a# k1 C9 X* j. S% ~4 [7 ~from faster_whisper import WhisperModel
1 j# ~6 t) W. k4 T; K+ k/ W K8 ?
model_size = "small"8 u P/ \, w6 N8 j0 L8 ^+ i
7 v) v: O# `2 x. q1 e+ F' [
model = WhisperModel(model_size, device="cuda", compute_type="int8")
# [# D( C3 ^- T/ S: A: @7 d
* e1 R6 k! k8 j. Q0 \segments, info = model.transcribe(
8 o6 n# E+ o4 t A9 k; \: a" Z. D sourceFileName, ! ~3 b! W: e" L& r' {- X$ ~7 {9 J
beam_size=5, 5 t2 W8 g% u4 B+ x
language="en",
& K$ h) H7 e6 j7 z8 E! ?* C0 ` task="transcribe",
: o) l, r- d2 |( A8 s7 N word_timestamps=True, - d" a" S1 T' x8 `. ?0 c- \2 t
initial_prompt = "Hello, welcome to my lecture.")9 E5 M0 I+ j8 f4 j
' b) @$ |% j! _' \1 Qfor segment in segments:9 _9 j: b$ m- r3 w$ P
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))- k+ s3 c* [7 L) F2 b' }8 N
0 \/ [1 c0 @) |& j" `7 G5 d/ y for word in segment.words:
, h! S1 j: [# \
/ E/ W9 |) W k# e----------------------------------------
& h* \- l; E! Q- X5 d1 ~' f, z
& _6 a7 F1 n8 c# s/ j. V. a; C% V代码说明:
% ?0 _. m6 w& ^5 w# z1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
* v8 }. ~6 q5 S; d4 H! i但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
9 K5 w& E$ H3 L0 x2,segment 本身是很粗糙的,做字幕勉强能用。: j' y [% ]5 |* O( |$ P) G$ P
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。3 q# T6 A+ E# u, D8 |% d$ b |
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中1 F# T% V0 R7 W: I. n7 j
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
6 v9 q) L1 Q5 J' i6 s! ^ O5,model.transcribe 中参数说明:
/ R1 Z; v1 N4 J8 @5 `9 X你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数7 S! Z+ E/ ]5 E0 @! J' G, `
其中5 v, @' _$ |3 a9 b0 f- p
word_timestamps=True, 0 v4 q* F' U; l) ]
保证了你能拿到 word,否则是拿不到的. x2 l; a; @& t- u* Y0 L
initial_prompt = "Hello, welcome to my lecture.")
]* U6 W! L7 e0 U保证能尽可能准确的断句 punctuation,但是不是决定性的。
: p1 D1 R0 t: Q# _; z其他参数可参考源文件:
3 l% Z- D/ Y& v& L& [* |5 mhttps://github.com/guillaumekln/ ... isper/transcribe.py
: X' o5 A4 a4 Z0 O/ Q1 N152 def transcribe(4 Z. C0 T. I5 o ^
从源文件你可以看到是支持中文的句号断句的。
* F4 A, g) ^4 L# C0 @; J1 J2 D" ~6 ^* N' ~
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。& m; r) I, ~5 J5 T) U
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
, u, Q% w e/ H* w. J( M9 T0 T, Y1 N8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
7 j- n1 P; D* ]' z- b
6 k3 Z7 D1 D$ T3 q5 I0 p 8 I5 r" ]. i9 e& | B, I
$ @5 c+ d; @8 b" T* C3 O$ h |
评分
-
查看全部评分
|