|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
# h3 ]% J' G) n0 k! b5 M2 J" E8 A" u6 i
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
" u. a7 Y# x% o3 I4 ^效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
$ O, U* E. Q9 `- Q0 ~; B* T; `----------------------------------------
4 D7 i; b4 w& Z显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。$ I/ k( {3 ^$ R
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
# K) k5 i7 ]% t7 ?& ]# Y; Y& u----------------------------------------
% {" n2 L+ n2 b, j+ h* [" b. @" t7 `https://github.com/guillaumekln/faster-whisper
K/ T5 c5 M' Q5 X1 {2 Y安装如下:& `! ]3 a1 ^+ Z( l- H
1, Windows 10
! s; H$ B( c W+ ?2, Python 3.10.11& g$ ?9 |) ]) C- H( Z
3, CUDA 12.1
( C: g) U6 ~- R U( K& R4, 在python 3 中安装
1 T8 B4 i& @5 ~4 u$ {" |1 Wpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117/ P2 T* C) w7 w" W
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
6 N: |$ E: M7 U3 c: S' L" A$ H! Y5,pip install -U openai-whisper
5 Y3 o$ G; F- x) ]3 d, g% l这是向whisper 致敬,可以不装. c" _5 b& g) `: q) Z% Z
6,pip install faster-whisper9 W. O0 g' E: i {* b X
----------------------------------------
% p3 {8 r4 l( V: zwhisper 我用的命令行,faster-whisper 我用的是python。8 O( x! C! ] K- v+ L
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:9 o9 Z1 Q3 c8 I& z+ p& q
1 v+ d7 z* z$ V% K: d
----------------------------------------
8 e7 T: ~: E+ z% e: C7 j
" r3 F/ ]( V; L, ?! |6 S' Cfrom faster_whisper import WhisperModel3 J# @5 w* o, _: o0 y
: X3 ?6 g5 V0 t ]model_size = "small"6 Q) ?& ?" d8 |5 _( T: X
" z4 R% N9 J+ _7 P, N8 zmodel = WhisperModel(model_size, device="cuda", compute_type="int8")7 D+ t2 P4 d4 A- u% [
* B# Q+ v7 b* M3 u9 N7 _4 [1 C; F
segments, info = model.transcribe(2 a& a0 N& {7 o+ X
sourceFileName,
1 g9 W2 Z: z$ c5 Y& ?0 z+ D+ W beam_size=5, * h9 \ W8 ^$ r
language="en",
; A& |+ N% l5 e task="transcribe",
" m9 c0 ~, ]# E0 w# ^4 h. X# r5 y& v word_timestamps=True, 3 l" _* e# l! a/ \' c7 u: U7 [: O
initial_prompt = "Hello, welcome to my lecture.")
1 O) u- p9 I0 }9 y6 r/ Z4 L( e
for segment in segments:
) Q" {% B9 z, `! P0 G print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
- \+ E; u1 P. B1 \( C g# c' b% c. \7 y% t/ Z7 g# T$ }
for word in segment.words:& W& d7 V! ?& F1 J. V# N! N, w
8 O* l! |% {9 V9 M: K
----------------------------------------9 ?' {5 ]) A g2 ?9 A8 n
- o1 C: W! g8 n: G& x% V6 W3 y; q; I
代码说明:( m# T1 X) Y$ @; [2 P. W2 Z* k
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
V3 q' C4 M: Q. h Y; W, ]但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
- W0 s j |/ F# _) R9 B2,segment 本身是很粗糙的,做字幕勉强能用。* W, _ F! f$ t( S6 R
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
% A* R7 J. D- `( V( i4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中( G0 Z9 B, A# H3 r7 ~
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
; y# [, `: i ?8 f5,model.transcribe 中参数说明:. o2 f9 o; V$ q: o5 c) A( p# R6 b
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
2 F) K& ]. z y! G" x其中
, \% Q) K; ^6 d) Y& A& | word_timestamps=True, 6 Z1 s( q W/ _( O; F9 N
保证了你能拿到 word,否则是拿不到的
; \- z7 k9 r3 \, S6 Z1 U7 v initial_prompt = "Hello, welcome to my lecture.")4 h2 h) u% ~1 x6 ^! Y+ v
保证能尽可能准确的断句 punctuation,但是不是决定性的。 y B+ v5 x" V& o0 {
其他参数可参考源文件:
0 v5 H* S2 [2 ^6 m- p( qhttps://github.com/guillaumekln/ ... isper/transcribe.py. A; z4 {2 W+ [1 t y
152 def transcribe(
" D& ?' W& |' n! r6 \从源文件你可以看到是支持中文的句号断句的。) c6 b8 Q, Q& ~
/ Y' O4 ?9 l& F6 T6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
8 f7 O$ S2 c' \3 d! a7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
9 K7 `2 t$ O( x" I8 U8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。) s X$ [/ [4 k
+ O" b% f* G0 [% \ S5 X! b# I , J/ A* B) |7 \0 m8 |6 ~
3 Q* k" \% k, L' B6 u. I
|
评分
-
查看全部评分
|