|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
0 a' {- {7 f8 c7 I# [
. t/ {- ]. A, k4 [借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。& b( z3 A9 L" }1 }: G; X
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。2 b ^7 ^, u: K: h' r
----------------------------------------
' u( [) l9 E& A' `- E显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。2 N7 P! Q% T, v3 ?- f
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
$ S: c5 ~$ A' u: ~" D' I----------------------------------------
! a- I" v, E ]( c, Thttps://github.com/guillaumekln/faster-whisper
0 m, K2 H% R+ J; Z9 R2 v2 q安装如下:
2 Z6 {; a7 ?+ y: x4 V7 k1, Windows 10
( i' Y9 p! {6 Y7 _9 o2, Python 3.10.11
, y9 e, h$ d4 q/ t, x: d3, CUDA 12.1 \- k+ i- l, D7 q! `6 _" {" a/ @2 a
4, 在python 3 中安装+ A& _6 R$ B5 u. e: y r
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1171 Y& {4 U* x& j( k& U
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。4 ^4 Q8 K- ]2 q6 M6 P8 w' X$ X2 V
5,pip install -U openai-whisper
( u; n' M. D. k# s& ]这是向whisper 致敬,可以不装9 x" o0 M9 R* L6 ^* x" J, j
6,pip install faster-whisper
: A2 {( p7 S7 B1 z----------------------------------------
" U! g, j: y8 m! ]3 J( v3 jwhisper 我用的命令行,faster-whisper 我用的是python。$ i, S( q. |# B0 p! Y0 d: U
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:1 @$ i2 K# J9 E6 W( @
6 F( H0 X2 w: C8 _$ g
----------------------------------------7 ?' A( r9 B' l! o/ e2 x6 Q$ n+ H$ a
1 w( ]# I6 M* N# w3 u- Xfrom faster_whisper import WhisperModel
9 y7 m3 h4 s) | U5 T
0 `' P# n$ D( w# [model_size = "small"$ b& S& C r! ^0 R& ~
a& V% Y$ j0 amodel = WhisperModel(model_size, device="cuda", compute_type="int8"); H, T* W9 P. g+ g5 n
k( j0 t. V: R* @ E% E0 ]segments, info = model.transcribe(2 S) P! t8 e' W" r: W: z
sourceFileName,
; |/ Z- ]/ u: @( t) r beam_size=5, + h- p* A% }9 C G/ r% ?7 ]
language="en",
w3 P) h: w8 W$ L task="transcribe",
f: e q4 F& ]+ g1 j4 S3 h+ }$ J word_timestamps=True, 4 E1 _ O& U8 F/ S) \8 f
initial_prompt = "Hello, welcome to my lecture.")' C# e+ V8 K3 R& F0 k
) }( b/ u9 ]- V* p. sfor segment in segments:" T2 S% y5 o# I) \% _2 {& B4 Y- [
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
) D4 U3 f1 I: j0 r+ A) s* t% R. S+ g' s: c- U" g: S p
for word in segment.words:
~$ j) r5 t, ?+ _5 V% l/ `
/ ?! ]# n( C) R2 J. L8 R3 y. t----------------------------------------$ y7 D+ D) `: a/ O' G
6 ?8 w) W: h. z$ D
代码说明:
& F: h) }( k0 @: T1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。# G+ P+ u* r& Q3 W* ~: v2 _
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
( e3 D% u: A/ i8 _2,segment 本身是很粗糙的,做字幕勉强能用。& u, ~: N* l: d4 n% w
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
, R8 Y7 w `5 D4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
/ u, F0 u& S8 _ I比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。0 D8 N9 h/ T7 x& r+ c" B( _
5,model.transcribe 中参数说明: n3 T/ j* K& m7 ?! t" e8 A
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
% N7 I* l- z8 n" r' b9 S其中
6 _/ c/ y" r, A( t9 l- h: Z word_timestamps=True, , r6 I4 m, W. a: L5 L. m$ c
保证了你能拿到 word,否则是拿不到的3 s& j3 _1 A1 s9 y' e. F+ g
initial_prompt = "Hello, welcome to my lecture.")
, n- ^* }* |2 [保证能尽可能准确的断句 punctuation,但是不是决定性的。
9 ]( ~7 R6 g4 G其他参数可参考源文件:
@) f- E9 ^7 M2 W. I/ P7 ahttps://github.com/guillaumekln/ ... isper/transcribe.py7 B$ a1 S9 R8 o- g
152 def transcribe($ O N( ]( n4 q# S
从源文件你可以看到是支持中文的句号断句的。
5 i; c2 s6 L9 N3 l( l3 v. y. j3 E
: A: ?$ V* I9 ]# I' h) v6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。" f7 ^; X" n" C, w
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。1 Q% d7 Z' `4 m. e
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。! q9 I; F" W. A9 A- j; @' R
# E$ }6 g# r/ F t, E5 q% z
5 j" z$ s& a+ [) _' D5 N4 P0 j/ X6 T l/ V5 K+ B( T" K
|
评分
-
查看全部评分
|