|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 6 |% u K% ^$ Z, U' c4 b
9 p' z6 c" E( J; U0 A借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
' S8 G, k/ I8 \, N: a$ w, U; M9 {效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
8 N/ J5 Y! d/ t) k% I& W( Z: _----------------------------------------
/ P! z# ^: w! N% N. N6 l+ N/ b. E8 N显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
, @4 C1 s+ n* v$ D9 Z7 I0 \" m在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
* S, m+ n, E7 z----------------------------------------
! f3 x- z$ O' y* }6 Y/ @https://github.com/guillaumekln/faster-whisper3 l0 V$ g% K% ^; s( t- y
安装如下:3 E6 g- R) H* {1 t
1, Windows 10
# v6 h/ v; C$ Z2 G k( j& r. g2, Python 3.10.11
, [+ s6 o) O# N4 J7 v3, CUDA 12.1/ b* p: Q, {9 Y
4, 在python 3 中安装
I6 N E w/ ]/ N7 P& U2 Upip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1173 C9 Y' G$ [2 g ?6 y
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。; g' W' G! T! F- `6 q+ [% K0 q$ k
5,pip install -U openai-whisper. F8 V% [* V. x+ J$ t- Q, v
这是向whisper 致敬,可以不装/ a* V/ A' L% g$ h9 J
6,pip install faster-whisper
. `7 L- R$ ]) f. a- n9 p6 R----------------------------------------
0 T0 A9 d4 p# d. I* G! w0 Gwhisper 我用的命令行,faster-whisper 我用的是python。
4 H& K) ~# L X0 Q1 y' n下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:$ Y) [" H) Q0 u9 B
& k3 f3 l n8 G) E5 V, P2 n----------------------------------------
* g9 g" l7 s' o, w5 W5 \
6 x9 t8 m* Y! J9 r- W+ }) v: bfrom faster_whisper import WhisperModel# q5 }( r3 ^8 H/ i
/ U: B( R, ]' l6 z$ d; T/ Zmodel_size = "small"9 O" i& }8 k# A+ P! W
5 y5 s5 C+ u' R$ S" V+ I7 ]model = WhisperModel(model_size, device="cuda", compute_type="int8"): P5 l0 l( [5 J! c& n( d
! Z0 S7 o/ g) t' Zsegments, info = model.transcribe(
7 j9 S W0 Z" Y6 H$ [* ~ sourceFileName, ( N2 Z. w7 g' i* _& w5 ?. d+ Q
beam_size=5,
3 s6 l* [5 H7 L language="en", ( u7 R) w9 ~# v2 a# g* T3 I9 A
task="transcribe", 8 C( l4 U% T% @7 W; H6 y
word_timestamps=True,
3 w7 o0 E q# D0 u/ b initial_prompt = "Hello, welcome to my lecture.")
6 ^- F8 v4 p& {+ s9 G8 t8 z! b( R& L3 K6 O1 h" v d; p
for segment in segments:/ i% M1 Z) z2 N8 v! @2 p
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
" m l4 H G# G
8 l% n, F2 v: x- I+ B* x$ h" M for word in segment.words:
* _: ~' A9 {! D1 G" A+ g
, g. U1 m2 |8 Y5 L----------------------------------------
1 W: d q3 P/ L2 Q
\: r9 g$ U3 r- L* B( N代码说明:
4 [2 w6 \ }+ w6 y, J1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
- |* {9 T/ L5 }. {但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
7 l: ]2 B" k! i2 G. s2,segment 本身是很粗糙的,做字幕勉强能用。% z! ~8 O& L6 P0 }1 f
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
8 d0 C3 C! `3 F3 z4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
. o9 T: b4 ?2 U比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。. D0 f. T6 N9 Y$ E# J( O
5,model.transcribe 中参数说明:
S- Z# l, o2 F5 R' ?你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数9 D+ w" b% E& j5 Y( D, Z/ { D: C
其中/ g; L$ j7 k8 e5 c
word_timestamps=True, # Z5 M. s4 X/ X2 N
保证了你能拿到 word,否则是拿不到的
; P; `6 J5 P4 t. w initial_prompt = "Hello, welcome to my lecture.")0 n( V* C& I& a) U$ T
保证能尽可能准确的断句 punctuation,但是不是决定性的。
- P. f2 A+ @6 Y. k其他参数可参考源文件:9 C: N5 A3 X/ K* R: L" {3 D( t4 P" j
https://github.com/guillaumekln/ ... isper/transcribe.py
* N) E7 d4 x m [7 N152 def transcribe(8 A! G8 G. m0 d: @, U
从源文件你可以看到是支持中文的句号断句的。6 j z& E5 H1 v
: ?6 s3 ]9 d* A6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。3 B( S, f, R# P3 U0 Y. Z
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。- g- ]5 H6 L: @ e; r/ ]
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
2 g& z: I( e4 m I5 ^2 k' x
) T+ V6 v* S0 D* V8 d . T+ t: d1 \9 L$ S8 J
d1 d# |, u! w3 E* X |
评分
-
查看全部评分
|