|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 1 A0 W K. W& d7 [
/ U$ k2 J" k6 x5 i8 v, n8 X, {
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。# }5 J. b4 P% T$ t- \
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
/ o# H/ U6 [# x0 l% \6 F----------------------------------------
6 @+ {: h% Y9 B9 ]5 s' t$ s& \显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。% E# A% O: m: u% Z2 U6 s3 u
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。, s5 Q+ ]8 W) ]3 I+ S8 u- S: I
----------------------------------------
8 l) Z5 |, Z' d2 Q9 o: P8 bhttps://github.com/guillaumekln/faster-whisper Y2 P4 F6 Q3 C3 L% M, ?
安装如下:
, l2 g& x1 @, W' q) I1, Windows 10
' A6 Z: z$ T/ h$ S6 U* X1 N2, Python 3.10.11
b$ `: B* k2 r; v" @3, CUDA 12.1/ I, |( T C/ C
4, 在python 3 中安装' c' g3 g/ V! H/ Q0 D: Y/ C
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
3 o1 q, Z7 X. H3 z这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
8 k& q) o# e4 S2 q5,pip install -U openai-whisper/ v. A3 T& c. T( q
这是向whisper 致敬,可以不装
$ g' p3 V8 ^+ t; O6,pip install faster-whisper
0 ~2 V# ~2 b* @, a" m% p----------------------------------------
- _. W; a+ |( {/ z, Iwhisper 我用的命令行,faster-whisper 我用的是python。
# O- f! j; h- o下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:6 A6 e7 K; s4 Z
8 W% |6 r1 c+ [$ L8 b----------------------------------------4 N2 F% K8 ~' a, e, f
0 \2 u5 ?" t8 j$ V/ J) bfrom faster_whisper import WhisperModel7 C- D0 y" _+ d& n( _: R8 E/ h& {
# g" t3 R/ i7 d
model_size = "small"& k& C0 [) q* G' R3 Q( P* J
$ c3 [$ F r- n: _0 W" d5 E
model = WhisperModel(model_size, device="cuda", compute_type="int8")4 T4 I- `( O: h& t2 H
$ r: X9 m6 @0 {+ M( X' I7 v' A! c
segments, info = model.transcribe(
0 _, C0 q4 c3 ` K( g/ A7 H sourceFileName, : u( M3 x5 b( ?$ i3 x/ s
beam_size=5, + B' `, u- ]8 ~
language="en",
; D9 L2 z/ R0 m; O8 U task="transcribe", * u. l; C' B' K' d: W% p. ?
word_timestamps=True, - o, ~0 b' ^0 p) N3 [/ x
initial_prompt = "Hello, welcome to my lecture.")5 y5 A# E$ m1 w4 z1 s
4 ?) P! e) \# r. `& S* @
for segment in segments:
5 _+ w' K; [. I3 w2 ^6 V print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))* v+ q/ Q* Q; s+ A5 T
) D% a: Q& a6 y i" ^
for word in segment.words:
; X) z# I' x( K# T3 q. K: {# w + v4 p' ]+ u z! h- `, m2 @4 G/ j$ I( g
----------------------------------------
$ Q) R7 j5 K7 l3 O9 m% u( x1 U- x! |1 M7 [9 ~$ n
代码说明:
* N: O9 H3 _2 N+ @- {. M8 _$ K1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
, i/ k9 c! g U& |; f但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。3 c5 c- U4 j8 d5 f8 s5 {
2,segment 本身是很粗糙的,做字幕勉强能用。
) w4 u, o5 W" l# u7 j7 @+ e) v3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
! J# ?" [ }6 c# X# a4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
) ^9 ]0 F. N% a+ B# W7 x比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
7 R- Z( l2 y8 b6 e5 Q& u5,model.transcribe 中参数说明:; K d+ W3 p# l
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
! W3 E+ b* m) i7 ~) l+ h2 v! x其中) m4 Y8 W4 T- B0 F( w, H$ X
word_timestamps=True, $ h6 G0 y y' t
保证了你能拿到 word,否则是拿不到的
, e1 a' \/ u% K6 |- U, b3 U$ E initial_prompt = "Hello, welcome to my lecture.")
6 D) s5 R, n9 _4 V保证能尽可能准确的断句 punctuation,但是不是决定性的。4 L7 R/ d: n& V) h$ K
其他参数可参考源文件:# R K6 X6 M7 |; y7 v) [ Z; l+ r
https://github.com/guillaumekln/ ... isper/transcribe.py
" H) G/ _. K. _) A: Q8 R0 X152 def transcribe(# [* r0 l$ D0 C6 r
从源文件你可以看到是支持中文的句号断句的。0 p; J* k, ~" L. X0 o; F/ s
" n1 [+ Q, l1 e" k
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。! w" q9 s+ p2 y5 N4 k
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
* |& l' _) U$ o& w i0 I8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
. p" G+ Z( T/ O$ W$ x- _* ~/ Q8 q# w9 B y
1 c" {! L! g) g) k) C0 f! V( k) z8 \* ~- S! _: \
|
评分
-
查看全部评分
|