爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
* y7 l# _% r c! I. F
2 U+ l6 b8 `3 T
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
- L4 t7 f& `+ B Q; l
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
" f9 W) E+ g8 d, I2 a7 \
----------------------------------------
( r8 K' I) s+ n* X
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
% L6 n0 {6 d4 ^% N2 R5 l( f
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
( J) N. Y" K- T$ u0 t
----------------------------------------
1 X1 P, S( X! P$ x. S
https://github.com/guillaumekln/faster-whisper
1 J( K; W, a1 N1 z; ~1 z
安装如下:
* d2 T9 D* h8 e5 s
1, Windows 10
' ]8 s$ r2 g) B& e: f
2, Python 3.10.11
8 A) B, e, R" w
3, CUDA 12.1
8 F. [, ~: x3 B4 \
4, 在python 3 中安装
9 ]. p3 O: n9 L, x* j" z0 x
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
& L: \/ E, w4 l6 o9 \! L- j
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
3 F9 ^3 V+ v' w! m
5,pip install -U openai-whisper
& \ A- u* T, R
这是向whisper 致敬,可以不装
5 _1 m+ K0 s& N3 q
6,pip install faster-whisper
* Y6 t+ O" n, r1 z( i: `
----------------------------------------
) K; Q1 I) [3 X$ {
whisper 我用的命令行,faster-whisper 我用的是python。
# E# A& b6 S w8 d: \% V
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
/ M* i9 i& U2 G& X; d$ m/ W
/ x/ B3 z0 `! |6 P
----------------------------------------
2 }1 ~ m2 O/ O8 x+ U; w4 M! S
# _- U+ g* G$ @# J
from faster_whisper import WhisperModel
: E- S- ?# e" t
9 o, J7 {& D+ N3 c3 N8 w5 b% k( G" p
model_size = "small"
- N* [+ S; H3 i* u2 `
. S3 D( w( h0 J! c
model = WhisperModel(model_size, device="cuda", compute_type="int8")
% a5 m5 D& t4 _, G' v7 V
8 s4 `$ g6 Z! H
segments, info = model.transcribe(
6 C3 G1 t" C0 ?, {
sourceFileName,
( h2 B, ]' F) I/ K$ L/ a4 @) R
beam_size=5,
. ?+ \# w! b _2 X
language="en",
- h3 J/ y, d7 H6 ^$ B
task="transcribe",
1 {& L( [/ R4 f* D$ |$ J3 c) K4 L
word_timestamps=True,
1 s8 S9 w( V# N8 T& z$ B8 E; g
initial_prompt = "Hello, welcome to my lecture.")
2 f9 X+ G% l$ [' E
0 K" ]" f: U, D# f5 I0 ]0 g4 I
for segment in segments:
! M4 I4 }( `) `0 M7 r
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
( A( r Y: ?* ~+ ]1 p/ e$ y
# O- ^, C9 a% p. ?$ q$ e- L8 r
for word in segment.words:
0 ?7 `9 I5 A7 g- ] e# T
' X5 `; ^( G% k5 J
----------------------------------------
$ Q4 b9 i* D! p2 E* s4 X+ Y
6 {. k; \7 f( b, J8 w
代码说明:
: @! s W+ |: H2 n- C
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
5 ^* m7 c6 x0 {
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
1 `2 X0 I' O" X0 s
2,segment 本身是很粗糙的,做字幕勉强能用。
* D$ |6 t) I/ X7 i
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
( d' z$ k* o* [$ L
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
3 U2 i( G, G0 i$ A/ ?. u
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
* e2 U3 @! z& R8 I7 v
5,model.transcribe 中参数说明:
7 Y# \7 v9 @7 ?4 {
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
. H$ g: ]9 _" c) o/ q4 ]% ?# L
其中
, d/ o" ] T* s! y; T4 {, b# \8 v
word_timestamps=True,
! F4 b" @% z6 n/ V* Q+ l
保证了你能拿到 word,否则是拿不到的
5 Z! y' I: @% V8 {- m2 m4 x% O# j
initial_prompt = "Hello, welcome to my lecture.")
1 J9 G, d9 d# ]- a5 A7 b. _
保证能尽可能准确的断句 punctuation,但是不是决定性的。
% R8 J! o( q( y7 K3 y1 r
其他参数可参考源文件:
. e& O. g$ W0 i0 U8 l
https://github.com/guillaumekln/ ... isper/transcribe.py
$ p5 V6 B' k5 f5 R% ^7 B7 s5 T
152 def transcribe(
" G+ {$ b' K) r/ @* Q! M
从源文件你可以看到是支持中文的句号断句的。
5 n% r1 p4 ~! t' U
2 c8 i% \: a f
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
& J j" H3 L" V% {% V
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
+ [: j8 h1 I+ x' z9 O
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
: g$ E# E. J5 d6 Q
r w& ^+ e1 G& d/ g# U! x
3 U+ o2 C" S+ _# z }0 \) W$ N
! x/ U& w1 M3 R
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2