|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 9 |: C# u4 U: d( R# Y, ?
8 W2 a; p) i0 I借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
; k, H$ w/ P* p* I0 l4 @6 a效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。+ d6 Z( J' x& G) e6 ]
----------------------------------------
) X# ?% \" o+ Z0 h, ^显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。! ?/ z/ F; q) w9 K/ ~
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。& a; o( x8 K; p- Q! X! V9 C
----------------------------------------- D# g2 V; S5 M& x5 G* l% ^+ x* u
https://github.com/guillaumekln/faster-whisper! h6 c7 s- F( y( S
安装如下:
/ A/ T: k6 i w8 W1, Windows 10/ T: w$ l+ L% I2 P
2, Python 3.10.11
9 P, {0 g" C: s1 ?* ]! \3, CUDA 12.1/ G& @/ \/ {; V
4, 在python 3 中安装
6 o0 C: J& X- W/ V, W! J cpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
& e- |( p& o6 c这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。# J6 F+ S3 E( m s/ l
5,pip install -U openai-whisper. M: F' l( |$ r* r7 P
这是向whisper 致敬,可以不装" ^9 T9 c7 t r+ I& V! J& s# s
6,pip install faster-whisper
: W/ V! ?4 R; K$ i1 y, i----------------------------------------1 _( A0 Z, q! {& M3 f5 U# B$ U
whisper 我用的命令行,faster-whisper 我用的是python。
1 G) Q: j; N4 W' v3 k, K2 D2 Y下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:6 ?( x. z+ [. Q0 C1 O) `1 h
$ S& M, K0 A/ j0 e----------------------------------------
" @) B& @! l4 t2 W' l" B3 e2 ?5 i7 `6 j Z1 K/ {+ R$ `7 x6 @
from faster_whisper import WhisperModel
! r- `1 T/ H: {9 [( S. |9 w
1 {* Q" Q; w, D* p7 }6 Pmodel_size = "small"
3 m* ~' E$ ~- p+ [. w9 U( x/ l \/ a; e' a! e2 t
model = WhisperModel(model_size, device="cuda", compute_type="int8")
, s1 {6 x/ }: X, [5 _7 j- T3 `$ ]( ~# V7 O
segments, info = model.transcribe(
$ e- d- D8 v5 K. _2 r% Y! ~ sourceFileName, ! ?7 T$ T* s& v) _
beam_size=5, ! `9 U: h8 i( f/ w/ p$ G7 |5 ~
language="en", . R$ F1 _- z# Z' T
task="transcribe",
) A; a; `. y" X1 f% Q% C word_timestamps=True, " i" u( [; S0 t7 M0 ?# u
initial_prompt = "Hello, welcome to my lecture."). ]/ \; o6 q3 Z
6 N: T8 k& `4 ~0 Z
for segment in segments:
$ b" g; N' H4 I6 K+ U, ^ print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
c' ^% y6 i4 p5 H/ }3 c
1 t0 d/ ~. s! s6 U9 a# x( S8 H for word in segment.words:
6 ^4 W- y3 j3 M0 j
6 _- l, Z. a& \ q" t----------------------------------------
4 T' w* O4 E% O6 N9 z$ T2 D. ]; M" p/ p; e6 l
代码说明:; i- C4 o. T/ D! C7 q
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。/ X. g- T" e" F- b& _; O
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
% J: I- P+ k+ o6 I2,segment 本身是很粗糙的,做字幕勉强能用。7 |4 A o* E% q
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
- s9 r8 n) g# g6 _9 M4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
9 t! _6 k( J l# P3 u) a9 t比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。( W0 }5 u& B1 L$ e
5,model.transcribe 中参数说明:
8 t3 N' B* ^7 b5 M& ^# O你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数" D+ V( n f1 S7 j0 ]6 @
其中
& M; ~' u' J1 t Z- C/ J word_timestamps=True, 8 G( l* Y# z0 ~8 E T
保证了你能拿到 word,否则是拿不到的! \9 w& c9 W6 o6 D5 X
initial_prompt = "Hello, welcome to my lecture."); o' A l# A9 ]! y
保证能尽可能准确的断句 punctuation,但是不是决定性的。$ E4 A- p3 E4 c! Z7 U% G( Y$ z
其他参数可参考源文件:
+ y2 K F$ W9 k3 lhttps://github.com/guillaumekln/ ... isper/transcribe.py
2 @& v. P/ ?1 f* F7 v$ c% J: T152 def transcribe(
$ Q; U8 v8 l( M( N从源文件你可以看到是支持中文的句号断句的。4 U7 h1 r, U9 @" |2 f; {& d
8 m3 w& B9 Z% u4 W8 [6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。; W) e% S6 \6 g! b v1 s
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。; c0 x8 p" S5 A: N( J
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。+ I: s0 `$ C) u' w6 a
8 Q0 ]( `" v4 V8 W/ m % s$ T$ o$ R6 D1 f2 I* ]! \
0 ?; X. |) @1 G* f \! j" W" i
|
评分
-
查看全部评分
|