|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
5 E' ]: t' n: T+ k/ W. }
! V% `3 ?% k' u: c- E借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
" N6 r/ m: y& f* L' T0 L- {6 G效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
" j0 X+ t. l* W' w: w6 ?----------------------------------------- {2 x: O% `- P0 Y% I/ V
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
" C- ]0 S& Y$ p在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
$ t) d0 a* x A----------------------------------------! [( N6 m$ a, w" p, T
https://github.com/guillaumekln/faster-whisper& V2 R/ j7 c3 y6 F& p, {6 y
安装如下:
! z1 Q) N9 m( D- _3 p: {. O% E1, Windows 10
6 _) C7 F- _: l% r. A$ M* `: \2, Python 3.10.11' [% p! X0 J* ?3 ]
3, CUDA 12.1: a( B9 P# F% U
4, 在python 3 中安装% N, b0 @; ~ z
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117! C x, o2 r* e" u- s. N% _
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
0 w4 f: w4 O* }7 \# X" N5,pip install -U openai-whisper
& s' P! J' ~' i, w1 r这是向whisper 致敬,可以不装
5 N) Y# L1 X0 k5 _* {2 K$ S9 H6,pip install faster-whisper4 b: Y6 Z3 ~2 v- p, j
----------------------------------------
% r8 E6 u8 E3 \, j' N ]$ [whisper 我用的命令行,faster-whisper 我用的是python。5 J, W/ y4 g$ g5 d) H" h
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
0 ]+ ?) x9 \" L. d. H3 B* F- ^0 `4 |3 \
; J- i0 x9 y, j4 Z- e I----------------------------------------
2 ]( j1 H/ X: a$ f! n7 H
8 n. P* `, L& B i# ^# t2 r7 Ofrom faster_whisper import WhisperModel$ D) L# a0 J5 n, i; ^1 f$ w3 B8 y
+ m" @3 D0 ^& b' i
model_size = "small"
" f3 ~7 ?, U9 F5 Q3 p6 j0 t# r) Q7 W9 K( E# _9 A! n) ?0 S
model = WhisperModel(model_size, device="cuda", compute_type="int8"); i& z# D6 [) g
3 {! J. k' C: D/ U( |' k4 `8 F' Asegments, info = model.transcribe(6 n* e3 {# M2 T0 X
sourceFileName, * {: E4 f1 C4 R- M; ]; k
beam_size=5,
) ~& }' M; P* ~) X# q language="en",
/ a, J- ?/ s" B$ g8 ]$ D! Q task="transcribe", I. f. c: T( Y. E2 |% F6 m: L
word_timestamps=True, 0 P3 X# C7 S' q: R& e9 r( X' M9 V
initial_prompt = "Hello, welcome to my lecture.")
) ]5 `& g3 l- x, I D
& S$ l' q8 D+ B% m6 @6 U+ g" T- Mfor segment in segments:+ W3 Z1 i' u5 ?
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
' _- o: t% @+ r/ \% {, F% q. _
, J! E: i" g8 u6 p3 v9 H& D for word in segment.words:
- ^- G& j/ o4 G 9 I$ N9 K" T3 `. O6 q" I$ Q) Q
----------------------------------------
) @$ L0 Z+ y& ]: r* ~! S* W# e0 _* g
8 r0 ?0 ?6 e' L* T代码说明:* [2 K4 @" j5 d/ j! s8 d) ]3 C* O
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。' `, }: M7 m7 T2 \ X( W0 C
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
- j) T3 ^$ ]& h8 A" z: M2,segment 本身是很粗糙的,做字幕勉强能用。 B5 J0 v9 \$ x E. z4 d
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。1 I9 l. N8 V' h [0 L
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
3 Y6 Q2 w. H" @, f比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。3 s$ k. G4 L) s% P. F" @
5,model.transcribe 中参数说明:2 R- v# f6 }# {, R/ W; ]
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数. m9 V' r5 ^! x& _! k) F, c2 v6 P
其中
2 Z s$ @& O& g) n* } word_timestamps=True,
. f- a% z7 F" s# w a# z保证了你能拿到 word,否则是拿不到的* G( ]0 Q/ m) z
initial_prompt = "Hello, welcome to my lecture.")2 I& h7 a( a! T! Q
保证能尽可能准确的断句 punctuation,但是不是决定性的。
( e4 q% w6 m# x2 U8 ~/ D# ~其他参数可参考源文件:
5 u n% l8 B, {5 g! v+ bhttps://github.com/guillaumekln/ ... isper/transcribe.py$ [3 V& F0 u2 F2 ~) E
152 def transcribe() z& G* l0 x. x! u c3 w0 Q
从源文件你可以看到是支持中文的句号断句的。
$ D+ d2 e& c5 B8 E
) k5 ^+ ?7 k5 x$ v/ ]3 l8 C' z6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。2 U- `( J1 s4 X& _! @ w
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
, a: O( j+ O% F2 n3 f7 @8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。. `7 @% Y+ K q
$ \' P, o# |& |/ A% n8 I
4 X# i! B. n0 b3 }* T* L/ n* s L7 f9 h% A R1 k+ w4 v
|
评分
-
查看全部评分
|