爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
( b6 G$ A) {) t2 C5 G0 x- u' n
) z0 g" i$ [7 x; F
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
6 X1 j# t; Y4 o6 Z
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
- k% u' {) y/ N1 i
----------------------------------------
; U7 u! S% v( L( J+ X
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
- p3 d* Y, T0 y- H
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
$ ?. Q6 h5 L0 N# X8 W
----------------------------------------
/ e$ I* P3 r# U
https://github.com/guillaumekln/faster-whisper
" R5 t, s5 T, M E; S3 w
安装如下:
8 _: C& m0 K+ R+ S$ r
1, Windows 10
) E5 N S# [. u" a- X( [) d9 K
2, Python 3.10.11
& Q' H0 i% L2 E7 U$ ]& O, x
3, CUDA 12.1
( z4 ~& D1 l, @% s
4, 在python 3 中安装
% u6 p8 a6 x$ r z4 R* G6 m: d. A
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
3 x j. l8 ^# H8 C1 r+ N
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
8 z7 W% r4 p7 @9 m2 ?& y0 J% V
5,pip install -U openai-whisper
2 m* E8 F2 {% X* j+ q! n
这是向whisper 致敬,可以不装
" x& s3 v1 U( j% O2 [4 Y: Q
6,pip install faster-whisper
0 v6 b9 [8 K. i7 Y) e& B# d0 e
----------------------------------------
) ^" ?4 L W! R
whisper 我用的命令行,faster-whisper 我用的是python。
4 i) [* Y' M* D/ c
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
2 u' q0 m: R7 p( d, Z0 \; ^5 ?
# X' Q1 L7 g" C0 v F
----------------------------------------
' C x, }; n% j; V' i# ~# m% [
5 X" ?5 T2 e5 t
from faster_whisper import WhisperModel
: @/ z6 t% {- L9 y+ A* H
( A& D6 n* Q" l& B0 ^6 u
model_size = "small"
_3 Z) G( Z: J. L6 T
' b2 I7 p- s3 m" Q7 \( T
model = WhisperModel(model_size, device="cuda", compute_type="int8")
% _& v* ]+ l6 B' b3 Q c
+ Y {& `% I' o; o( c
segments, info = model.transcribe(
- V3 w0 Z3 c) W: E
sourceFileName,
; J6 k% S1 @) M9 j- ~" R5 k
beam_size=5,
' Z ], ]) k j6 A! A! r0 }
language="en",
, g3 c# q3 ]& m$ L+ ^+ N( u
task="transcribe",
4 F! `1 l: m+ J6 ^! Q& v
word_timestamps=True,
# Z, B) c( R# }. h S
initial_prompt = "Hello, welcome to my lecture.")
4 [' w% s$ R# P! U
: a6 |( l8 y4 d# t( s/ W" s
for segment in segments:
) J) X1 j4 R4 Y3 O7 G# I9 A
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
, B/ ?: I6 Q w2 X; Y4 m( {! d
' s8 I3 B) X0 ]
for word in segment.words:
, O, k8 i6 a2 J% \' E1 K
. E' V0 m5 A' e& i: S, _2 w
----------------------------------------
7 w( a' p" s+ y& R. o
& N* |! w$ S' `7 U6 A" G% u$ Y
代码说明:
* p0 M5 W# {3 ^4 h- k6 W
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
2 v8 X2 K/ a* Y
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
2 u. r" L z- z; k' o* j
2,segment 本身是很粗糙的,做字幕勉强能用。
; {* {$ V( W) i. g$ J& \
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
4 C$ o6 A5 y( M; o2 ?3 ]5 d5 l
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
9 B( H6 p# K* Q/ {; Y, s' \1 R
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
6 Z+ e, v3 N% g( s% Q) n
5,model.transcribe 中参数说明:
. n/ U# Q* y7 u% `
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
# _. Z8 g" J( e1 y$ R0 n* K+ R$ y
其中
& `4 ^2 U9 q/ p1 q. P+ {% J
word_timestamps=True,
4 o' r+ _- o3 y
保证了你能拿到 word,否则是拿不到的
, I0 `- H2 q& F7 B! k0 R1 V
initial_prompt = "Hello, welcome to my lecture.")
& e+ C i+ b( f" k
保证能尽可能准确的断句 punctuation,但是不是决定性的。
; P' V0 w6 e" [, g3 z+ H6 L! t( [; @
其他参数可参考源文件:
+ p' T( H: W2 F9 T4 o, l
https://github.com/guillaumekln/ ... isper/transcribe.py
+ n: F6 `! f8 d' S. @. R$ _" @$ O) W
152 def transcribe(
1 S6 r& {3 A- \ c$ B: n- A
从源文件你可以看到是支持中文的句号断句的。
' J5 @, F2 T4 e* f
1 h T) X- j) n9 I
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
. D9 d) T: F7 f' v7 g( o7 ?0 Q4 {
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
8 y$ R7 `4 z, z2 X g. e
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
, V7 t& z! G" S H1 v
) U" o: x H* J
8 t* x( U7 m; G) O+ S; y# \
' w! ~( w( w" V) O% i9 X
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2