爱吱声

标题: faster-whisper 更快的语音到文字的识别 ASR [打印本页]

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
2 l3 h0 J/ q3 y3 m
2 [/ L$ s; w# c  P* b# F0 E, [, h借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。; p: y) Z( Y- Z8 ?. N3 H! x
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。  j; |6 z& R7 D1 w( U' G6 s, G
----------------------------------------' J* f1 d! y8 I& E0 p
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。7 _: D/ K* D/ J* `" l( w( {
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。) f- ]# _, S$ P. s( J" Z5 z
----------------------------------------' f* B4 k/ M9 ?5 r
https://github.com/guillaumekln/faster-whisper
, H1 {  b7 _1 ~1 E7 s' g9 J) |安装如下:
/ v9 x3 i7 N4 h' k+ W1 Q2 u1, Windows 10( l" a. Z) s: k  R0 z% |
2, Python 3.10.11- K! G8 {5 [5 e4 a8 s+ Y
3, CUDA 12.1( E; k6 J" f4 x/ c+ i% W7 o+ X1 w
4, 在python 3 中安装
! V+ _6 A4 o0 Z: M8 Tpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117/ V. o, g8 {3 Q
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
1 h2 Y1 |, h8 B" E/ f/ N9 a5,pip install -U openai-whisper
% g# R% @. \& I  q, s- |, `这是向whisper 致敬,可以不装
9 H% G6 o7 a& U7 s( ~6,pip install faster-whisper. T( }  ~% O+ N6 i  r8 A
----------------------------------------
/ N/ B$ V; q- Fwhisper 我用的命令行,faster-whisper 我用的是python。- r1 x9 `  t. R) C8 {0 h& C6 z
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:% G0 j6 j' B$ \0 c

" r2 n1 h3 F* l& B: a----------------------------------------+ G4 d1 d; {1 v! ]4 s

6 X$ j. a! m& u/ o$ [& hfrom faster_whisper import WhisperModel9 B% d3 w& j- x6 }% W

/ T7 b& O: E9 [! i. v9 Kmodel_size = "small"
  S3 \4 `5 N  n( O
; k. p, j' Z) P  T* mmodel = WhisperModel(model_size, device="cuda", compute_type="int8")/ }; t9 m3 ^. n$ R; ]# I7 Z7 L2 E/ p; M
6 B4 Z( P9 x1 W" n7 j4 b
segments, info = model.transcribe(
9 W) z6 J; g3 |& s. G+ `7 Z- S    sourceFileName, 3 Z( |1 J; @$ d: W
    beam_size=5,
) h/ o& @( |( j    language="en", * Y/ X- y/ T8 o, f* G9 V
    task="transcribe",
) e$ Z% i2 V( J& T0 ~+ Q+ P7 Q% V  H& H    word_timestamps=True,
7 m: ?& u' e* G+ P$ @" L' @- k- B; j    initial_prompt = "Hello, welcome to my lecture.")( {: m! p3 r; N- g

/ ^, J) [: T6 w8 z  Xfor segment in segments:6 H# {; n" p# B8 b
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
( ^8 t+ z5 E( x
: b- D. u! I6 P9 s) P0 |) R        for word in segment.words:
$ B2 v2 T8 ?) G" p8 d& V/ N4 X               
6 T4 g) r* F9 v+ T+ c, u: q7 Y' [----------------------------------------/ O, e) S/ C. R5 x: k1 n; o

2 }: L7 `# q, f2 }' o代码说明:
4 M  s# ?/ F2 C! r: P+ o& F1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。4 O4 `; b/ F3 W6 ]5 U8 a. S
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
# l& U" o: d4 n5 Y" u0 S, o6 q2,segment 本身是很粗糙的,做字幕勉强能用。2 `0 k0 i+ s! W/ b6 k$ \  V
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。. V- E; Q7 _/ X. M' W
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
. f  a1 p' K) v" ^  l: Q) J比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。* I, I6 M8 L" m# Q
5,model.transcribe 中参数说明:
5 p! {& X, ^8 @# \你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
7 T9 O2 e8 h/ [) n, Z, O其中
1 \. x% Q* @1 L' ]$ S: a    word_timestamps=True,
+ t6 }' N1 i) _. z保证了你能拿到 word,否则是拿不到的% }7 A( R' y# @" f) B! c
    initial_prompt = "Hello, welcome to my lecture.")
4 K" A! C$ [) i$ L& R+ W. f3 h1 G保证能尽可能准确的断句 punctuation,但是不是决定性的。
5 Q" L( M8 m+ w- e7 I, r* M8 J其他参数可参考源文件:7 t' W% ^) ]0 a8 l( j, R. P
https://github.com/guillaumekln/ ... isper/transcribe.py! Z5 ~# ^& C0 D, v! |
152 def transcribe(
6 _7 x2 S: A8 h( k8 H. g. ?从源文件你可以看到是支持中文的句号断句的。% v" k2 S8 b2 V  ~: U

6 j. X- f- ?- E. ?0 f/ F" {% ?6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
1 ~9 s' w8 [9 z7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。2 a) f/ C8 v5 ]) e7 D, _
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
% R$ J1 h/ b9 z( ?+ u  E8 N* {6 G0 Q0 S- }. W, M
/ [/ I  M, I! f! |# m" R

' Q& ?" C' b: b
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




欢迎光临 爱吱声 (http://129.226.69.186/bbs/) Powered by Discuz! X3.2