爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 " [6 H- H) \. L! p: W! h. W
5 i6 J: H) H+ r# K" K. X6 y
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。( a. Q  r- z* D. _2 Y8 D* p7 e: Q
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。. v3 m4 a/ X) {# c! L' ?+ M
----------------------------------------& }+ T: Y5 @: c& ~$ r
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
+ C1 L% V# x2 j" K6 g在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。! B" S6 Q4 @1 ]7 J& x4 F$ y
----------------------------------------
! t! x0 a/ ]+ {https://github.com/guillaumekln/faster-whisper
* R% J1 V! j! d- \  Q! {安装如下:, k3 R0 t6 O2 C: @$ D$ I
1, Windows 108 ]* S8 `" x9 O% [4 q1 a$ ?* \. g% o
2, Python 3.10.11. D- g  o( d6 I6 h% x9 `9 @
3, CUDA 12.1) \5 ^* ~2 C! |$ p2 k# s
4, 在python 3 中安装
( P4 K0 E* J0 xpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
  [8 U# B" r6 k0 @# b! `. \' H这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。. C4 J) }/ _( t8 E* V
5,pip install -U openai-whisper/ i  X/ e/ Q# Y! j" ^9 V' o
这是向whisper 致敬,可以不装( g5 @; a& P7 r
6,pip install faster-whisper
/ ?3 q# K1 b. i# ?, Z& X----------------------------------------
& G* p: m1 I) g3 M. s3 ewhisper 我用的命令行,faster-whisper 我用的是python。8 z1 e$ \" i, ]1 n$ i# W
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
) {. y6 s: m0 d' C7 K
0 s+ w# j! E. w  x----------------------------------------
; G' p: t4 p. d( V- j
* L  W; U- G$ S; J- ]from faster_whisper import WhisperModel! z4 |4 C. T! a: W+ T* T
" o' Y1 J% Z% K; \' C' p
model_size = "small"
* J' z2 C- B6 R: m. r3 s# |, W" U0 k. ?8 e1 E, V1 N
model = WhisperModel(model_size, device="cuda", compute_type="int8")+ a4 Q& C0 s2 U2 n) V% q3 K0 E% F
/ y2 b, p1 X2 w( i( U9 }
segments, info = model.transcribe(
( ~+ g- p' w& t& o! I4 q    sourceFileName,
) @; K% Y6 s/ k    beam_size=5,
( Y+ N1 u) j# Z+ R' r1 ^/ t7 V. ]    language="en",
. J# z  z! j9 y2 u' z" |. H  J; O    task="transcribe",   \- y3 i) L; D" l
    word_timestamps=True,
1 L6 X( M, c; V4 h- U4 O( ?    initial_prompt = "Hello, welcome to my lecture.")
$ ~5 g$ r4 a  H
2 }; Q9 A' H5 I" \4 u. W. [  mfor segment in segments:
) [1 [% u6 c8 G5 {& w    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))/ f! m% m  ]! e5 P- U0 V

# B7 E8 _3 x, X7 Y' y$ \# ], C        for word in segment.words:
( r7 X: M% X$ y$ z4 [! u               
$ q- t. ^+ g6 Z. V----------------------------------------& N/ d" k" c, d' D

6 d3 M5 _! C  z1 P% |5 Y  h' u代码说明:
' ]- U8 c* J, U. _) ?; B1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。$ E6 m! W; T& \. a; `1 @" E* m
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
. Y2 d: l1 u$ @  G) P2,segment 本身是很粗糙的,做字幕勉强能用。( x8 L8 C. w. s: \' R2 @. H
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
  Z, a+ n4 ^( a, f# ]9 W( U: s4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中5 Y. [0 W' s6 w6 i
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。5 v- i9 F* M( R, z/ [; }
5,model.transcribe 中参数说明:0 ?7 u& ~4 d/ O6 z" _4 k+ J/ [
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
7 P1 i9 e* h) y- n6 w; N$ h& n其中
# G. E- N1 h! T    word_timestamps=True,
7 @) [* {/ S2 Z; i9 w' I保证了你能拿到 word,否则是拿不到的: j, V; S* ~; O' q, S2 q
    initial_prompt = "Hello, welcome to my lecture.")
0 G2 [7 I/ x7 \, G保证能尽可能准确的断句 punctuation,但是不是决定性的。: E) f0 D# H3 `
其他参数可参考源文件:
5 }: }' |# G0 V, q' qhttps://github.com/guillaumekln/ ... isper/transcribe.py
  w- p9 O5 n. s/ l  E152 def transcribe(
! a% {( w' J' T& L. E& ~从源文件你可以看到是支持中文的句号断句的。6 ?: C# L" |2 d& z( B

7 f* V! u, [( o4 Z+ @4 S) p& ~! P% ?6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
& K  ]4 _3 ]: r! z. k) B7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。. V( }/ N$ F% D- C
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。5 A# T: O1 Q% h1 j( [

' ?9 p8 {6 o3 a7 p; V / Y; F) V5 F2 k9 o

3 ]# I2 ^( c7 h8 t
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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