爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
5 L9 U4 j# b# K. i. g3 Q3 Q" d% ?
6 L* E9 r8 t' D; M6 C
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
1 Y5 H k1 C; g5 \3 f
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
) I0 c! }+ _, h+ r- |
----------------------------------------
4 [6 ~" X# l9 Q F
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
5 Z/ S, @; _0 P+ L$ B9 H
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
# a" y6 F8 e# {. R* x# }
----------------------------------------
1 O6 J i+ o2 d: k! Z9 G" e
https://github.com/guillaumekln/faster-whisper
' F) |9 Q9 N0 p: |' }1 A
安装如下:
- t( y6 [6 D f$ v
1, Windows 10
) ^) |! g8 ]5 z
2, Python 3.10.11
& d) y: W/ k: f" Y: W, r7 N; S; o
3, CUDA 12.1
/ e) U' U# |7 E0 v* ?6 I8 a, X$ k
4, 在python 3 中安装
# k! Y a2 Q( A" i" K
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
8 c" ?# e; Q: A2 A/ Y3 H
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
; M* R5 {( J8 W" k
5,pip install -U openai-whisper
* y* q1 M: L e0 }' t+ s! a
这是向whisper 致敬,可以不装
! c9 h6 K \. D8 S p( S7 l9 I. U
6,pip install faster-whisper
' h6 Y; ?! g M, W+ t3 Q
----------------------------------------
' M+ ^; Q; x2 h. X6 H2 L0 m* B
whisper 我用的命令行,faster-whisper 我用的是python。
* b+ m2 p- m$ Z- v5 o5 j
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
) [$ m8 }0 @0 l( F& S$ }
1 s% z4 ~! x# J C% w6 o
----------------------------------------
" G, F4 [, j |% S' ~6 ^ n
0 n* R. w3 p2 L* }
from faster_whisper import WhisperModel
# k* @7 a9 a Q
( `) H* I0 Z0 X) \
model_size = "small"
& Q9 G* ^& L) q Z) W a
# p$ a* R* N1 N7 z
model = WhisperModel(model_size, device="cuda", compute_type="int8")
' ~# D+ Q2 ]2 L5 R# C* ?5 Q5 Q
& q& ]' P" e% n0 R7 n
segments, info = model.transcribe(
* B1 u1 K, ?+ S$ a" B
sourceFileName,
, R4 y/ j+ }, d9 F
beam_size=5,
: W- f4 y0 y7 P
language="en",
3 E* q2 ]8 I- q% l
task="transcribe",
" `1 C6 L$ d' k/ L7 a
word_timestamps=True,
7 _3 \ Z3 D. X$ V
initial_prompt = "Hello, welcome to my lecture.")
. R3 f y! W1 R& }
* |& D5 D* J$ Y/ r# z) F7 {8 r, ~
for segment in segments:
( F; X* b* d& Z+ E
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
# Z/ \' u" Q4 K7 u* }# M/ w" _
1 U4 }% w0 ]4 m V
for word in segment.words:
+ t4 G6 k4 ]# h, [0 p$ t$ R
& ~& [3 K4 T9 L. p" d
----------------------------------------
, o+ C. Y' q9 G- b
# W* D y9 j5 u
代码说明:
* P/ r4 ?) A" B
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
! Y1 B% P& K- a, X# [1 ^
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
1 s$ X" j6 r2 a1 U9 @1 D4 L
2,segment 本身是很粗糙的,做字幕勉强能用。
* c0 L8 S3 L) c' K9 i& `2 V5 z1 d
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
- x/ |! T" G0 F! g* e; N
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
- e- _, o @1 V1 s" \) \# i8 _
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
( D8 } ^ D; t( }
5,model.transcribe 中参数说明:
8 ^- N0 o5 c5 s9 [
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
+ [6 E1 w$ a3 k# g6 C1 `6 d
其中
4 N% D, u* }- B
word_timestamps=True,
* {& E# B+ b/ c1 P( k
保证了你能拿到 word,否则是拿不到的
% b0 K1 @1 f; }3 ], g! m X
initial_prompt = "Hello, welcome to my lecture.")
8 S a% u% l* a6 M2 X" t
保证能尽可能准确的断句 punctuation,但是不是决定性的。
! \+ e* P; [* f* l
其他参数可参考源文件:
9 _6 m, }6 h+ p( N% |
https://github.com/guillaumekln/ ... isper/transcribe.py
! I& D2 w6 U0 S: O# d
152 def transcribe(
- e7 }2 [5 l0 g8 c! S
从源文件你可以看到是支持中文的句号断句的。
! I9 ]& D* ^4 ?8 S* W7 {
- L( x- \, e" M" m6 |5 w
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
1 [9 V' J6 T/ m6 X' f- S
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
* p4 h& m3 O+ F |
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
* x# ~& S. L# k0 `# o
7 }: |5 \& ?& x! i- F* O) ~0 f
/ d( @/ q4 T1 G# k! |/ Q4 f
6 m6 G" e! ^) p/ |) s
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2