|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ; g7 {4 _5 e+ n5 Q4 |2 f0 @! B
: [8 ^' d2 W" Q# d
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
* u& G; g! M! t# u% ?* n9 ?效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。2 P) I2 l A0 Z2 e5 C1 C0 ^
----------------------------------------( X& V- u9 a9 G) j
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
: x! R; F& x, E3 O在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
+ T9 R7 Q/ w1 n----------------------------------------# J, s: G5 \: ?% O7 `7 m# f$ M
https://github.com/guillaumekln/faster-whisper4 U1 F" z6 E: [
安装如下:1 R: |6 Z2 ^8 }! J0 \9 [( ~
1, Windows 10/ ^+ ~+ A% X+ R3 i
2, Python 3.10.11
+ L- h2 z# ~1 i9 E6 D3, CUDA 12.1* T4 O! i4 T: P# q
4, 在python 3 中安装
5 H h5 |2 I0 z: q( Hpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1176 `0 i% ^7 B" F1 V8 j5 o
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。1 O+ F! F l3 b! ?
5,pip install -U openai-whisper
, n, O% n9 D* j0 ~$ C这是向whisper 致敬,可以不装
: g) y3 v8 F6 b/ ]6,pip install faster-whisper
) U' _$ A, s* {) N----------------------------------------
9 l. h7 H! H% ?) u5 B; {9 y9 uwhisper 我用的命令行,faster-whisper 我用的是python。& E. n% B6 `' O( {
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:! H& \8 g6 k4 D- Z" M1 i' A/ \
! U# m& s# S( `$ F) B4 p----------------------------------------$ O) R |# w! \# E+ ]
. a& s% C2 c2 M4 k3 r
from faster_whisper import WhisperModel
6 ^# q$ C' ~5 K/ Z( G A+ d
2 c# `1 I. l# D: y0 B) d, gmodel_size = "small"
# O$ ^+ G3 i2 i9 Z* m: Z' q2 n4 X! I$ T/ ?9 L
model = WhisperModel(model_size, device="cuda", compute_type="int8")2 G& I- A; E. N* l
6 I Z. w; M4 ^3 Zsegments, info = model.transcribe(
& @$ v) T! E6 T sourceFileName,
+ n& n6 M6 _* |$ B2 b/ [ beam_size=5,
* g7 p y; [" U- H' w7 k language="en", 6 |/ D$ u6 z2 D; j6 T4 }6 f
task="transcribe", 1 T M/ R& s. c4 Q+ D( Z- \
word_timestamps=True, . c9 A: \7 M7 ]- ]7 w2 G& n7 u
initial_prompt = "Hello, welcome to my lecture.")
6 e" n" L. o# @7 [4 [3 q: F
# G4 A; q" K+ N. K! r' J Sfor segment in segments:
) G6 F& B& ^8 U3 V @1 h) b( t3 ]' a8 z print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))8 w0 N) O. j5 V# U# ^
" t( T2 G7 o# T4 l: D
for word in segment.words:
6 L" ~* r; K" A9 I# @, n6 x
9 I1 P* T4 M& r! G2 V9 q8 ?2 k- J) ]----------------------------------------
1 ?) ~6 y8 k7 |" S: g g6 J! y& ]% Q0 T/ o1 n
代码说明:6 a2 c5 y1 O0 U0 l) p
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
7 i |( b/ n* X3 w$ K, E但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。! P) S0 X$ d) H" Q0 t$ ~
2,segment 本身是很粗糙的,做字幕勉强能用。% `( D7 V+ F5 l; Q4 c
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。, y- m7 ?; j* L3 q
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中2 x& a# G3 ?; K( i3 i7 h0 ~
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。: ]! @! Q8 P4 }& h l
5,model.transcribe 中参数说明:/ H( c+ J0 G6 j' d8 y% L
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
0 ]8 X+ R/ X' i' Q2 ]. e. m; v Z其中% T2 S" {, r6 L9 Q& @2 W
word_timestamps=True,
6 ^+ W1 L& @1 _保证了你能拿到 word,否则是拿不到的
4 J" g7 \! m" `; s! A initial_prompt = "Hello, welcome to my lecture.")' ]: z& {: Q" o: e
保证能尽可能准确的断句 punctuation,但是不是决定性的。
( J( R0 Q! v# j, Q' L k# T4 A其他参数可参考源文件:6 A% I P+ ~! K" j# ?; }, e3 l
https://github.com/guillaumekln/ ... isper/transcribe.py
" ^+ I7 m+ K/ o- B+ d152 def transcribe(: y$ E4 m9 p- W* D
从源文件你可以看到是支持中文的句号断句的。& N! k' ~6 Z7 F! m0 D4 Z) A, W
/ q: x' n: n1 b5 ?/ h, H6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。 p. C( c* c5 J! E* S. |' M8 F% I, R3 W
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。6 U1 `; G7 n N5 d; p# d5 t" _
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。1 Q0 M3 }( P* y& ~9 G! @
, x0 ^9 |6 {& A- T( o; [
3 J3 X3 r- O: g
; u! J" P" c- U3 y |
评分
-
查看全部评分
|