爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
& F' Q4 q- e* X( K" y( p
$ v* X1 Z- i V7 @, u8 X
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
+ o- L! f0 F% W1 X8 t3 u
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
0 U! u4 H4 o* z$ G
----------------------------------------
! e6 }& m4 t" `% Z! [2 m: a+ v" Y; b
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
9 R; u$ t# F" G+ J. `
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
: J0 t, f) k8 k5 c
----------------------------------------
+ K3 x2 e3 b8 N& B' X4 R. P8 }% j- \
https://github.com/guillaumekln/faster-whisper
% w: k+ Q0 X, e8 v8 d6 {
安装如下:
7 N' X' k- Y% X1 Q, h/ W
1, Windows 10
7 @: q, D" f' Y! j u
2, Python 3.10.11
: p% Z, G8 x/ f
3, CUDA 12.1
5 ^' @4 R1 Z2 X
4, 在python 3 中安装
' y6 p( A0 |; N, y. r
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
- c \, l/ T: U$ v9 w# S
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
5 R/ \( ^2 J6 D* v* p) G S
5,pip install -U openai-whisper
- U8 s9 Z* s4 D; n) P9 K
这是向whisper 致敬,可以不装
/ L9 n3 R% j0 F6 T1 x; f/ n
6,pip install faster-whisper
9 G0 }1 G) Q' b: X4 `- W, K2 W
----------------------------------------
( m7 ~$ A0 A+ ~: F0 g( n
whisper 我用的命令行,faster-whisper 我用的是python。
8 {: O# ^- Y) }1 B$ ~
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
$ v: q6 s, H$ N: _* q3 Q \
+ o; c) o3 \) }- K
----------------------------------------
1 M6 `+ d }. {# [$ M( l! k1 m
# z! ?7 I+ ~; A0 u
from faster_whisper import WhisperModel
3 U, m; Z+ M7 |. B$ M+ H
8 {5 P' {, o5 e/ t5 d7 H
model_size = "small"
P6 g# m' c+ Z* ~0 j3 ~2 I5 x1 H
: r9 `1 K6 A9 K5 ?) d
model = WhisperModel(model_size, device="cuda", compute_type="int8")
* s( h: _! K' F
2 x! T9 u& D1 i8 d8 Q2 ~1 P
segments, info = model.transcribe(
i5 U8 {2 }" T* a+ _
sourceFileName,
% ?. e! _& ^3 L4 ^, s4 ~
beam_size=5,
1 u E, F/ x! u; p! n( ^
language="en",
# a0 S+ W# E. ?$ R5 I# b9 v; O7 [' Q% j
task="transcribe",
9 x8 a& g8 |1 p6 K
word_timestamps=True,
/ @" {. O& |) T
initial_prompt = "Hello, welcome to my lecture.")
^3 _. S( Q; [" I# U; c/ r% Z
" A" w2 O5 c+ p# K" [
for segment in segments:
2 \- A. }; r& C4 u' ~3 `& z1 q
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
& d1 J! `5 c& Y6 u# U7 {
; k. D% u" ^3 s8 P, t4 H# j3 }, Z
for word in segment.words:
- Z* g1 J8 L. E: Z6 E! |8 [# |
( B! R8 h# k7 |4 D' O% h0 ]3 `7 H
----------------------------------------
, c1 s6 [# A. P1 h# I; G1 |
: V, d+ q M5 ^- `1 f2 k, S
代码说明:
: |7 @8 f* b' |) ?
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
% p- z4 F/ ?+ I9 l- W
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
' @1 C( g. T* J" H6 H
2,segment 本身是很粗糙的,做字幕勉强能用。
" E+ l9 R/ j: \: e/ ?( o: I
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
& J$ F8 f* f. b0 t: S/ R
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
% |+ q' L$ N. h: ~# s. \" t
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
, ?* O/ i: r2 i6 l" F
5,model.transcribe 中参数说明:
0 y- o/ c1 a. K$ Z! }+ O
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
k& w; B. b- x q
其中
4 _3 {. `: r: \ y" V, o
word_timestamps=True,
v* ^ a, B% c* D) X: G6 a
保证了你能拿到 word,否则是拿不到的
9 ^; N8 f( T0 U' o
initial_prompt = "Hello, welcome to my lecture.")
0 T2 [ D) }3 L p8 o$ r" a# M- J- a
保证能尽可能准确的断句 punctuation,但是不是决定性的。
0 r6 l ?2 k# j6 Z$ R; P
其他参数可参考源文件:
( }2 m( t) l$ i# u+ A1 e, n* ]
https://github.com/guillaumekln/ ... isper/transcribe.py
& {; h6 N( y* ]1 x" b6 i
152 def transcribe(
# d; m2 \' W* q) E7 y. K
从源文件你可以看到是支持中文的句号断句的。
7 Q* i" I4 q# n7 q- [
/ b6 ^7 r' e; ^
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
9 |* N+ C- x6 Y2 ]2 r
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
. {/ X0 D3 k8 p1 t) X; \
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
f( x- i. A4 y
& j- z1 ~, U+ [6 L6 H8 D: y4 G
3 P: }: `9 n- c F) O& B
$ V8 N9 B9 u& B3 @" c2 y
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2