|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 : J5 Y; c% ]* t- d1 g
+ H& b; l# O3 { C( u3 O- L借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。( x- @5 X8 l* A! K7 ^) i' P
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。' H8 m3 Z4 Y$ ]
----------------------------------------
% Q% O3 a4 G) @" p; P" n显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
0 _4 }0 o; b8 k* ?在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
5 X& @6 v9 q, L7 E----------------------------------------7 ?* i$ Z- O" [
https://github.com/guillaumekln/faster-whisper
# Q8 h# F. n( @& z: V# k& o安装如下:
" {, u$ Q4 V+ w4 u( H0 }4 p6 V1, Windows 103 X2 z" k0 r( @$ U8 R( `
2, Python 3.10.11
" }9 t3 T/ g4 o& I7 B1 P3, CUDA 12.1
* ~6 d3 [9 P% U7 |4, 在python 3 中安装
% ~, r% ~+ j+ R# Epip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
. p2 o3 C# k* a, j这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。+ b& @- R- L- ^0 a; P, n
5,pip install -U openai-whisper
% K$ d/ _- c; [9 @+ C这是向whisper 致敬,可以不装+ \' O3 b! d7 h1 n: f1 E
6,pip install faster-whisper
* Z0 B D v! g, w7 [7 a: q----------------------------------------
2 D: {5 F/ k; owhisper 我用的命令行,faster-whisper 我用的是python。3 {7 e) H1 S2 L; ?' l+ u
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:; T5 u8 F* e' F2 W- A( n
`# Q) @: Y- d
----------------------------------------
* h" `) t! _+ C. P+ a1 o2 \: ~% K' c
from faster_whisper import WhisperModel
$ o7 B& Y8 Y% N0 [5 E' [* R# \' `6 l8 o' j# g
model_size = "small"1 p9 t8 C5 c" X' S5 P1 I
! _6 d1 @0 T- j; q' ?model = WhisperModel(model_size, device="cuda", compute_type="int8") n0 U1 F7 J- } c1 @+ ?6 k
* q# S( P. ~* c8 T' C7 Dsegments, info = model.transcribe(
- M$ K: W' [; Q* P! _8 W sourceFileName, 2 G: [# q# i: }" B# L6 R- L
beam_size=5, ( s" U) `# h4 S0 U
language="en",
, z, l& O& q) @/ D! X- Q task="transcribe",
/ ~" d [* c( f% f- c6 j word_timestamps=True,
( e7 l* U, n" P. c% S initial_prompt = "Hello, welcome to my lecture.")
M4 Q# G1 u8 N; \+ j5 x, Z. X% B
' x7 E2 U' C+ \ t5 a& W9 ]for segment in segments:2 e% W7 e$ a) x$ G" i& B8 {0 z3 }
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text)): u' ?/ c$ t& Q! n$ M- a
% q O) ~. @( Y) w, _ for word in segment.words:
. g6 w) r- ^7 |! J
! P q% a- z4 Z, D# o# N0 C, P: k I----------------------------------------$ b% i' w% I- H
# f/ B2 w7 j/ X1 M# i0 n7 m, Q$ r! f( N
代码说明:1 s0 O& I8 x! }
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
: N# H# A$ C2 g但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。* M& n/ I2 c6 a& @# [
2,segment 本身是很粗糙的,做字幕勉强能用。
8 {3 |0 z% L& r$ {; t8 Z8 ~3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
" T1 q% ]5 W, I: w- `4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中# E9 Z2 p4 n! A' L, [4 [
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。8 ?& `8 r( \0 D" [" v8 ?
5,model.transcribe 中参数说明:3 U- Q2 C" o$ Z" T
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数' D, @5 H9 R% `$ b, B, y8 C( J
其中
! x7 t( _1 }7 g4 [1 X6 l6 E word_timestamps=True,
# `3 I* n4 {$ ?/ F O# l保证了你能拿到 word,否则是拿不到的5 n# i9 {( \$ [7 _1 I/ w
initial_prompt = "Hello, welcome to my lecture.")
0 G H2 ~# q; J2 y. I4 k保证能尽可能准确的断句 punctuation,但是不是决定性的。
% t2 v$ ~# X2 x' G+ ^3 [. p' U6 g其他参数可参考源文件:
+ ?2 J; e, u0 }6 Q Nhttps://github.com/guillaumekln/ ... isper/transcribe.py
1 K S* \9 H5 U; ^152 def transcribe(
! ~# J/ W7 a0 Q7 g3 y& i从源文件你可以看到是支持中文的句号断句的。# ^, ^ r" h% }, T- {0 L" s2 \
* d: h9 {, T/ `, \% w6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
; P3 u2 `/ g$ t, V( X& f/ r$ d7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。# x$ _' q, Q6 r: h7 w \
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
# S7 M3 K& L1 M0 s9 j! G, l, p
4 B+ i+ J# o' Q- @/ D
: n/ C# |. a! M: O( Q7 `& c4 A" ]( s7 S1 a
|
评分
-
查看全部评分
|