|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 * `* W' A5 |- S9 E9 M; k5 B
0 A2 w/ `: R- a) q' `- g7 B* P
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
/ R" I) ]' V# B效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。2 m, s- V" T$ G" X8 C
----------------------------------------$ [# R0 F$ x- a9 e. a
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。/ k3 c+ g9 i' j; g
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。! Z% @* |$ f/ B
----------------------------------------
& W r# ~4 _2 mhttps://github.com/guillaumekln/faster-whisper
9 ~" ~6 ]8 Q5 A安装如下:
, B' Y5 l- [- K8 ]+ I. {1, Windows 10
n- {5 S; b4 C: l+ Z! X* j2, Python 3.10.11
1 T& y% L. A% m' |& e0 ]$ \( X- M3, CUDA 12.14 |: Z+ \. |/ |
4, 在python 3 中安装
4 m+ p9 S5 L6 ^" {0 w7 Gpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117* ]$ K( c8 C) }, H) D
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
: w, A/ n ~- ^' S9 g5,pip install -U openai-whisper
1 I" a0 y$ J* c' g3 P这是向whisper 致敬,可以不装
6 h- o8 E( n% H2 @" Q6 u" L- A1 k" o6,pip install faster-whisper0 M& F+ @7 b$ H* _( P8 A
----------------------------------------2 g" ^+ E$ Z0 x( y4 R# |5 {; w
whisper 我用的命令行,faster-whisper 我用的是python。1 N2 f2 l: o- Z1 Q" g
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
" U0 X4 W) S. u0 X4 e6 a* `- B9 O3 o
----------------------------------------( F O# ]2 K/ Z/ N D0 d1 @
+ {( e/ b5 X: |1 Hfrom faster_whisper import WhisperModel
9 L# i4 u* N1 l" P+ Z F1 M) w: v1 z* S1 ^) E
model_size = "small"
9 Q6 g7 D6 H5 H) o0 {/ T0 S0 z- Q R! U. b5 I
model = WhisperModel(model_size, device="cuda", compute_type="int8")( n' y* |9 [# U' ?! R% ]
5 `. J% |! |* q) X, N& k
segments, info = model.transcribe(5 X0 ^, d q$ Y1 L. c
sourceFileName, ) f5 N7 {9 y: m
beam_size=5,
# ^, \) p7 x' b language="en", 3 x! t$ y8 ^& {) ^3 _! ^9 J8 v
task="transcribe",
* g, `* c4 W- o$ a! { A8 }/ l word_timestamps=True, 6 Y0 T1 K6 {0 D' p
initial_prompt = "Hello, welcome to my lecture."): C# Q9 J* r1 U! B' A% L( s
* i7 b% ^2 o9 I, O9 f, S% Y3 }for segment in segments:# p+ U" f3 W! v0 S
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))8 |0 v. \5 V R3 O Z6 j' H! [2 W
+ t0 }" ]( e8 w/ h for word in segment.words:2 f3 Q6 J( Q7 |( A0 P' D
1 T8 ?& i. v: c! \7 J# J% O2 Y
----------------------------------------. r4 H L1 ^6 P2 H
3 t; s! M4 F6 j7 p4 m代码说明:
; t4 e: J+ r( v6 }+ N- U# z1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。3 |. b6 h8 q7 P8 e. O
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。: E/ H( N: D' V. }% D4 k- Z8 x
2,segment 本身是很粗糙的,做字幕勉强能用。
& c5 s7 e. w! S0 S t Q3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。 p: \+ n1 G( G" J, c1 s' X2 O8 g
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中 M0 ^; ~' G9 Q, q
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
- f0 E6 U- b! f$ l5,model.transcribe 中参数说明:
1 e/ N/ s7 o, A f你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数0 [6 ] m/ \: U2 |. Q- W* A' @
其中2 s+ i8 j4 P& r' R) h9 Z
word_timestamps=True,
4 ]5 @# a' }0 ]7 ?* d8 N保证了你能拿到 word,否则是拿不到的% V a: W" F; s8 I% x' }3 N' }
initial_prompt = "Hello, welcome to my lecture.")
# c7 u, k8 W% }, W$ [( _5 T保证能尽可能准确的断句 punctuation,但是不是决定性的。5 o2 n7 y" {! x
其他参数可参考源文件:/ W5 W. u* ~3 j' k' x8 }6 r
https://github.com/guillaumekln/ ... isper/transcribe.py3 m; i2 E6 p, y: y. L/ ~ d4 c1 z$ |
152 def transcribe(
& V+ q6 K. o$ o m" ?. ^: h从源文件你可以看到是支持中文的句号断句的。- I+ V3 H" c/ e6 V$ Y: `5 ~
/ v/ \& H0 r k* n3 K
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
7 C! l* j0 F) n0 U+ h4 E7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。( ]0 I1 U( P' J& E, ^9 n" q' N
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。- u* `. Q4 B# c" c! }
; F& X+ {9 C2 E# J: b& V: k9 [
9 K! G0 F% i5 N: y$ K. Q. W9 b9 O0 S! y. Q
|
评分
-
查看全部评分
|