|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
: H0 }4 o) B( J* s ]
! W7 h# g" q! h& W7 c借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。6 i! i/ Y/ L! W) Z( \. E" M, e1 X
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。6 e' Q) I9 D: g$ e
----------------------------------------
2 ~' P6 |( u6 Z- P显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
T0 y' a0 r- I4 {6 c3 L2 B在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
6 f( C, l% U6 o----------------------------------------
- P; a/ F [) S& C- I. ]https://github.com/guillaumekln/faster-whisper
8 A& M: |9 F( e# X安装如下:# I' T6 [+ w1 O- C% J ^
1, Windows 104 T. q7 B! G$ [5 A8 l- K
2, Python 3.10.11
; L: M/ \& ? g3, CUDA 12.1
3 x, ]. G/ g w4, 在python 3 中安装
2 _% k. y4 ~# k3 E" T7 x/ N) Cpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
2 Q- o9 ~. r/ {$ L- |% f这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
+ q$ k" _, S* J. [: W) U( {5,pip install -U openai-whisper
/ @0 X* u( H1 e+ g- X, N这是向whisper 致敬,可以不装
8 V& C8 _3 B/ S6 B1 `6,pip install faster-whisper* e7 S- [9 R4 a9 |: t2 q
----------------------------------------- t& E8 S: ~' o
whisper 我用的命令行,faster-whisper 我用的是python。
0 N. E/ t* A! I; S* _3 t4 `: J下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:1 M) O' ^% G! o2 ~/ a* \# r
: _) I$ V3 ]( |' ~+ s" ^
----------------------------------------! I5 ~& b3 ^! y5 W; a2 w7 l1 M
5 R$ b* w# n- q6 b7 sfrom faster_whisper import WhisperModel, m, [+ `" B- c; B P
s3 n% C: f( J8 N ~+ a
model_size = "small"0 e' Z* d' b/ g' a, T
. B+ p C, a4 R
model = WhisperModel(model_size, device="cuda", compute_type="int8")
9 }8 N8 u C3 f. [& p4 l5 x+ t
1 |5 o5 x; z( E7 _+ ]0 d. ?segments, info = model.transcribe(# k6 h8 Q A8 ~2 {
sourceFileName, 2 P0 v, `$ M4 Q8 F1 q+ z: g
beam_size=5, . N3 ~/ a4 F' J7 i5 R9 S
language="en",
" c( P$ t. F; h' I$ [ task="transcribe", 1 R1 u) b" R+ C7 o
word_timestamps=True, ) P$ `) i* T4 l
initial_prompt = "Hello, welcome to my lecture.")
; s- y- A- z6 B$ N4 [3 N; D0 `, A/ D* ]
for segment in segments:2 e& H* R' b3 ~, F' n6 u0 ]
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
8 @4 G8 I9 j2 {* O) M5 |) ~; \& Q+ g
for word in segment.words:! b3 v7 K6 q! f* M# c7 h
0 g' y% `6 C7 M, i& A----------------------------------------
/ D! x% |! w9 [! N0 C
0 w$ K! g7 X% V1 H1 S' V( u代码说明:
0 d+ L: n5 W- r* J1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
$ Q: \! H8 e$ \3 B: X+ M但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。* n# `! d. _9 Z* ]
2,segment 本身是很粗糙的,做字幕勉强能用。
% W# {+ X; r. D% Y. r2 h* A3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。' L- A6 R+ E2 M5 L7 I; v8 E
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中1 B/ G3 N E' ]" v
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。* A( q; }2 I$ a* Z/ G! j Z' D
5,model.transcribe 中参数说明:8 v1 r. o. @0 @+ Y/ J/ H! L
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数' Y/ w7 U- P' ~, [
其中
, l$ J1 d7 S/ s5 L word_timestamps=True,
" J M$ {# I* D6 s, ]保证了你能拿到 word,否则是拿不到的
, x* u* y4 `$ c" ]- T initial_prompt = "Hello, welcome to my lecture.")
7 V9 _4 N8 E4 [3 L7 Z# A保证能尽可能准确的断句 punctuation,但是不是决定性的。
9 f, ?" U2 S' R" J其他参数可参考源文件:# }$ z' O% ]! x# x9 M
https://github.com/guillaumekln/ ... isper/transcribe.py" v# G* w. d0 N
152 def transcribe() @8 n* ~" C" u# k7 \% ?
从源文件你可以看到是支持中文的句号断句的。; d6 I7 T, s3 B( z8 A0 e
" ?0 Z6 ~0 ?, R! u( Z6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。% q- r6 X6 L3 M
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
9 Z' `0 U7 L% n. _8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。% U1 U: g( a8 {8 b. n: X0 e. j
. ?$ c* Q1 m" o) |# e5 R' [" n # ]" r: |" Q2 }7 q7 D
( J8 i' s. k$ a9 w% a5 n9 b2 v
|
评分
-
查看全部评分
|