主题:OpenAI Whisper 转换声音到文字 -- nanimarcusboy
chatGPT 很火,背后的公司 OpenAI。
这个公司有很多技术,我看到有一个是 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
我用过很多类似的工具,所以很有兴趣的研究了一下,然后这个 Whisper 惊艳了我的无聊时光。
喃喃自语 居然这么强大,真是 于无声处听惊雷。
下面讲讲怎么安装使用。
----
网址和代码:
https://openai.com/blog/whisper/
https://github.com/openai/whisper
记住,一定要安装 CUDA 版本,利用显卡,完全靠CPU,实在费劲。
准备12G硬盘最少。
----
Windows 10, Nvidia CUDA 的安装过程。
https://developer.nvidia.com/cuda-downloads
Windows -> X86_64 -> 10 ->exe(local)
得到一个很大的安装文件,安装
--
Python 3, torch 安装
如果原来安装了,卸载掉。
pip3 uninstall torch torchvision torchaudio
--
torch CUDA 版本要下载一个2.4G 的安装包,和CPU版本明显不同。
pip3 install setuptools-rust
pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116
--
whisper 卸载,如果原来装过,建议重新安装一次
pip3 uninstall openai-whisper
--
whisper 安装
pip3 install -U openai-whisper
--
然后试一下。
whisper -h
注意其中一行,设备
如果是CPU,那么CUDA就没有安装成功
--device DEVICE device to use for PyTorch inference (default: cpu)
CUDA安装成功,显示的就是CUDA
--device DEVICE device to use for PyTorch inference (default: cuda)
----
找一个wav文件,试一下,用的是 small model,已经够好了。
whisper --model small -f all --language en out.wav
第一次运行,需要下载 model 文件,small 大概400M。
-f all ,有多种格式 全部都要。
--language en ,指定英文,否则会自动探测
另外还自带其他语言翻译成英文的功能,我还没有用过。
--
whisper 是能够直接读取MP4之类的视频文件,但是先做处理更有效率。
网上人建议的是 16K 的wav文件,转换命令如下:
ffmpeg -i input.mp4 -acodec pcm_s16le -ar 16000 out.wav
--
Windows 10 打开 task manager, 看到我的GPU的内存全部占用,GPU占用70%
--
结果我很满意,准确的断句,专用词识别,人名地名大小写,缩写,甚至有些专业词汇也能识别。
一个大叔两个半小时的讲话,语速快,口语化极其严重,涉及到很多地名人名,两个小时识别完成,断句很准确,基本上所有名字,包括缩写都识别出来了。
一个讲中途岛海战的讲话,所有日本人名,日本舰船的名字都识别出来。
而且所有日期数量都准确写好,而不仅仅是用英文打出来。
看的出来,不仅仅是语言识别,也有大量网上文本的训练
--
好吧,下一步的问题是,程序员同志们的工作机会是更多了呢,还是更少了呢。
OpenAI Whisper 用了几天,一些感受。
1,监控CUDA, Windows 10
Task Manager -> GPU -> CUDA
右边一般四个框,最常用的性能,第一个隐含是3D,点一下,换成 CUDA。
我这里基本 90% 以上。
2,拿个小风扇,对着显卡吹,不然太烫了,吹了就是有点烫。
3,如果文件里人的声音不是很清楚的话,断句就没有了,字词还在,基本准确。
4,显卡的内存限制你使用的model,我的老显卡只能用 small,你要用更大的模型需要有大内存的显卡。
--
网上有人写了一个脚本 whisper_mic,可以实时识别,但是Linux的,我没有试过。
--
讯飞的桌面版我用过,但是明显在网上传数据,只能放在隔离的机器上用。
--
微信是24小时监控麦克风的,你说的内容实际上给你上传了,所以我尽量不用。
Whisper 隐含是英文,模型用 small.en,语言不用指定
whisper --model small.en -f srt A.whisper.wav
----
如果是其他语言,比如德语,模型用 small,语言指定德语
whisper --model small -f srt --language de A.whisper.wav
----
如果是其他语言,比如德语,且翻译成英语,模型用 small,语言指定德语,指定任务是翻译。
whisper --model small --task translate -f srt --language de A.whisper.wav
----
那么理论上Whisper 应该可以将一个德语文档翻译成英文,也许代码里应该可以修改出来。
没看懂, 既然用 API 对文件大小有限制, 那就买块显卡本地跑, 就是个电费.
我跑过最大的一个视频文件2G 的MP4, 转换成 wav 文件大概 400M, wav 文件大概一个小时200M左右, 运行需要的时间大概 1:1 , 不过我的显卡太老了.
如果买块3080的是不是会跑的飞快.
而且作者似乎不知道应该用显卡跑, 用CPU太弱了.
"
OpenAI开源了语音识别模型Whisper,这个模型你是可以本地跑的,配合训练好的数据集可以离线识别语音,但是对机器配置有要求,另外你想识别效果好,得好几G的存储和内存。它也提供了API,这样服务端可以帮你跑,不需要你本地运行程序,但是一次最大文件大小25MB,价钱10分钟6美分
"
偶然发现的。第一次用的时候惊为天人。有时有个别汉字出错。你了解一下。做下对比分析,让我这样IT小白开开眼。
可以关注一下,我现在手机都是语音输入的。
但是苹果手机没有讯飞语记,不方便。
微软股沟什么的语音转换的不好用么?手机上有app, 网页版也可以。
参考
https://platform.openai.com/docs/guides/speech-to-text
----
import openai
audio_file= open("/path/to/file/audio.mp3", "rb")
transcript = openai.Audio.transcribe("whisper-1", audio_file)
----
后一句修改一下,这样拿到的是 srt 文件
transcript = openai.Audio.transcribe("whisper-1", audio_file, ,
response_format="srt")
----
文件大小限制是 25M,所以一般先转换成mp3:
ffmpeg -hide_banner -y -i input.mp4 -acodec libmp3lame -b:a 64k output.mp3
25M mp3 差不多 50 分钟。
再大的话可切成小段,处理后再合并。
----
典型 mp3 文件长度 600秒,识别用了25秒:
-- length : 600.792 seconds
-- runtime: 25.17 seconds
----
好吧,现在看看给了我多少quota.
----
不过,现在语言转换真的随手都是,chrome加个附件就可以了
主要是 Whisper 质量比较好,速度倒不怎么样。
用Google的,速度可以说是即时的,但是需要声音质量非常好,稍微差点就不行。
再一个 Whisper 的断句,专业词汇都非常准,时间数量表示的非常准确。
多谢了
将中文翻译为英文并输出为vtt格式字幕的python代码:
import whisper
model = whisper.load_model("medium")
task = "translate" # Default is "transcribe"
r= model.transcribe("t.wav", task=task)
output_writer = whisper.utils.get_writer("vtt", "./")
output_writer(r,"t.wav")