|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
; o" m n6 k" @" b1 H8 z- T
( c/ `# C0 ]3 Q2 T! s借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
' F( s A; d% I" K6 w/ M效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。* M( o$ Q7 q$ B& P2 v
----------------------------------------
3 V1 o8 z, l" t- G8 d+ q5 k显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
+ D4 M/ n# x2 A: L: l, Y在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
. f; \' W# E5 x ~----------------------------------------
9 \2 R! ?$ W) D$ ^4 ?0 Ehttps://github.com/guillaumekln/faster-whisper* f+ `. g: Y* o1 R8 C
安装如下:' v5 f1 e. \5 q) c$ l5 H
1, Windows 10# w" {* T' \8 k4 z- g" H J
2, Python 3.10.11
6 P. F# p: L* l7 R5 }" n3, CUDA 12.1) {* @7 x" ~% d+ y# e6 y8 m! ^
4, 在python 3 中安装5 \" U3 y8 |0 t* {, E7 b
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117: t, O* z/ J% t% f$ q
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。1 @; }: K" {7 x# |. z9 o9 t
5,pip install -U openai-whisper
4 F/ f1 x% a' c这是向whisper 致敬,可以不装
1 @7 Z* P# L1 X% a r6,pip install faster-whisper
w/ }5 C& O N9 E% l- j$ A. ^6 w----------------------------------------
" u' a w7 u3 j0 c5 c* Y, `: Ywhisper 我用的命令行,faster-whisper 我用的是python。
/ }/ l3 Q# W: L0 X, m下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
+ \- f7 _$ P3 V. i* w1 z4 k2 L
- }! y2 C" U8 K! i7 V: V----------------------------------------
7 f9 P3 _- @! N* _5 [: d5 _5 K, q! S" n- x/ | T( S; {! R
from faster_whisper import WhisperModel; @0 g( B! i! l' P8 P A% w" Z3 a
X' m- U1 q( W$ Umodel_size = "small"% q* [+ C: W+ s# @# X
3 E* ~& ^ s. V2 g3 G* lmodel = WhisperModel(model_size, device="cuda", compute_type="int8"): Q K0 I* J. [. `
9 D! l0 i/ Y" h Usegments, info = model.transcribe(
1 g. g2 `) i9 c; |. {$ z4 O( w sourceFileName, : V% G" A7 h; @: P7 f
beam_size=5, - t- T0 h5 r _% n& x
language="en",
2 j. Z( T5 e$ }6 E& a task="transcribe",
: d7 ]: t5 J) T- y' k! { word_timestamps=True, ' D5 h, I. P, M" t6 E
initial_prompt = "Hello, welcome to my lecture.")3 V" v9 d- v' E
3 N5 s1 P0 T. Zfor segment in segments:
2 F3 i8 Y; v% `+ O- G print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
; O3 a, ^+ U. Y$ l; B+ S! o* X5 Z2 p. M M0 f5 I6 o# y" W
for word in segment.words:
+ }! d/ R& }# J8 z% F
6 X: L! Q; p; F----------------------------------------
+ r* J" G" W0 w; ?) e6 \5 {5 O' n; a! l! h
代码说明:5 z$ |) S. f n: ~1 p
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
8 k9 S; i+ W& x7 g4 ]* j$ z- E4 e但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。2 V6 l l; e M! O& B0 _1 u" J. @: t6 P( s
2,segment 本身是很粗糙的,做字幕勉强能用。" Q+ g( K" r) K; D' g1 G
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。/ x9 s I3 ?: O7 H0 _
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中! a# K% I" y* S) n, O: i5 V
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
+ \2 o1 j% w! P5 T$ L4 p% ?5,model.transcribe 中参数说明:
/ K5 X1 m3 _. Z' U! {; {) k你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
1 {6 o2 E' r, j7 K% B- o' I6 I2 K其中% `& L3 x+ k8 z
word_timestamps=True, ! \/ j* Y0 a9 C5 {3 v& B4 {; {
保证了你能拿到 word,否则是拿不到的3 s7 s2 ]; `4 x6 p7 x8 ]/ T
initial_prompt = "Hello, welcome to my lecture.")
1 `/ w# X [4 j) v: {; T保证能尽可能准确的断句 punctuation,但是不是决定性的。
5 C7 u& p4 i. ^( x( w) @: a, s其他参数可参考源文件:. r$ \# q* O7 L7 b" q' {1 F( b1 g
https://github.com/guillaumekln/ ... isper/transcribe.py5 x$ W# N0 s5 j p# o
152 def transcribe(
6 K3 a# ^# N- G0 D* R从源文件你可以看到是支持中文的句号断句的。" c9 a" }# T$ `0 x. G! I. o7 {" ?
7 e, E0 O% L* ~6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
! }# o6 V" H' F/ W3 M7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。. E& o1 d S9 G% R
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。& m2 O$ b Q6 F1 s0 H) e3 s5 c: M
2 d3 o; `' u; I: @1 v: \9 Y$ W
1 D. D! h7 J" M$ d: S" J
# G) [7 i, @4 ]2 B5 z$ h) Z |
评分
-
查看全部评分
|