|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
* P: R! H2 m6 @( }/ y+ F2 r0 E b& |2 C8 _
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
9 X) ^& {. j8 P效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。/ z% a5 W x0 S1 @2 O6 j* x
----------------------------------------
# M: ^" E& e. G3 v! T显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
+ {6 F9 h, y; [8 E9 Z2 U: B# Z8 o在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
4 {& r" M3 d! A3 H. B----------------------------------------
! P! H W1 m- T6 s# [% thttps://github.com/guillaumekln/faster-whisper9 w; ]- H! |9 q7 B) A g+ s% S( W! T
安装如下:4 K% ]3 D2 Y! [( G9 p
1, Windows 10
; B/ l p, Y# j" y o% e9 K& |# i2, Python 3.10.11
9 r" O4 q% Z* O) T3, CUDA 12.1) B* }6 o& I% V" o5 |* _/ t0 u
4, 在python 3 中安装
, @! H3 e; u+ w9 W- N/ Tpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
) c2 Q' R% R/ ~这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。2 n; }& u' W1 Q8 _5 K( a
5,pip install -U openai-whisper
: g$ [& ]1 ]5 D这是向whisper 致敬,可以不装2 v8 l4 R$ [& Y& z! b
6,pip install faster-whisper
( u H, ~# u# i8 {5 J! n0 {----------------------------------------
9 c+ V! q ^8 T3 X$ n7 owhisper 我用的命令行,faster-whisper 我用的是python。7 q9 j( Q; g9 l" K( K3 ]7 I, Y
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:8 q J b5 A$ H* H
6 {' p& e: a3 `0 _
----------------------------------------" X- ^, D1 D( a9 Q1 j; V
7 A; ^1 q. u) k. w9 b; H
from faster_whisper import WhisperModel C. l( Y4 E$ F
7 x# P5 d/ m. a2 k: ]1 S2 q% emodel_size = "small". M; Y4 G6 @: n
/ z( \+ @1 \$ H) L8 e& f1 ^
model = WhisperModel(model_size, device="cuda", compute_type="int8")
: r, j7 |3 H8 u4 D. J! X7 A/ K/ F7 M* o0 Z
segments, info = model.transcribe(
# P% P8 b' ]4 r- @1 r& Y% Q" Z# w sourceFileName,
8 i8 u5 I* B! i z D& P% f9 v beam_size=5, + K. J P- s2 _% `* b8 I6 G
language="en",
2 P! I- S3 M& T! E task="transcribe", , O9 O" o# v g1 t
word_timestamps=True, : H; s# _ c( V0 C7 B
initial_prompt = "Hello, welcome to my lecture.")6 {; F! i$ P ?, w. ^! p: _5 U
' E. N- E# {/ y0 m% }2 Xfor segment in segments:
1 L: z9 a3 ]2 E1 H print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
+ i7 T# E4 k) Q- r! \. g' S! h: o/ J# C/ r
for word in segment.words:
% S. K1 }. v8 ]! w' x, V , z; \. i9 ~$ @0 N! o& p
----------------------------------------1 M( Z" [1 l# M8 }3 _: m: o+ s
# C3 l: }2 ~' p. X' h
代码说明:
5 c. O6 v% z* A1 M: X1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
2 |' d; Z% u: Q; `但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
" n4 h" u q+ \ k# j0 M2,segment 本身是很粗糙的,做字幕勉强能用。
, c) x ]' A9 u8 l' d6 r3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
2 X6 e3 k* n9 j( {9 o9 D+ X/ r( J4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
T7 f- q" U/ v9 P" F比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。3 u& s/ o) ~1 I- h* H
5,model.transcribe 中参数说明:$ n J; {; ?$ C+ x% `4 F: K- A1 l, m
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
6 ^. [0 M. U! t N3 j! i其中
) w/ [9 @: {$ z, X) { X ` word_timestamps=True, 2 `0 `1 b3 H" \3 d8 u
保证了你能拿到 word,否则是拿不到的
, |( Q2 Y! `# O4 w initial_prompt = "Hello, welcome to my lecture.")
8 f( h- ]6 q1 o* k- @保证能尽可能准确的断句 punctuation,但是不是决定性的。
! W% w* i9 w: I$ K& U! y其他参数可参考源文件:
8 b4 D: Y1 D- } m! Q7 i' Yhttps://github.com/guillaumekln/ ... isper/transcribe.py
/ h# `* a" v# V8 _" Q0 d" @152 def transcribe(* X3 j0 M3 \4 } `- g
从源文件你可以看到是支持中文的句号断句的。: W1 E! O1 {5 w2 E3 A
0 B w, X3 Q, O
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
0 B# M4 `, c* i+ r" z' m7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。, g+ K) F% S2 y* L' h
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。+ O! V" P, V& W$ P" r$ M9 z. a* v
0 V3 G# P |2 \' m( ~" F2 y! i
9 \3 }9 l5 A1 Y. J# Q5 x$ E% U$ s* s. ?, i. K+ _5 _5 b
|
评分
-
查看全部评分
|