爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
* N) U+ a6 }" B* A1 K% e8 H# l% d5 |) T
, d# h$ T( ?7 D6 S! V4 r9 k \
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
& S; m3 F2 ?- t
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
, G& s" x/ y. U$ k- ]7 \2 O
----------------------------------------
) C" n2 I0 w P9 w
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
+ p: ~; u! `; L
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
& J# |. B5 n# B2 q1 H% R, x( }
----------------------------------------
* |) t; M5 ?! r H
https://github.com/guillaumekln/faster-whisper
5 s& S% d, e! R3 z( |: Y Y
安装如下:
/ r1 S5 M$ r- v8 E7 J1 i
1, Windows 10
3 p$ D4 D2 {- Z8 ~. @1 b/ S+ ~
2, Python 3.10.11
! D! j9 M( P/ n% O" W) k
3, CUDA 12.1
t/ N1 B6 P1 K
4, 在python 3 中安装
5 ^2 I5 Z: h H* w5 {. I
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
% V3 I t5 P; G# c& k$ C
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
6 C2 }. M4 X6 w
5,pip install -U openai-whisper
# V$ t5 d+ n. p, R( L8 C
这是向whisper 致敬,可以不装
( k) `1 j9 H; x) o# p
6,pip install faster-whisper
: a; g9 }/ R3 j0 } }* Y3 F" [
----------------------------------------
' O% ^9 k( i& I9 r" E% `
whisper 我用的命令行,faster-whisper 我用的是python。
8 W: B, M' d' q* d' M+ K% C
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
' }4 h" u% [% M' a/ W2 B' B
8 J- K5 k0 J# Q+ } E
----------------------------------------
3 H) y/ T; k( d* v
: N) ]$ c" {# E$ Q' ~) i
from faster_whisper import WhisperModel
6 k4 [+ V! L- Z h* o2 V D+ L/ x
; Z) B( S7 C5 _
model_size = "small"
( t4 ^1 z8 t$ e( A% n! W
4 y& w/ S2 x# v
model = WhisperModel(model_size, device="cuda", compute_type="int8")
5 e% k3 }" J4 V+ W5 s$ u, _7 ]
7 d, `' Y: \# m0 o7 X- C
segments, info = model.transcribe(
: I, u& K+ C$ V6 m$ ?% ?, x/ W ^# c
sourceFileName,
! D( `6 I R% U/ K5 y2 Z @- m
beam_size=5,
9 e/ a! N" T9 r- u! o. ]1 M
language="en",
# C- l D" V* n7 E+ }
task="transcribe",
/ g7 o( l3 I2 ~8 w& h& B
word_timestamps=True,
( P- h0 n* s/ g
initial_prompt = "Hello, welcome to my lecture.")
& D& m+ P: ?* _, N, a
6 ]$ P* G0 j* V; K, G
for segment in segments:
/ s |9 M8 B8 k& n
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
& Q) `9 F8 L" i% w3 F- {+ {
5 [ W) B& T/ X e1 i3 k7 k# c% V
for word in segment.words:
. ~. Z6 R$ X* t7 W9 E0 p
" s( E3 c* [! B4 p0 T4 ^' h
----------------------------------------
: w! Y# ^' f( V& D* Y" [6 v
3 ^( J4 W& ~" |: C7 G$ \
代码说明:
- p: c2 k. M( M! B) L
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
# {3 C( i, Y: J0 v4 D; m5 @7 n
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
3 o+ C& {3 t) ? U
2,segment 本身是很粗糙的,做字幕勉强能用。
# i2 V4 c8 L+ x
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
' g3 O, Z/ }& F$ F7 g$ X9 R4 ?
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
! ?! t' E: t7 @ S7 _; v
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
! a( B1 A& ^( Q6 l4 e
5,model.transcribe 中参数说明:
# n" U# S s9 `/ |- f! `
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
+ b! u, I7 O3 x
其中
8 S' m% h1 f+ d. ]$ e, j9 `- ?
word_timestamps=True,
3 Z, L& H2 n5 Q6 ` M3 r+ r+ W1 ~
保证了你能拿到 word,否则是拿不到的
2 h* o, O; W. F7 [
initial_prompt = "Hello, welcome to my lecture.")
/ A) x8 ^8 g/ M$ s. W3 o7 {! r* n
保证能尽可能准确的断句 punctuation,但是不是决定性的。
7 x$ W: n" |, Q, P
其他参数可参考源文件:
) `' |# p. k- M) Y
https://github.com/guillaumekln/ ... isper/transcribe.py
+ O3 W, M4 l, @
152 def transcribe(
" F0 A5 ^4 Q+ f( |) e8 C5 ~7 u
从源文件你可以看到是支持中文的句号断句的。
! Y" U3 Q D# u- e! _) w
! {4 g2 _/ D% g3 n5 ^
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
+ c. Y, U- I) ^, N% Y0 N
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
4 ]0 q1 ~: y: I2 q$ @# i
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
1 q k& b$ l& B+ N) n1 l
3 I, a4 ^- D% ~, _. i1 r
) b# I# y6 I: i( m
1 O. G1 }- ]4 ^7 i& {
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2