爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
0 A. E8 H, I! r
) @6 j4 K3 j6 f' O& T
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
, C! P' N4 L( K$ Z! k
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
( F* H" a3 }/ Z* ]. s( P2 j ^
----------------------------------------
) N; n1 b) y; Y+ @: ^$ Z( J, G! u
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
2 w" ]/ P/ G# m2 e9 S# G) F
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
, a. {# v2 H9 V! _4 [! y
----------------------------------------
1 W5 \! ?3 m9 W, {9 k3 q1 A3 o: ~
https://github.com/guillaumekln/faster-whisper
* D, j( h$ [6 C' E9 f+ c
安装如下:
; g9 r) H6 N, L& H/ z/ w. u6 f
1, Windows 10
/ N; u# w! ^3 M+ j2 L$ O
2, Python 3.10.11
6 T( Y( s3 H3 \- d, Q+ v! r% J$ u
3, CUDA 12.1
4 ?; M5 O1 l4 [& G) R6 s K6 N* K
4, 在python 3 中安装
( I' V0 Y0 z- i' [/ f
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
0 \, y- H7 Z" g* F0 H& t
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
9 L8 e& j* o, ~) i$ y
5,pip install -U openai-whisper
+ y: S0 q1 w3 z W/ W9 O4 d0 K
这是向whisper 致敬,可以不装
% h4 v! H9 ^7 }# i
6,pip install faster-whisper
% [6 d. L5 u+ s/ g
----------------------------------------
6 w; U, ^" J8 L+ s
whisper 我用的命令行,faster-whisper 我用的是python。
! p& j- e- ^+ R: m) X `& u
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
2 L- J8 R" \+ s& m
1 y) K( U5 E* I& t' D7 @) O9 [7 u
----------------------------------------
) }+ H5 _' O) d$ C2 ^+ m/ I
4 v" X5 j* k$ n. A' `6 J
from faster_whisper import WhisperModel
; m m1 B& {3 U5 @0 x6 K7 V
j1 U# O8 g. U4 L. v# Z/ p% n, T# A
model_size = "small"
4 y6 G2 M# t# Z- M( [( `% h) f
+ P/ e/ q5 [( c8 p3 h& P! R
model = WhisperModel(model_size, device="cuda", compute_type="int8")
. c* \4 m8 c! z. `* @
5 ~/ B5 S$ A1 Q* K
segments, info = model.transcribe(
: a. T F& e$ w% s- b
sourceFileName,
- ]2 e6 O$ y) z- D% b: }
beam_size=5,
' B; C! i* t( ?( @
language="en",
, v5 J1 L* `7 l
task="transcribe",
: R5 Q" Q* _3 T/ `
word_timestamps=True,
* d7 W0 S M9 R) h( I9 u) H8 t
initial_prompt = "Hello, welcome to my lecture.")
5 `( i, C. T4 T
+ T! C! _0 r+ Q3 w& {3 Y$ G& h6 u8 o3 E
for segment in segments:
9 W/ V0 p" _% `3 o; A. u, B3 C
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
" n' e6 s5 M/ C1 R2 s
% Q. {" S4 N8 E* r
for word in segment.words:
. }( i5 B9 [% Q& I' y* t0 y
" Q3 u/ l2 D; c
----------------------------------------
9 [7 j8 |1 I$ ^3 ?7 J' T
]2 F( B/ x( Q. Y! G/ H
代码说明:
, y8 m$ ~, K6 h: p$ m5 b% h
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
7 m, @5 r" R/ i7 e
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
! p9 W$ F+ d8 ~% L3 }- J& r
2,segment 本身是很粗糙的,做字幕勉强能用。
( T4 b) B) f% B4 H
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
" ^/ Z2 F0 s o/ x( b
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
% i6 _5 O& {8 ~& ^) e; ^+ ~8 e
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
, K/ r5 r5 ^$ b v' V$ o
5,model.transcribe 中参数说明:
7 |9 \% a7 D2 l- D2 F
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
& ]; S! C# Q# z& d
其中
9 L( R* A/ M$ Q! b2 ?9 @6 D, |
word_timestamps=True,
- P9 l" J v9 y/ ]
保证了你能拿到 word,否则是拿不到的
" K$ R& R4 V0 v0 Q" \+ W
initial_prompt = "Hello, welcome to my lecture.")
! A9 K* P3 D! n" `2 R2 Y' W
保证能尽可能准确的断句 punctuation,但是不是决定性的。
$ }# I* P3 c2 u6 u) V9 E
其他参数可参考源文件:
4 L" h3 i& W" G% T* b
https://github.com/guillaumekln/ ... isper/transcribe.py
. i" J! }! B: C& L1 x
152 def transcribe(
% z$ d7 a8 G% E/ _% B ~! C
从源文件你可以看到是支持中文的句号断句的。
( D+ u- d+ l2 A1 A' x5 ]
4 U# a5 C c* K4 H6 w8 \3 r3 o* f
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
$ D2 ~- ^7 B6 B/ V- g, c
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
# x& _) m0 i* Z
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
+ ], I4 m* [) F( n* z* O
. i5 K" y* Q7 W' l( e' z z) x
2 X1 L9 T2 b5 u/ O- m9 c9 k
4 M9 D" L1 ^9 {5 ?
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2