|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
* d3 `( z$ B" [3 d. b+ l
6 ^, o0 ]) B+ ^8 w借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。. z, D9 m$ p0 C Q/ F
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
& M# h v0 o& w! p- K- b! `1 X) d1 H----------------------------------------2 R+ E8 }0 x% c. l+ g
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
# Z4 v2 a2 K. S( }3 x在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。- _: q, Z. s/ N N# M/ T5 \
----------------------------------------# P4 e8 O+ b) c. v
https://github.com/guillaumekln/faster-whisper
1 \9 @5 G; z9 V: @* ?安装如下:9 }% n) x- d* n3 {
1, Windows 100 K2 ?% i5 y2 M- i) W
2, Python 3.10.11
A+ z7 A6 C5 C& @/ k, o$ F3, CUDA 12.12 @( ]8 d+ n: e7 f# l% `
4, 在python 3 中安装
' V: J* e/ e9 f8 I4 S2 R/ Lpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
( M) ]/ v# t9 I这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
# _" p; g" X: `8 d5,pip install -U openai-whisper
. t% { D+ L& }这是向whisper 致敬,可以不装
- Q) K! w+ N3 C/ g- ?- g# _6,pip install faster-whisper
1 W; K# H% H' d1 J! @6 @----------------------------------------
3 \3 ~1 M$ `( Q( M2 N3 ewhisper 我用的命令行,faster-whisper 我用的是python。: N# g5 y7 V+ `$ w F# M
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:. D d3 _4 t+ B9 s" b
; {; M8 p" Y* e# V6 T) c- S----------------------------------------
8 }+ S! e0 \+ N' K; b8 K8 K) D( s* V+ {" ?2 e5 W3 N; _9 U
from faster_whisper import WhisperModel6 B, [# g6 N0 r8 \* ~$ h/ f6 o
+ q% V& j& H- L; M& n, ~
model_size = "small"
/ g6 G- }+ E9 \8 Y! |2 `
* D" r, @1 w7 q8 pmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
2 R1 i% @: k3 M7 }% X7 W0 C$ [+ t1 T* t4 {; T& I0 v
segments, info = model.transcribe(
/ x4 K9 W( D$ }6 ^ sourceFileName,
1 x. E6 ?3 G& P% T beam_size=5, 7 b1 V, O$ W+ v2 k0 {# T
language="en",
' `+ \! v; c$ q. M: Q( Z" E task="transcribe",
. s5 ]& o5 M' `8 S' t word_timestamps=True, 1 f, |" g7 }- u( k# v& S# P. U
initial_prompt = "Hello, welcome to my lecture.")! z) s* D0 I S1 F; i5 e
/ d8 U. ~# b7 b$ f. lfor segment in segments:7 B6 N# c; S* z. L& u. h+ B
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
' ]1 q1 |3 v6 V4 `
* ?8 C( f1 ~5 a for word in segment.words:
8 V5 A* s) T7 r( u/ r 5 p" `$ f& e& j9 F# z" Q% b. g
----------------------------------------
; H/ U, |% H& X# {# t1 H( F
) {- B1 Z/ V" x( J9 ]$ H代码说明:1 h2 c2 ^* I) `; }
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。3 d. B! y" A y$ z: j( Y0 D7 R8 h
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
( G# c6 l7 ` W* g( M; b; C2,segment 本身是很粗糙的,做字幕勉强能用。
2 V; J6 @0 P' Y+ Z/ m% S3 J0 _8 n( y3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。& b3 W- i3 n$ ?; t
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中0 I. q! T; v( E7 H* M6 O! A
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
2 X# l7 V8 _$ x! \% b8 @% ]5,model.transcribe 中参数说明:* d' @2 w y+ ^) z
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数! S7 a8 W1 M4 s; E L$ G% u
其中
1 u" {' ?6 p( e2 w2 s+ [ word_timestamps=True,
9 C& u( M: V) X- ]/ i2 I1 x. B保证了你能拿到 word,否则是拿不到的
0 N4 E6 X9 d( ~. z3 G Y initial_prompt = "Hello, welcome to my lecture.")
) ^* w8 b/ L- }, `6 y保证能尽可能准确的断句 punctuation,但是不是决定性的。
6 c" x5 m" ?" Y9 G1 N$ Z' H" Q' n其他参数可参考源文件:
) W& }) ^' x, K6 Q, Uhttps://github.com/guillaumekln/ ... isper/transcribe.py* [3 v/ P; P) f8 w' N
152 def transcribe(, t- r1 m2 L7 G
从源文件你可以看到是支持中文的句号断句的。
( r3 l3 u' ?7 ^+ n/ i. c
1 D3 p0 M D6 y5 s6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
+ q' _8 ~& Y+ ^% Z) a3 n, x9 B7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
' P& T5 y/ b, b7 i/ {; L8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
$ l/ e, k- @9 ?
: T4 ]9 p# A+ r7 T2 X! t 2 }9 ~9 S. J9 J; e( ?
1 {7 ^( V) N$ P' t |
评分
-
查看全部评分
|