|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
" N' ^" J% y) _0 T( O: O) j9 V( q' F9 P+ Z3 A& p
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。" I6 \! b: \/ X) B8 L% P' s* C
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。/ H! |3 C3 J) O4 K6 x4 j, j2 e
----------------------------------------: D3 ^6 z8 b# u E z! ^* u! G
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
3 |4 e* H) q3 `% |5 \, {" E: F& _在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
2 T3 x! b( K; r+ D----------------------------------------! l# \! O& s; L
https://github.com/guillaumekln/faster-whisper3 R7 U8 u) }8 s3 Y. n
安装如下:+ p) O; p, [0 F( e. q3 W9 M; | }
1, Windows 10
# y9 a3 R5 T5 H2, Python 3.10.11" \2 q( B" a/ l0 a; H4 n
3, CUDA 12.1
% t0 B9 v4 e: `: ?4, 在python 3 中安装/ F9 ?% {5 |! K) n
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
& K+ X h+ U. I9 |这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。) m7 Y7 s, J: @% ~6 a" H; q. a8 @
5,pip install -U openai-whisper
e" f' W: |& P2 a6 L& L4 G这是向whisper 致敬,可以不装 [, X7 b; I6 M+ ^- X- i. B$ I0 j
6,pip install faster-whisper
1 K9 g0 B1 ]+ a----------------------------------------
% f/ @2 i' k7 Q4 zwhisper 我用的命令行,faster-whisper 我用的是python。9 q: ^* a6 K( S5 Y+ a4 m, d2 Z
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:; d; n7 K: b! `+ A+ q# d# Z
3 `! [& _3 S. N c/ ^- k' i% M. N3 l
----------------------------------------
' E8 ?2 p6 V* M! H; B# p
0 ^& @8 X' A/ J- V+ f% Sfrom faster_whisper import WhisperModel; Q' a6 D! j3 K3 O4 Z' f8 ^2 i7 Y
8 w8 ^: A+ @( x9 zmodel_size = "small"" c. Q) G4 a8 R, ^5 b$ g; `' t
! F+ ^* Y( F; s* K
model = WhisperModel(model_size, device="cuda", compute_type="int8")& Q- c' ~: n3 N+ x$ ?
( H: j6 d. L- J _1 g
segments, info = model.transcribe(. v- v6 m1 G+ p4 j, I3 q; F9 O
sourceFileName, 1 {9 ?6 N. f; a: U' f- }6 v1 P; ?, \
beam_size=5,
, `0 E; E, z p: Y language="en",
( M" V+ t2 e6 y. C" g# { task="transcribe",
1 Y# |6 ?# n# w4 H \ word_timestamps=True, 4 {) u: R# P, s/ Q$ I. s8 o2 N
initial_prompt = "Hello, welcome to my lecture.")
$ Y* \( d* Q( g3 J! `
! P, o6 H% \0 S& h2 jfor segment in segments:
. `8 Y+ {& ?- X2 I E print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))1 B1 Y/ K0 F3 v4 F" \5 n1 p
; Q) W5 _, j0 Z" `4 H( U6 t/ a for word in segment.words:
& r& p$ C) H# @* j3 O% {- B 8 m; e+ S) | @$ F8 m5 _% D
----------------------------------------
/ ]- F1 t% F' i, ?! W
4 G' k% @& Z: T% c1 U* \4 s. D代码说明:
4 I7 L# E1 e: F6 E# A; G1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。: e6 T* c! i" U1 ]3 E
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
" l% ~( }0 K: E; E* s0 `" X2,segment 本身是很粗糙的,做字幕勉强能用。2 r4 K: S% u, S5 Y
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
5 h2 A# N- R; K" j- f# @4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中: }& d" n+ B7 a. S
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
/ l7 i1 d8 K; w- L5,model.transcribe 中参数说明:
( z, H& x- h+ |( Q |: D4 c你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数: m5 o9 u+ ?" z" G, N( N2 B$ u
其中
5 Z- ~3 q* j3 J- B8 `/ k4 i word_timestamps=True, . q; ]- ^6 [4 m# q
保证了你能拿到 word,否则是拿不到的- x+ t- U. N% u
initial_prompt = "Hello, welcome to my lecture.")
( q9 g8 _5 W$ u, F' h保证能尽可能准确的断句 punctuation,但是不是决定性的。
. o8 p: Q, R5 @其他参数可参考源文件:" V# _+ \, W$ u
https://github.com/guillaumekln/ ... isper/transcribe.py
6 `& ^: I) X3 i7 a152 def transcribe(7 i( \( b7 u0 K6 Q" x% O, O
从源文件你可以看到是支持中文的句号断句的。
e) s' l4 p `+ `7 w+ D6 F! ?7 M4 I1 S' m) l
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
; Z5 T/ B: K% {: ^: l7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
" s) s8 N" t7 R9 D* H% n8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
; c9 G! m2 {' X6 k2 `
- b% p5 r/ B- b 0 _) u3 W5 B9 G' R; D! [
3 `6 S2 Q% @$ |$ T
|
评分
-
查看全部评分
|