|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
4 Z$ w/ }/ ^* D+ `
4 l# J/ d5 r5 R8 Q9 q% m1 i借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。. o: _: A1 X' x9 I! b' E4 G: U5 ~
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
6 f. K- L! T% Z0 r2 L, j----------------------------------------
' h' {7 s) W- ]9 o5 n6 W# g显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。! b6 c- O+ D4 Z% U
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
1 V+ Z3 B, x, ?----------------------------------------
" C- r% l. P6 w# e# whttps://github.com/guillaumekln/faster-whisper+ V/ k" Y% p" m i
安装如下:
E! _8 X6 Q( V6 x) e1 E$ v3 ? v1, Windows 10) L3 _$ l9 N& A: g
2, Python 3.10.118 @: K0 A* Z, }1 o l8 x: t, r
3, CUDA 12.1! g/ S6 X! z+ X$ u. Y/ H, ~
4, 在python 3 中安装# b2 n6 }- o5 U$ L4 a$ b
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
# h; e9 Q4 O& \' n这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
7 K- a% k5 O6 y7 S: ?" p J5,pip install -U openai-whisper
- n% Q6 l" Y7 J; a7 X这是向whisper 致敬,可以不装
! H2 M4 {- d% Y4 ^! U3 y6,pip install faster-whisper
; ^) U9 Y' E; y) T% _+ b----------------------------------------
; i4 u# l7 b/ W2 vwhisper 我用的命令行,faster-whisper 我用的是python。
1 U5 }0 g% U$ g下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:4 v7 m5 u9 c- t0 m& y ]; o
# s$ q( h( m1 i----------------------------------------7 S8 H. @/ j; g o) ^! I
/ u" V0 S( U/ E N& z
from faster_whisper import WhisperModel
/ [; R/ |$ ^. [/ n
$ z3 d# u2 [3 W5 W) f2 Mmodel_size = "small"
9 |! F- |1 w' k: M/ f( J5 B$ {* m6 W3 y+ Q
model = WhisperModel(model_size, device="cuda", compute_type="int8")% B& a$ N# s( r; S. |7 Y4 F
9 y3 M& v, `2 R
segments, info = model.transcribe(
2 ]7 b; S$ t7 @3 l B8 \ sourceFileName, , X' |, m1 G! K
beam_size=5,
' L, W( s7 |* R! n5 d5 U language="en",
1 V% O3 A9 I5 D task="transcribe", . |9 H( c! m( O% b! K* o$ Z% m
word_timestamps=True, ! j J" ^0 }' ^( s6 L y( X& q
initial_prompt = "Hello, welcome to my lecture.")
2 L, F( p. m% D! |9 n* X+ Q' n. [! ~3 N; y' C. Y+ x& H
for segment in segments:
3 A/ ?$ R( [. B. A6 `: ]1 v print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
& Z% O1 y, {3 z, a2 A; v$ ?8 j; h' ~' j5 c" j# X% K
for word in segment.words:
1 ^" u2 N1 ~ ~
& G1 L+ ^! V1 p' l. ]----------------------------------------% w) L4 [: X1 |
' ^0 G5 T& j/ }% x& R" I: K代码说明:
* l2 \# P+ }0 e& v/ Q8 n1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。* H5 F0 @) |, E, h
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
: o( [/ L i5 R8 E0 A0 W8 M2,segment 本身是很粗糙的,做字幕勉强能用。
& H# x$ d- V. L2 p. B/ a3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
; P) P( o% O5 a& w4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
n: {/ a/ M6 B3 ~% J0 m2 I5 R$ J比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。6 _& e( v" v1 f& l9 q7 Q% z
5,model.transcribe 中参数说明:( c e, F/ E, y' E1 m7 H, D# l' E
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数; E" }" T/ l/ M- N0 \- H
其中
: k) u* V8 k* X: X word_timestamps=True, ; O2 Y! |+ d+ G' I- ^
保证了你能拿到 word,否则是拿不到的
- \2 q h0 z' n% h, ?. \ initial_prompt = "Hello, welcome to my lecture.")6 O0 |7 a/ [8 c6 d( @+ [2 i
保证能尽可能准确的断句 punctuation,但是不是决定性的。( q! Z% M9 K* k4 r
其他参数可参考源文件:4 R# o8 |7 s) V9 {3 [3 V+ G4 I' M+ y
https://github.com/guillaumekln/ ... isper/transcribe.py
% g: B+ D9 w0 d2 y0 {152 def transcribe(% N$ R ]8 `/ Z# T# s
从源文件你可以看到是支持中文的句号断句的。
8 V8 X* t: J. e7 H' Y K* k8 N9 p
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。0 ]( ^, h5 `6 p* v& c% X
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
/ c4 j' u. l1 L8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
) W/ e% Z/ k' o- Y: h3 p3 V% Q+ ^! ~ L, i- _
4 e8 H( H6 E2 W; ^3 L1 r
% {& D+ U- o- O/ d" r9 \% U4 h
|
评分
-
查看全部评分
|