|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
4 P2 d, t* _4 h0 D+ }1 K6 G& [
7 [. _8 I- W7 h借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。4 B$ |$ |' [+ g7 n0 w- e
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
4 M! w/ j9 E' w4 x* z----------------------------------------
4 V7 W3 A" i5 x5 Z3 o显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。8 |3 U' ^+ Z. [; ~* l7 E
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。" l9 q! h9 \& m2 @& W; W9 T4 v
----------------------------------------7 f% Z) y9 J' V3 I2 i1 E
https://github.com/guillaumekln/faster-whisper
0 r' x7 Y1 P I% L& x8 D6 Y6 N0 T安装如下:
$ x. p4 W2 i4 f9 B; e9 v1 g+ X1, Windows 10
. H9 M# |; u# D" W! J# C! L2, Python 3.10.11
% b% f0 ]. R" B$ S3, CUDA 12.1
5 f1 u( T/ e" G2 S4, 在python 3 中安装
$ G; E, e' X/ c: F3 d. K a) Ypip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1174 B6 `$ c2 n' F- n. G7 E3 |
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。" b, Q: j9 I( k0 v3 E t0 s
5,pip install -U openai-whisper
+ R; y5 X) K5 k% a2 _这是向whisper 致敬,可以不装5 w) h1 j S6 j/ g+ X
6,pip install faster-whisper3 v) m+ i1 J \, ?2 J
----------------------------------------
8 q& J8 b& s# jwhisper 我用的命令行,faster-whisper 我用的是python。
7 g: O% r6 V$ h! t下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:/ Y; `; S: U- n$ ~. L: p; E3 O, J1 I
: ^- \1 U2 w; u, ]----------------------------------------
; H) \8 B9 v. z/ F5 a% [% a$ F
% {7 o/ k0 O D3 q" R3 Rfrom faster_whisper import WhisperModel
- T5 K# C% ]. f: M" H' a' p5 u a/ v. c$ ], K
model_size = "small"' l! T) \# P0 R' d4 c- X
% v4 i; I) `* J
model = WhisperModel(model_size, device="cuda", compute_type="int8")/ ?- O. F: x' b! u- t
6 F* [) W9 _+ W7 {segments, info = model.transcribe(0 e6 B) e/ q: |+ E7 N# t+ U( E
sourceFileName,
3 `* ]* w- {/ b G/ E5 k beam_size=5,
: c) e# r8 g/ G& S language="en", " `# w8 o' ~, l$ z+ ]
task="transcribe",
4 o K; U ~* c word_timestamps=True,
/ w1 ?" Z$ ?: Y3 Q initial_prompt = "Hello, welcome to my lecture."), w+ m- X# j8 w. i0 N$ _( n/ L
$ b# K7 p8 f, U& i- Dfor segment in segments:. S# B+ G3 t4 z0 n+ q( r0 U/ \! s" X
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))' ~4 j8 \' H: H5 C% i
5 B6 E/ L; ` e6 E8 X( U' Y0 }
for word in segment.words:
; E5 Y2 G! v v7 R2 K. s7 y
. w$ Q \. P# C2 g: j& b0 k----------------------------------------
7 n$ {* p k# [0 d5 z1 w4 Z* c$ W+ ?4 `! i; [
代码说明: [. a3 \! {' Z1 d# ~+ ?
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。7 i' Z7 P, \. s
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
W* F3 |& {' Q- j2,segment 本身是很粗糙的,做字幕勉强能用。
( ^( T4 ?! I- }4 [, U3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。: C" }: j) L( G5 |- @3 [
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
# s1 {7 x, t7 U比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
' A0 G, h1 I F5 Z5 L* i: w+ A5,model.transcribe 中参数说明:7 X% M' E( S2 ?# p! X# s
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数1 i. C0 {6 w0 g; J$ O$ K2 h
其中
4 A* ?/ X1 C, Y0 t! G! X; D word_timestamps=True, 6 M- G' j% ~* D! F5 J# H
保证了你能拿到 word,否则是拿不到的: f8 l( \, B h
initial_prompt = "Hello, welcome to my lecture.")9 Y. Z7 p4 g4 b$ K! o
保证能尽可能准确的断句 punctuation,但是不是决定性的。
/ Q% ^8 V6 z8 d6 U" l# R/ J其他参数可参考源文件:# q t9 n3 }: i" E( C f+ E. B- }( t
https://github.com/guillaumekln/ ... isper/transcribe.py% L. S! U7 P+ ? I$ l
152 def transcribe() Q' P: W6 G3 e X% Q
从源文件你可以看到是支持中文的句号断句的。1 \: c6 {& R. n+ h
+ u5 Y0 { \! [# R* L7 m
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。( N; L, `: {) L+ D/ g
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
0 z$ ?" u, @+ M& C# h' Q( W( P# f/ I7 [8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
! |9 s( g0 R- [2 n8 f: i. a; @! Q4 D2 n6 g4 f% X i" ?
4 z& b, G2 ]* z+ x" l/ J( J2 S' s
! ?+ S q/ P1 }1 f T |
评分
-
查看全部评分
|