|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ' v6 l X, e7 d) r6 j1 B. \
$ u: E( |8 f) }3 G$ S借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。5 @# C2 ], F8 A. X0 N `( a
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。* P+ s( z1 V9 s$ H+ I! w9 Y
----------------------------------------. V9 W9 }$ j7 x# |
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
* I+ ?5 z0 H, o/ Q' D. V4 N在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
2 [' F% U8 {! Y----------------------------------------
% R$ V) W2 ^& X; h; nhttps://github.com/guillaumekln/faster-whisper3 w8 p6 B& m. G! X& C* F
安装如下:: j) u: h' r& t: S) } R* m
1, Windows 10
5 i X+ F! y# a& `4 Z) p6 ?2, Python 3.10.11
" l7 V7 S2 J( V7 p0 X. [( B3, CUDA 12.16 }1 T" [$ t, ?* t/ W
4, 在python 3 中安装
( @$ s b& J1 ]" Ppip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
1 L4 u. I/ w6 a. [) U这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
- l# T* Q" R- k" [5,pip install -U openai-whisper/ z# I8 R7 F0 n% t5 @3 Y
这是向whisper 致敬,可以不装
! {- s. |9 I+ S4 ~1 \6 d6,pip install faster-whisper, F, h0 l" P/ r, d" V$ D' Z
----------------------------------------. u0 u- r+ f7 a1 Y* E
whisper 我用的命令行,faster-whisper 我用的是python。& v! {9 O3 g) r" {1 g0 ~
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
2 Y5 R( s% O2 j. A( j4 x. n+ C6 w( Z1 X* v# h* D8 g x5 l2 R
----------------------------------------
6 Q" h4 V, w4 w3 `" V0 V2 D. k4 w/ {5 E1 h, ]
from faster_whisper import WhisperModel N! l# @! F- u0 ~8 S) m0 t
% ^: r$ U8 v3 x% T* |& umodel_size = "small"# \( |' p7 U M6 c
2 e9 a6 y. k( cmodel = WhisperModel(model_size, device="cuda", compute_type="int8"). o# e v; E+ V; ^- V7 o+ A
6 P9 N* \3 r; S7 j2 ]% B1 E& ~segments, info = model.transcribe(
! J5 `" ^5 o; e" X& ?3 _9 \ sourceFileName,
' q# j0 h: w" U8 D/ @ k beam_size=5,
5 j4 B, Y$ j& |0 d language="en",
/ }- M9 {5 k) @' t task="transcribe",
3 }6 K) L% d. E: I word_timestamps=True, 4 q+ L0 @0 g: V6 [
initial_prompt = "Hello, welcome to my lecture.")+ K; g7 x K( U$ G. M
# o* O9 A; o0 C/ p
for segment in segments:
( r/ q3 g3 g, \+ c3 b print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))4 Z2 [9 D' Q' T! j8 y6 {$ w
- a1 H1 D+ J3 F( J [% y7 [( H
for word in segment.words:
* {2 a3 q3 H4 V' o) U, }
: y: m) P) t2 B& r----------------------------------------
- D% T3 U; {( B2 H Z) g8 r; L6 z, F4 ? O/ d
代码说明:0 M# @% @5 S% {5 m/ _* V
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
+ t) E( l! I4 \7 U但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
% X( S' i( @* z/ D( K1 D2,segment 本身是很粗糙的,做字幕勉强能用。# S' k1 _: M2 |. S
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
+ {& n6 C2 e& X4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
9 S; z; y* p7 c$ _比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。0 W& e4 E- b5 z' s
5,model.transcribe 中参数说明:
8 X% ?) @' w! c- G6 |你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
& C" {( o8 \# D7 i& ~% d其中* U* P k9 G1 |* J
word_timestamps=True, 7 I t$ D; f( r- l' s6 M
保证了你能拿到 word,否则是拿不到的
+ O4 C4 K0 c+ w% d. a: _ initial_prompt = "Hello, welcome to my lecture.")
0 F, d7 \1 \ S* X保证能尽可能准确的断句 punctuation,但是不是决定性的。, A' L; r# {" h
其他参数可参考源文件:. M: _' T3 g0 T1 _
https://github.com/guillaumekln/ ... isper/transcribe.py
. N& x9 P" { l5 H) o/ X152 def transcribe(
1 A6 g e h5 `8 K" u4 s0 |从源文件你可以看到是支持中文的句号断句的。8 ^ Y' R3 R$ a& s# ?) Y
5 ?( s+ J1 @3 R/ y/ y: z' k6 v6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
: c& J9 R2 W. L- m" z5 K- b7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
5 m1 w& |5 m+ ]+ I3 p/ X$ B8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
& m& h) J, j4 h6 ^( M+ ]" p
! |3 @, C% q P. F2 k u( }. h( u y" w9 R
3 q' l: u% P* F9 H% x4 F- ]0 y3 ] |
评分
-
查看全部评分
|