爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
! v( _, x+ k8 [3 n, x- U* q" A
" t8 u" q. `; `- d* U/ j
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
1 e( v2 U! `+ A, T
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
2 V2 A- |+ s$ l6 G+ I a6 F1 F
----------------------------------------
# `# J- H* w" @, i2 x# Q3 u# e. D
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
4 J# \1 O* |4 K$ W9 X
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
: r; d, C6 E4 _1 J& k
----------------------------------------
& U1 ?6 U5 a* N
https://github.com/guillaumekln/faster-whisper
' @+ [4 D. H. V7 X, E
安装如下:
. u1 Z4 _0 F" J% C& y0 {: `
1, Windows 10
! k' z9 I; S2 I1 L z- y
2, Python 3.10.11
( D" H6 E! D, Q1 C2 Q
3, CUDA 12.1
) W, A( E( {0 F3 b( j
4, 在python 3 中安装
8 S. b G7 W" F0 Y0 \# Q( O, t
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
* X$ B3 N' X) H" g
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
& p* Z1 z% o8 G6 a: w
5,pip install -U openai-whisper
1 K7 c+ z6 o1 p
这是向whisper 致敬,可以不装
0 G4 {# m/ s; Z- ?" N2 z
6,pip install faster-whisper
3 D$ n$ j- |3 I6 A I/ _1 \
----------------------------------------
! f* D! O. q% l3 Q
whisper 我用的命令行,faster-whisper 我用的是python。
. U) }+ l7 R) `4 g. c6 K6 T
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
7 z- [2 R$ t. w2 a6 a: x& e
# X. r7 }- J |6 A
----------------------------------------
7 O, s5 H& Y1 L- ]8 r
5 ]7 y6 B# ?2 p& _7 }9 @! U7 |+ z+ [, E# J: o
from faster_whisper import WhisperModel
# ~7 |; C Q( k; [
2 L2 V2 T @' [2 T
model_size = "small"
/ c6 K; U/ z! ?: h% d+ |( d2 ~
4 ~, K9 i; z7 v& h9 [
model = WhisperModel(model_size, device="cuda", compute_type="int8")
- _6 D' i. S i) K" x+ @9 y% S
% E/ u+ A0 E0 k
segments, info = model.transcribe(
. H% X4 X8 n% \
sourceFileName,
X8 g& I+ I' a/ i6 T
beam_size=5,
" j( |% f S( ?, A/ b0 R: S
language="en",
; w4 e4 E5 t" D6 [/ j
task="transcribe",
* @* t: w" {4 ?/ F2 J" K
word_timestamps=True,
. l3 P& l& x+ R9 K2 N K
initial_prompt = "Hello, welcome to my lecture.")
) F4 c% ]0 O4 h- {- e( {
5 m+ J: N- `* `& z
for segment in segments:
% c/ x3 V7 t$ c1 u5 W* j
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
- C! M& B p( U) p5 g. z
- b& t0 X3 J6 E' V, Y, ^
for word in segment.words:
# L9 u- Y) R8 N5 [# h
9 V' t7 n( T& _# o
----------------------------------------
! U6 ^( q- F1 x4 E' u0 }7 a' E
1 I* E. s, n" @, \$ P: e
代码说明:
$ g% q" s& S. V- ^. H9 p
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
3 Z& x/ q6 P4 G9 \ m
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
; D# p/ F8 W" a q6 Q
2,segment 本身是很粗糙的,做字幕勉强能用。
: [( M0 \5 c5 W3 O H3 q6 D
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
2 {( C9 M/ j: I9 M# r5 b$ Z" u
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
3 k% ~! J1 n; g# L
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
# X& i7 J' y* B, ^) O
5,model.transcribe 中参数说明:
' X8 [, @& a1 G% v# X1 y7 W
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
7 J, S) s5 `" m" j! j' J. _# L
其中
/ Z3 \4 S+ A$ P
word_timestamps=True,
6 u' ?% M+ i$ M+ T) {
保证了你能拿到 word,否则是拿不到的
1 S t- A4 g" k3 y* r* \* [
initial_prompt = "Hello, welcome to my lecture.")
) }6 o3 o( e/ V. U0 u. f/ w0 q# U
保证能尽可能准确的断句 punctuation,但是不是决定性的。
: |: l7 W4 F; z: ]1 T6 ~
其他参数可参考源文件:
9 E9 F$ v8 K+ f2 }6 z/ `5 U- D6 l
https://github.com/guillaumekln/ ... isper/transcribe.py
& _1 \# G8 @* m
152 def transcribe(
4 K, W3 ^: ], L z W* E
从源文件你可以看到是支持中文的句号断句的。
1 Z* t/ i5 K) m0 [: U3 u, F
9 F5 l% P/ o5 a
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
( ?1 [. l. h4 J* g) b# B
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
7 l1 i4 R5 X W; @# R6 N# y8 z% J
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
2 U7 B# E: f; ?* [+ ?7 b7 C U9 e3 j
, t3 {; o6 W1 G9 T; K8 J, W! D% {
( i M4 l% B. w/ f0 I1 j; x; A
2 K$ n% g( R% {# N! T B
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2