|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
, O( N# |$ Q) h2 b: ?: p" e3 B
: h# Q! o; w% N- @" z- u借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。0 J% d* }$ b$ [6 Z% r# B
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
6 f/ u; a `5 m) X----------------------------------------) D4 u1 [( I% @3 V" S3 R, B! c9 u
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
) ?9 `4 P% @: m/ d在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。- _# {: G) N. b+ [0 T; P9 o
----------------------------------------8 T) M2 ^4 c& e" ~. k
https://github.com/guillaumekln/faster-whisper$ j$ B/ }2 n9 V, A- ~
安装如下:* V" B! N2 e& o+ ] L! [1 L
1, Windows 10
! f2 i7 X) g e t: z% H! g2, Python 3.10.11( h3 n4 ?5 Z0 s/ x3 r
3, CUDA 12.16 X* N' |$ ^& v5 B
4, 在python 3 中安装
8 U% A! ~1 p4 V9 G+ V: Y3 i) tpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1170 @( \) [0 \$ }* U1 Z; c
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。- m! |* R W, \3 ?3 w& T a
5,pip install -U openai-whisper
. T# Z h& M$ J3 L$ d5 n5 U这是向whisper 致敬,可以不装
0 B$ j c4 }! K5 O6,pip install faster-whisper
: H2 t% j7 W1 g! M) y6 x----------------------------------------
9 z1 P1 N/ m0 |, ~: x) b( p% Dwhisper 我用的命令行,faster-whisper 我用的是python。. H* g/ ?0 c2 X; i6 ]' s
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
) l) Z f# E3 p; s
% [, ~5 j" y- e( ^' I6 T0 n' ~----------------------------------------1 b1 t3 I" w( h( ?$ y3 @
! ~- N Z& e4 V0 y) ]from faster_whisper import WhisperModel: W2 E2 x2 o- L0 x$ _- \& Y* S
* U |4 U* J. v7 L0 \ ~4 omodel_size = "small"
' Q* ~$ c3 D% ^+ p* i# p9 H2 E. h1 [$ @
model = WhisperModel(model_size, device="cuda", compute_type="int8")' W9 V( G% r( q( O" f
. v8 p% o' N9 u# Asegments, info = model.transcribe(
- _6 S6 b+ y p) { sourceFileName, ( }9 m' j q v- _! N) x
beam_size=5, ( [2 A5 T* l; g
language="en",
! R2 W8 h2 R. H0 d5 _' t) l5 d+ f4 N task="transcribe",
: S6 M4 J1 S( `! b( A word_timestamps=True,
3 n1 O( l% S- ^# | initial_prompt = "Hello, welcome to my lecture.")
7 f3 O% V: H7 p) G9 a7 v4 z4 n; c* _4 k- W9 G
for segment in segments: j: n9 ]' m0 z7 j
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))7 @+ a2 `( h+ T% w$ X3 H
4 e; T+ a9 ^- W& h1 i
for word in segment.words:2 S3 v: X& Y& V3 s5 ], R) j, m
% _. C& y; S) p& R----------------------------------------
/ e- i M2 ]3 T2 }- T0 }- ]0 u; X8 y/ L. |
代码说明:8 u+ ?3 G6 D* Q8 u( o1 J* U$ m/ Q8 l8 [
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。# T; c8 o2 R' q
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
9 l }% R1 b* C6 Z) P. ^1 j2,segment 本身是很粗糙的,做字幕勉强能用。3 B" x, Q! @! I3 ^
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
4 L3 @. B" O# j# M! \4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
J0 }. j) o3 F% n0 Y8 t6 B f比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。' a7 i2 r) d6 w9 L
5,model.transcribe 中参数说明:
& I; K. a/ B4 N6 k" f你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数( W/ m ?1 q( i2 k( z0 x
其中
, f* x$ h2 a8 l- c0 g0 T" } word_timestamps=True, " _) b7 Y& Y* I. G
保证了你能拿到 word,否则是拿不到的
# b n7 c6 k+ h- `+ ^7 s initial_prompt = "Hello, welcome to my lecture.")8 \! V1 K' B9 e) Z" j+ L
保证能尽可能准确的断句 punctuation,但是不是决定性的。
& g! \% b* F% H9 ]; j/ `$ y其他参数可参考源文件:2 t+ ]* W, m" @# Q$ `6 T- F: O
https://github.com/guillaumekln/ ... isper/transcribe.py
3 N$ P; g7 Q7 m; {% d/ d2 _$ w152 def transcribe(
0 z Z o. v7 {( t从源文件你可以看到是支持中文的句号断句的。& g9 T5 P3 S) y! E& S! q9 S* t
. V6 b1 T* }+ Q4 h6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
) f7 X- s' V: r: }% f7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。4 M( g: v! Y% Y: p, j+ C2 g; v
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
9 M. G5 t/ h# ^0 _) E% n4 M. l0 N0 ?8 n$ f$ n
' u; |& g! ^& r' ]& Z3 N/ |6 l% R# X# Q9 l! l* C) M2 M
|
评分
-
查看全部评分
|