|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 " z2 C$ Q* ?% `
3 C% W3 \5 |/ m; r0 S
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。& H; b9 K2 h5 @" |' j
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。, K/ e' i; v: r: f0 i9 n9 w9 K2 X
----------------------------------------
2 o2 i7 @2 y5 k4 g1 b0 c显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
: O Y6 a1 q8 g& M7 i在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。" w5 X5 x) r( P+ ^ ?3 u! l) m
----------------------------------------
% `4 }+ F' S9 v# i. p Whttps://github.com/guillaumekln/faster-whisper
; s0 _5 R) X! d2 z% ]安装如下: P S. [8 w$ r' O
1, Windows 10
1 Z! p. a g' D* q1 |- g/ {2, Python 3.10.11
4 Y0 _9 K# }. t" a; Y+ W3, CUDA 12.1
3 c* c, D' ]3 L1 R; f4, 在python 3 中安装' }' A9 E' b8 Q( g5 Y; ~
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117; T8 H1 X: ]% k
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。! v/ Y C! Z6 T- c% J/ \8 J/ E- D
5,pip install -U openai-whisper
8 H0 t. s! `( p4 a8 h7 n这是向whisper 致敬,可以不装9 [! v. \- z1 ^0 L
6,pip install faster-whisper
$ m: x z; c1 E) x$ E/ m----------------------------------------% m L! b9 c v4 t" p% G$ |
whisper 我用的命令行,faster-whisper 我用的是python。
) o: V v6 z$ }+ N& W! s- K下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:/ X% G4 p2 m( m5 {) m" d
- m# ]2 U7 Q/ {" C$ _3 C. Q4 l7 V6 ]
----------------------------------------5 P4 ~/ b. D/ T2 y) c# l5 R
" w5 A \+ F- ^% P# C0 [4 B
from faster_whisper import WhisperModel. P" _4 x1 p: @' }* p8 I
' W. L: \" }* g" R/ t% q* Z, omodel_size = "small"
]& _* z4 Z8 s
6 r3 P, Y, B& B% E5 k& E% K/ ~model = WhisperModel(model_size, device="cuda", compute_type="int8")
* i; N q8 n$ f" f. J( P5 D4 @
( F, B9 W$ Y$ j4 W9 {5 D. z8 vsegments, info = model.transcribe(
5 h3 x; s% C0 b' d! L sourceFileName,
' z" n& y2 Y A beam_size=5,
9 f% c" G, i" w( j- N3 |3 O language="en", + N! q( m! q/ f8 b9 W
task="transcribe", - N# S ?7 n" a6 f; p7 J
word_timestamps=True,
0 ^2 i, w. H; B) _ initial_prompt = "Hello, welcome to my lecture.")
) _' |( Z% r$ d8 @2 {; W7 j) Z5 {5 ]
for segment in segments:
! w8 V! x t7 U) _' A1 m2 m# p print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))) q% Z$ x, V+ Z( k; r- `
. }! S6 @& |# [3 H% M
for word in segment.words:
$ P$ \8 |' \& `+ o p% Q7 Z 4 X- {8 b3 G8 |: y
----------------------------------------: T: Y, L b# n
2 s$ f- O( ^1 n' d8 C8 o代码说明:& x N% {9 R; f% e9 j( s0 o
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。7 y7 Z0 p$ M& Z+ A- s7 m. W' H
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
$ {8 c# o5 d- H2,segment 本身是很粗糙的,做字幕勉强能用。+ _. Y7 ?% b6 m+ x/ B P
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。) T/ G. Z, C7 W2 i" g' x; G
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
9 P' \9 L. b& r1 Y* P+ O4 U比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。+ e, F7 c1 K* @8 s
5,model.transcribe 中参数说明:
: ]0 A5 c$ y; U% K你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
2 j7 m2 ?7 m# O3 ~6 \其中
5 m1 R9 {. u4 w. m2 U. A0 N7 U word_timestamps=True,
) @( j7 \1 e# ?$ H保证了你能拿到 word,否则是拿不到的
$ d- X7 p, x! N% q initial_prompt = "Hello, welcome to my lecture.")' K. R& r5 U( [1 z* d2 x8 o) s2 |! b
保证能尽可能准确的断句 punctuation,但是不是决定性的。! C: s# X0 G4 v( V0 A
其他参数可参考源文件:( J9 g8 z# e _/ `& Y: q$ n+ Y
https://github.com/guillaumekln/ ... isper/transcribe.py; ?1 n! `$ {8 d E! o4 c3 i) ~2 D
152 def transcribe(: G7 p2 i3 r7 F$ I. Z4 ^
从源文件你可以看到是支持中文的句号断句的。
8 p9 b% B0 d3 l1 `- e" a- _
7 H2 g% [" w5 x3 Q4 \, t8 b6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
# |$ L, C6 ^% V. z; M( K2 Z) F: T7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
$ S4 v0 [$ R/ x( s8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
~/ s" h: j9 u: g7 J& ^% |8 i0 U: s: R. e( N# ~% d- G
/ i* m+ K. }; U7 q3 M% D4 X
- ~+ t; m* o" I. a6 A |
评分
-
查看全部评分
|