爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
; Z/ U9 i+ \: L3 c" E2 f- l
! T- M( z) z, d2 p* o
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
1 l2 @& \; G; e* b# [% D% V
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
) Q* l; a( ^7 W3 \% } A- n
----------------------------------------
- [$ {' U4 \* n+ @( w+ W5 p
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
6 V/ y6 Z: F6 V0 B7 [ j: ?* y
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
5 R7 v# @2 T; m, f+ G" Q. r
----------------------------------------
% M3 d1 d+ z! g
https://github.com/guillaumekln/faster-whisper
9 e4 q: G9 L( c: d- A/ y" I
安装如下:
4 q! T1 g3 k. q! b" \
1, Windows 10
! j/ j+ P/ x9 r& Z# b
2, Python 3.10.11
7 O1 M! W- g5 w
3, CUDA 12.1
( s- x5 e @5 E: L% I" C
4, 在python 3 中安装
6 V7 E! w' K n. N* P
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
0 J' c5 [" F: K/ _
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
/ k' x- J. Y' |# [5 c5 O
5,pip install -U openai-whisper
, L. O- Z- E1 ] f: `( G
这是向whisper 致敬,可以不装
5 c+ a( Y8 |- z* P: m
6,pip install faster-whisper
1 ^+ n$ F3 _* x: d3 K" D7 a+ c6 k
----------------------------------------
$ b* a% }, ^4 Z, Z7 q
whisper 我用的命令行,faster-whisper 我用的是python。
" Y. W$ z& {! ]8 s! B9 k
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
k( l) ~- `; J- _
! o. s) q+ b! T2 B
----------------------------------------
# O) o) j$ n- M
& B6 e" S$ a/ ?2 g
from faster_whisper import WhisperModel
0 U2 n T' I9 O
0 u; o# q2 h/ C" ]3 f/ }# R& L# S
model_size = "small"
" F& x2 d/ E& m1 `
( ]3 ?: z7 T5 H" Y" e
model = WhisperModel(model_size, device="cuda", compute_type="int8")
' K6 b2 B$ E' Y; I3 X* h2 _* W
" E' t+ |& l1 j0 T, B" E) H8 o$ g/ r
segments, info = model.transcribe(
) o/ i9 \. G+ \4 X
sourceFileName,
1 p7 ~: u& l% N# i$ E
beam_size=5,
# b0 A$ {3 t% z P
language="en",
$ D6 E! ?3 e( ?" H# f$ ^( O
task="transcribe",
- K0 X/ W J9 {' Y; H
word_timestamps=True,
: X2 H9 Z( t. _. v# }- t$ X$ @1 A7 o
initial_prompt = "Hello, welcome to my lecture.")
9 z4 E \& z- f3 u- ^- A
! L/ E. H, `2 ?
for segment in segments:
" Z: V8 b S/ l) }- W! o
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
4 ~0 `# @! `% [7 `& r/ `/ G
7 c! T, s0 u! c3 C: u5 ]1 E. L
for word in segment.words:
# e5 G- N2 h- L7 }. Y
* @, _: t, d5 Q, q* K
----------------------------------------
& I9 L+ F- P j7 C1 D
, Q. d+ v2 a! S& U
代码说明:
/ C) w; K9 [+ E; j. y& Q% _" R
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
! B7 O8 _( g: e |9 C( m
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
. m- T9 v3 }8 [
2,segment 本身是很粗糙的,做字幕勉强能用。
" s- X8 b0 N( u; @1 W: ^5 A
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
& X) `+ a" d( k" z& l
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
1 a% G" {5 e \7 J* x" _0 m8 f
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
! M. }* O( R P, t c$ b. W
5,model.transcribe 中参数说明:
1 b9 h, N! b. F+ I
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
: a4 s) N7 |+ `- J& a5 Z8 S
其中
* E8 z* X2 u& A9 P
word_timestamps=True,
4 c0 D: i& A6 F7 W7 K
保证了你能拿到 word,否则是拿不到的
# g& S$ U1 T8 K0 e* E K+ b
initial_prompt = "Hello, welcome to my lecture.")
5 m0 a& j& T9 D% x6 H5 z, w' g
保证能尽可能准确的断句 punctuation,但是不是决定性的。
2 j* Y+ c. P" q [0 D, L
其他参数可参考源文件:
; K9 r* R7 F1 m2 \
https://github.com/guillaumekln/ ... isper/transcribe.py
" q. i- V3 Q; l9 ]: m
152 def transcribe(
- W9 _0 B. G+ |& `' k0 b) Q2 @1 Z& `
从源文件你可以看到是支持中文的句号断句的。
0 ~% M; T0 f1 E# X" y
7 [7 R. |2 S W6 C
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
1 @- \0 y" z. S1 C0 ]
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
9 ?* B3 n: r' a6 n
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
5 J& p2 @) Q! u& s! t2 [5 N5 z# e
* m0 O* i0 p9 H$ y* S# w( i& L
! V: v& x) p7 y- Y3 l3 @/ t
. G, t! e1 t# B8 D
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2