爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
% b k* Z6 Y& A$ B. Y0 s
% l+ P4 J0 P4 |+ j- k0 D5 c; X
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
$ d; F* S, V) b& b
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
% N# H( Y$ Q' w2 }
----------------------------------------
( t5 O+ e. r/ N- k6 O
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
" O! K" ]8 f. k5 ]' H8 e
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
2 M( _% ~' ~: ^6 L0 s
----------------------------------------
1 K# y5 @ M; ? @) l% g; A0 o, Y
https://github.com/guillaumekln/faster-whisper
/ G4 |" l& K5 H3 I+ L
安装如下:
" t4 ~1 j5 L# S: a" I
1, Windows 10
% \5 p- \/ s" S# }
2, Python 3.10.11
5 ^9 [/ @7 [+ Q
3, CUDA 12.1
% ~' r# J6 b* `) }
4, 在python 3 中安装
* ~( @" A8 L7 _
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
. F) b* I; W4 I( ~' i7 n
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
: B9 J+ t' ?1 |" H/ ^3 L* L' ?8 C
5,pip install -U openai-whisper
* Y) U& j& g$ m2 j$ C, h' a
这是向whisper 致敬,可以不装
# v, t" M3 j" c y( {- {1 M# j4 |
6,pip install faster-whisper
4 G( o$ ?9 [# J* O6 F
----------------------------------------
( |0 U& T* B, I0 h6 e3 U8 ~
whisper 我用的命令行,faster-whisper 我用的是python。
; L" y: z/ \3 ?
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
$ H! M: T A2 F
3 L3 ]# t' t' G* J
----------------------------------------
; U7 {: S) k; Y7 |
9 x; Q% J7 N' n/ R+ A
from faster_whisper import WhisperModel
9 z9 e. m; Q3 H( v/ B, r
3 w, a* C! G+ E4 W* H7 w/ W. Y
model_size = "small"
_8 R$ q% ]( A0 q) d5 H
% {$ z$ b0 s8 Z; r
model = WhisperModel(model_size, device="cuda", compute_type="int8")
- ^3 ^8 A$ l% W0 n# y
' `9 R8 x b) O
segments, info = model.transcribe(
9 R! b1 k1 K- W2 [
sourceFileName,
# K2 ?) v, F/ z# h
beam_size=5,
& J6 I. M$ P: A( N' P: e0 p
language="en",
* N" X |* O# j9 U& Q
task="transcribe",
8 l l% U6 v F% S6 i
word_timestamps=True,
: w9 c, G6 B3 q$ g
initial_prompt = "Hello, welcome to my lecture.")
5 _2 E# a/ v1 C6 b: d/ I8 g2 x
- G" v2 F) T" h9 ^* t
for segment in segments:
3 h- N! d$ d2 e* b, m
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
8 t" `8 a/ M) Z y# ~" B) ]& `, [: Q
* b: d7 j. T! \
for word in segment.words:
* D* n4 n0 Y3 x, |5 k
# n6 U+ z" W' n. [
----------------------------------------
0 W Q5 r* _( d) F, ?
; b: s1 Q; X, j. J
代码说明:
) d9 O) n- y) G8 _4 X( V: ^. \
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
; h2 b5 c/ ?0 N" \0 a" G
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
; h5 f5 Z! _* J9 v" S
2,segment 本身是很粗糙的,做字幕勉强能用。
3 B+ y+ Q1 h, U
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
0 L' r0 C& S& f1 c: ?1 t
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
3 B0 s/ b% e$ l% K
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
9 X$ `# \2 A' o9 Q# N" F( Y3 z. q
5,model.transcribe 中参数说明:
6 ^/ _( m5 X, O8 t1 |3 x( b, n
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
; _% ^% H# {0 L
其中
5 g) P* y* K- C+ G$ O: N- P8 p
word_timestamps=True,
3 t; B6 W3 P! K6 p+ v0 H* x
保证了你能拿到 word,否则是拿不到的
6 T3 ^# b' k( k x. I+ b1 z
initial_prompt = "Hello, welcome to my lecture.")
& X4 M9 P* N! C; ~( q( o
保证能尽可能准确的断句 punctuation,但是不是决定性的。
: P# @" B3 |4 L) A# r
其他参数可参考源文件:
. B- K& p% z& |2 L% v4 `
https://github.com/guillaumekln/ ... isper/transcribe.py
. `* F6 Q1 h4 X& u% I/ ]* b
152 def transcribe(
5 O, [2 Z; R" m2 ^0 g$ A) ?$ Y
从源文件你可以看到是支持中文的句号断句的。
& a# ^. f" h' @( e3 L* f
, o- }( y: [$ \4 E
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
$ T V4 f6 }1 r+ d! [/ L
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
# l& j( z. b V, N
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
8 p! `. R! {1 r# q' |
- { X* N6 M4 b4 _' G
9 Z' G) i2 c4 q/ X1 _& r
" X& Z. C0 E$ A4 _
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2