|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ! F; e7 G& u2 C% o- I; Y
4 z* t8 f) _6 N7 O( ^% Y借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
% L+ g' Y4 S0 n0 t8 Y- \0 y效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
) v3 H( K0 ~2 E8 o" I----------------------------------------
' T! g* ^' M2 A- h* m- T7 u! O, ?显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。1 j/ T3 f# {' i. s/ _
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。" [) Z. i0 W! \
----------------------------------------2 \1 D' R/ \5 }- J3 M" c- K
https://github.com/guillaumekln/faster-whisper+ b7 F: N% G3 I# l; V
安装如下:" V1 E- |% o$ j4 L: ~
1, Windows 10% U; O! f+ d8 D. p0 _
2, Python 3.10.11
( v1 Y% q/ V+ n, o3, CUDA 12.1
4 A% u* ~6 E& M/ F0 _4 {/ @7 |4, 在python 3 中安装
* P& a3 U0 v* I* w$ A; \6 ~$ G" ~( k+ Apip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
+ b4 b6 U3 R4 v. T这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。" o4 `% x3 |% e5 g/ G
5,pip install -U openai-whisper5 e% x3 G- m3 g9 B. i
这是向whisper 致敬,可以不装
9 K; y& S* V* e8 Z$ |0 x6,pip install faster-whisper6 e7 l; \" B- U
----------------------------------------- \5 D- b |# H' i/ Q; w- y
whisper 我用的命令行,faster-whisper 我用的是python。- I0 D1 S* i6 U/ E% ?$ }! y
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:- r% e7 B$ P- c! l3 o1 C9 @! s
7 K2 h3 ^- L# o) E* ~3 c+ w, O
----------------------------------------
" C1 m' ^7 Q0 Q1 z; A: y8 t
1 C7 J0 W- ?7 a" u+ n! Lfrom faster_whisper import WhisperModel
9 P, I5 H1 _* o; X# m( w+ u ~+ }; ]/ Y! A; d% ~
model_size = "small"
/ m5 e5 A9 W7 A! s- I
# N! h' F5 e. b6 l y; ^2 |model = WhisperModel(model_size, device="cuda", compute_type="int8")
3 _( p, L+ [# s0 @5 H$ H
8 m3 D+ n% e H$ R' ssegments, info = model.transcribe(
1 Y1 N3 S3 n A0 G4 J sourceFileName, ) ^# R4 D+ k1 Y9 @
beam_size=5,
! ~% \) e% i3 i language="en", ; S/ |& a# E q/ X3 I- Y" D
task="transcribe", w/ @ D) e: }( M4 k
word_timestamps=True, 2 u$ e& F) i4 l( \9 ]
initial_prompt = "Hello, welcome to my lecture.")
2 m- a+ @* |8 Y3 O7 y% O6 z9 ^7 {. S3 b$ C+ n
for segment in segments:
3 R1 w1 r* U0 s- y9 \3 H5 S print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))+ F+ h, u4 s0 a) R( p
2 n3 p7 ~0 E3 Q5 G$ A' z for word in segment.words:
$ g$ l6 x9 N( O1 ]* v6 L! c- m . {6 ?3 _+ Z) e4 K
----------------------------------------; \7 K: K: a+ @. [+ {
4 k8 E( R& P8 b" W5 h$ A. \
代码说明:
! y; v' q5 L! }3 i) T/ c, a1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
* |% M/ m, }" ?但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。) ?2 g1 C8 J O4 q
2,segment 本身是很粗糙的,做字幕勉强能用。
" s2 W* L$ ?7 V3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
; r# G3 E4 \+ Y5 Y4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中; e+ n& g) I s9 p+ |
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。4 q5 B7 E! \- }; m6 T3 {
5,model.transcribe 中参数说明:. e3 Z& A- V8 p% O$ R4 {8 o9 J
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
6 ^8 ^* U; p7 s/ i其中+ d8 m! o% l0 v$ A) N: ^; J
word_timestamps=True,
! [$ W6 N! M# e: Q保证了你能拿到 word,否则是拿不到的7 S+ B1 w y4 c+ i& {
initial_prompt = "Hello, welcome to my lecture.")3 J* h9 b7 s8 U7 U, h; k& R$ ]$ P/ i6 u
保证能尽可能准确的断句 punctuation,但是不是决定性的。
# _! t* @3 r: T8 k3 q其他参数可参考源文件:
; o/ f) i4 u2 Ohttps://github.com/guillaumekln/ ... isper/transcribe.py! v( v. L9 V' r: ?- D, o
152 def transcribe() o1 ~8 Q; N; w8 \
从源文件你可以看到是支持中文的句号断句的。1 f& U, P8 E* y! h/ A3 G
( @7 Q6 J4 x. \" }/ K B; j0 `6 z
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。# y; n/ a/ m( z0 m3 x/ a
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。! n) \* P+ i5 N, w. S3 m$ i
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。3 `, U7 m: _& v9 f4 j" x' b3 H
6 J4 z; F6 Y; N
; F$ K' ~0 G8 L7 e
" [% Q+ T+ z6 O; U) e4 t4 d |
评分
-
查看全部评分
|