爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
% P1 {1 t% M- B1 {% J9 E, V
- K U% F9 F. i- a; L
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
2 E" n0 U6 ?1 q' h* A( ?
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
* f$ z. g# V% u& X6 O7 @, w6 z
----------------------------------------
# ^& I- ?+ d) w- c. ^, F* \( o2 z
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
% V, H. z2 r; J( Q' A
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
0 k8 @' E# T; J/ }1 `. L
----------------------------------------
# B) Q8 b# A5 T) D7 S0 ?6 d
https://github.com/guillaumekln/faster-whisper
0 m1 B, j) K j5 ~
安装如下:
% _0 [- b" }8 ^3 ]6 j
1, Windows 10
7 P# K% D+ h: V5 R6 M1 a
2, Python 3.10.11
8 f% X* \) z+ m4 p5 u5 \
3, CUDA 12.1
; t# ?1 @. P! o6 [
4, 在python 3 中安装
# V X0 e' }" q! q0 x
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
6 K' A' c0 t8 q3 k5 ~, n5 e; m
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
! u, e& c, Y( E, z# E% S
5,pip install -U openai-whisper
r! c' U5 ~9 |" e, G/ [; x4 b
这是向whisper 致敬,可以不装
3 v6 y$ O' R+ {, ]4 A0 ~9 }
6,pip install faster-whisper
) o i3 Y3 g: P& f
----------------------------------------
% R) A& n4 T. H7 c3 n* p( Z. }
whisper 我用的命令行,faster-whisper 我用的是python。
; w& F9 O. \' _
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
! m+ X2 M8 Y7 w
* E8 P: ^" ~, U6 T
----------------------------------------
# f% j0 Z: V+ e
$ d' }! K. z) [& X# A, O! J/ \5 c
from faster_whisper import WhisperModel
: l% e. g/ r' S$ x2 u3 g
& C; N" z3 y* t$ C9 i# C
model_size = "small"
3 G! F! `6 u' V s. r
5 l3 @- N4 I* @* q, h
model = WhisperModel(model_size, device="cuda", compute_type="int8")
9 p1 J* I8 E4 u" H
9 h# u2 m c# l5 ^
segments, info = model.transcribe(
5 c. b7 \$ g& I) t9 i
sourceFileName,
7 r/ Y+ m) E$ \5 G
beam_size=5,
- @# [& q/ U: u/ h+ W8 g
language="en",
4 e3 t: \3 m) k8 g# A# f2 }
task="transcribe",
9 k" x" I/ R I& ?- X1 Z
word_timestamps=True,
7 y( T" t0 ?; @
initial_prompt = "Hello, welcome to my lecture.")
1 _, @4 l7 S! T" y6 ~ z6 o+ D
6 x/ x8 u$ F2 J4 v1 O( f
for segment in segments:
% _( T3 k D" H; G2 @; _" j) {/ E
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
9 _+ l/ k) W! N6 k j& s
. q% L( a/ B* M6 Z
for word in segment.words:
, R) J" q4 s2 P* `! x
, q4 N" D, Y6 t( E( U1 ~9 Y/ l
----------------------------------------
" ]$ e! B4 l; U+ r" r, P0 ^8 R0 }% T
$ I9 d5 V! { J) X$ I5 [ s) F
代码说明:
# ?8 m% C) N- F; c& y& J) Z: H
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
0 @: m3 y8 y6 i# A5 W
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
& G2 h$ [3 \( g& M+ T) N1 C
2,segment 本身是很粗糙的,做字幕勉强能用。
# {: V2 F5 r9 M6 N; ]: t
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
- ]+ L: @( J l
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
1 D$ \" L( [% E! k. [
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
( X* R2 J( t+ C4 q+ c% S: i
5,model.transcribe 中参数说明:
+ Q( U1 d Q1 w) v( V. b$ c8 y
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
* C! y- e$ }$ g7 S b1 v
其中
: z3 M' f" ^ ?2 t
word_timestamps=True,
) }% G$ ]6 U2 Z( b$ i$ ]
保证了你能拿到 word,否则是拿不到的
, u) W3 y q j4 X9 m; L( S9 Y5 j
initial_prompt = "Hello, welcome to my lecture.")
9 P5 e8 Q5 e* a/ e7 B8 h
保证能尽可能准确的断句 punctuation,但是不是决定性的。
4 p1 }6 [1 c" [- ^3 @
其他参数可参考源文件:
9 c E: n u* j4 d
https://github.com/guillaumekln/ ... isper/transcribe.py
% r1 I! c7 E8 \
152 def transcribe(
6 m7 ?9 V9 V0 S# t: l5 t
从源文件你可以看到是支持中文的句号断句的。
. K0 A' b9 y |4 Q3 J
/ P, q- i+ }( Q* D1 _
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
2 [0 k! v2 G$ d# B/ y
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
c4 m- E8 e3 [0 L, j: c' _5 V4 {
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
1 y- E+ q9 U. c; e1 H* _! h7 W
5 F9 W& x' q$ |& S
( z5 M3 w# R7 o; |
( i8 ~3 G- S! {' E& ]% ]1 I9 p4 v
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2