|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ( `- v% S2 Q' |8 {
; J& ?2 P, r8 C/ l% K9 x借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。7 q$ q F8 i* s
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。7 H. [5 `. m0 d0 @& K& i
----------------------------------------1 z* V4 S) \/ [
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
1 p) W& O% U( f+ _# a- }) `在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
6 M. L& V% X) f, Z1 j1 k----------------------------------------
- ~6 H& }! r: e8 R- Vhttps://github.com/guillaumekln/faster-whisper
/ a: S1 ?: d4 ]3 C7 o2 q5 v安装如下:, E4 `9 Z: F8 |* Q: o: N9 v
1, Windows 10
# u; U- m% C) \" l9 s. v+ t6 d2, Python 3.10.11# n* b8 ~; e/ \3 W" v
3, CUDA 12.1
2 ]) P9 s e" g: D" C9 ?4, 在python 3 中安装5 u- j- `/ j0 Z
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
7 ^' V2 E9 H$ a( A* Q这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
8 }! N7 q6 h0 S7 j7 r5,pip install -U openai-whisper7 ~9 H9 X: l, Z! R# J- \
这是向whisper 致敬,可以不装
/ ~5 E& a. e- R$ V6,pip install faster-whisper" _3 H# T1 s6 u+ U4 i/ Q
----------------------------------------
3 d: u4 K* i3 K' ywhisper 我用的命令行,faster-whisper 我用的是python。5 d5 M8 n. C: U) r- G
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:# `- E) Z; V" U4 T/ n
1 Z, d8 Q7 }# _, T& w3 u% D" f2 E1 [- V----------------------------------------- V) C% Q3 \6 J9 b5 j5 v
( |/ ^' r3 i( u
from faster_whisper import WhisperModel9 w$ l! J: M+ V4 @( J
8 ^1 B7 u5 ]2 I, @5 k
model_size = "small"
) w7 O8 y2 i0 Q6 a+ s. G: s- t# |% z
model = WhisperModel(model_size, device="cuda", compute_type="int8")
, q5 h3 H4 P) X8 x; d7 i" q% D, {1 M
7 N& v- u0 l$ F6 Psegments, info = model.transcribe(" o6 Y* |6 T9 J) d+ G/ O# g. C$ Z
sourceFileName,
' @- m6 e! j; m: ]! T1 T beam_size=5, ; T1 h$ T. O# e
language="en",
' |0 \3 e7 P X4 s task="transcribe", 4 ~4 p: y. f3 u; g/ _$ B5 O( g
word_timestamps=True, 0 m6 W; V: O% S) u6 T1 g
initial_prompt = "Hello, welcome to my lecture.") {+ A3 E6 D9 Q$ X* C. _
/ ~+ A! Y q6 O0 y& E8 B5 D
for segment in segments:
* t) z- [( ~( P% G* J print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
; e3 _. \" \9 l0 C7 j. L. x2 E. h, t/ I, {9 R y
for word in segment.words:- D3 p6 o: i* c- X/ h) _ S
' D7 ^0 A' k8 o. O
----------------------------------------$ c+ T1 }6 q4 @
/ s. _' X4 V: D. C8 v* _
代码说明:
/ O5 O! u. D- O( X8 v3 B1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。- g8 n; T- |+ i m* d2 ~' b
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。! r" |9 i6 z2 Q3 b7 O, {
2,segment 本身是很粗糙的,做字幕勉强能用。
% F# m6 q6 C0 X6 o3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
. _; y$ w2 {9 d" o* @4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
! I0 k5 H F* l7 i6 @# y2 V" m比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。* p9 j) a5 g6 y2 [) j: k5 x8 f
5,model.transcribe 中参数说明:6 |) Q+ ^; B; {0 a6 k
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数1 z$ A1 z- r+ A* z6 y
其中/ v$ l; _5 R0 `3 d* ?
word_timestamps=True,
" }& ~$ V; q' j+ X4 E保证了你能拿到 word,否则是拿不到的
4 z8 g: @% ~ r# P k9 Y initial_prompt = "Hello, welcome to my lecture.")
& k2 w) G! K; b d8 G: W保证能尽可能准确的断句 punctuation,但是不是决定性的。
; S2 Q2 z5 j4 `' ]1 W' o# m其他参数可参考源文件:( d; }9 n- J' A9 Y+ Y2 w/ V/ X
https://github.com/guillaumekln/ ... isper/transcribe.py; t2 `* R+ ~/ `5 @! e# u
152 def transcribe(
/ Z a) B+ v( v从源文件你可以看到是支持中文的句号断句的。* |1 @8 |2 e8 a. P2 f) b
4 T3 ?8 F: k1 V* J" h! G6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。- L; M1 r8 s3 r
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
2 V8 Y3 r+ Z" z; i$ I$ U P8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。0 t# @" i! s R( N: N- m7 R+ I, G
* ]) a1 R. ^1 S8 T7 t2 }& k* i8 h 7 E r7 ~; G! J, C
' U8 l% ?" m( Y1 } |
评分
-
查看全部评分
|