|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
7 `6 S# S! J0 F7 c1 [$ H7 ^1 k% R! K6 G, n
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。, ^3 l' e2 U% C3 G( O. k! A0 `4 `
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
" A" h# A. [% U, W3 h----------------------------------------
3 l5 W- r9 d1 K9 n8 y. F# l J* F1 v显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。9 S7 @% F4 q9 O0 Q- F
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。1 k3 G) }2 F2 m4 q/ H; W7 D" x% y
----------------------------------------
" G3 D$ O4 H7 T' Ehttps://github.com/guillaumekln/faster-whisper; q) _- t( ]* Q
安装如下:2 V! x& \% J, k0 D7 c: Y/ u# l( E
1, Windows 105 l2 s1 F) q, S$ P8 X
2, Python 3.10.110 ~4 c+ d( f( l
3, CUDA 12.1
( w& W( F% i1 R6 z# T9 G4, 在python 3 中安装
/ c- b$ a+ K. k& upip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
& f# G- m1 @+ i# Q1 L( i这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
: M% p7 y; a# d/ s, @5,pip install -U openai-whisper( B% ~4 q7 V' g2 v# o Y, @
这是向whisper 致敬,可以不装
% Q1 ^8 C3 }. [+ r6,pip install faster-whisper) w( e2 `9 }# a4 K' I; I% V# K
----------------------------------------1 D/ Z5 p# \- X! a
whisper 我用的命令行,faster-whisper 我用的是python。# v3 W# P: ^6 [# s9 y8 L0 V0 h
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:& p: J1 l q2 y! v
; B' U8 a& ~* i3 C5 p% d----------------------------------------3 _# r5 p' j0 P; v9 e1 T2 \/ @4 G
+ [- z E: j" }* ?* Sfrom faster_whisper import WhisperModel' y5 C' C# s2 z/ f2 Y0 b3 U' f% `8 S
/ _: f9 u h$ t" H3 ?7 j& f
model_size = "small"
; u! j' Z5 p) B% e1 X& H, t5 o) d% t
* M. P6 B) A. E2 V% ?model = WhisperModel(model_size, device="cuda", compute_type="int8")
5 u6 X- t3 ?! w% s, q( S7 w% ~8 n- i# w3 ~. l0 Q! `- S6 B
segments, info = model.transcribe(
! K( J4 \3 L; g c( f1 Y( s, J* Q sourceFileName,
3 Y' d. i9 `% I; _7 d8 H [ beam_size=5,
5 u p V$ R& P; c% j language="en", * w) ^! E, |/ K
task="transcribe", ) L, t( r' L9 t) @
word_timestamps=True,
9 C" y+ v2 D' G$ J initial_prompt = "Hello, welcome to my lecture.")1 E# y( e# I. \) l4 ]- w. i
( x; y+ _/ k1 Y! x$ |' M) |
for segment in segments:0 I+ U; ]& S$ }- V* H; [: v
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))4 L6 t2 l: ^7 `8 n$ o) M3 Y# a. G
7 K5 \6 h! D/ I: ~
for word in segment.words:: B7 G: ]8 q% T5 m
0 D: j$ u0 m; z! a9 S4 h
----------------------------------------/ }' u) \& B! \: o- \
9 p/ l7 i h/ z2 A8 N8 ]
代码说明:
2 f* Y: i5 B& v7 ~1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
g+ C3 q/ I5 ^2 U! M2 N但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
. M, W0 u2 a6 ?3 M2 B2,segment 本身是很粗糙的,做字幕勉强能用。- c0 N9 {/ H/ H2 C, |, D
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
2 [& Z& S, k- C2 S# M% |9 i4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中4 ?( e# h/ @4 b. y
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。 E& ? `3 ^6 `& `2 X( ]$ X
5,model.transcribe 中参数说明:' l# M) o" x! S" J x0 h/ B
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数; H L5 c9 ~2 f# O3 n
其中% T+ h. [) b: P D" B9 S; N
word_timestamps=True,
3 @$ a4 Q3 @+ m; \. ]保证了你能拿到 word,否则是拿不到的& l5 J. d; ~9 }0 v: p& _9 a
initial_prompt = "Hello, welcome to my lecture.") c) W+ \- w, J' K1 q* \
保证能尽可能准确的断句 punctuation,但是不是决定性的。- Y( {2 b3 T, K& \
其他参数可参考源文件:. P' j: M/ ^) D, @
https://github.com/guillaumekln/ ... isper/transcribe.py+ B5 r1 @) f8 A0 h/ t1 ]- ?
152 def transcribe(: F1 `7 E: P0 a+ z5 R
从源文件你可以看到是支持中文的句号断句的。
& n6 n8 ~/ D& Z& d( R2 s4 S
" Z/ K( k" W) y8 ?0 ]; Y( `1 s6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
( p2 }* N' P: D7 Z1 J4 H5 W8 d+ f7 Y7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
* S# W/ b$ m( x4 W# Q$ ^8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。* n6 F* ~7 G& E X1 k
- `2 U2 Q' Q- q1 ~7 i
) H2 Y. d0 z, Q( L
3 A; }+ N9 s* w( x7 z |
评分
-
查看全部评分
|