五千年(敝帚自珍)

主题:OpenAI Whisper 转换声音到文字 -- nanimarcusboy

共:💬12 🌺51
全看树展主题 · 分页首页 上页
/ 1
下页 末页
家园 OpenAI Whisper 转换声音到文字 -- 有补充

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%

--

结果我很满意,准确的断句,专用词识别,人名地名大小写,缩写,甚至有些专业词汇也能识别。

一个大叔两个半小时的讲话,语速快,口语化极其严重,涉及到很多地名人名,两个小时识别完成,断句很准确,基本上所有名字,包括缩写都识别出来了。

一个讲中途岛海战的讲话,所有日本人名,日本舰船的名字都识别出来。

而且所有日期数量都准确写好,而不仅仅是用英文打出来。

看的出来,不仅仅是语言识别,也有大量网上文本的训练

--

好吧,下一步的问题是,程序员同志们的工作机会是更多了呢,还是更少了呢。

通宝推:愚弟,唐家山,川普,心有戚戚,奔波儿,
作者 对本帖的 补充(3)
家园 OpenAI Whisper 使用的感受和想法 -- 补充帖

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 隐含是英文,模型用 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 对文件大小有限制, 那就买块显卡本 -- 补充帖

没看懂, 既然用 API 对文件大小有限制, 那就买块显卡本地跑, 就是个电费.

我跑过最大的一个视频文件2G 的MP4, 转换成 wav 文件大概 400M, wav 文件大概一个小时200M左右, 运行需要的时间大概 1:1 , 不过我的显卡太老了.

如果买块3080的是不是会跑的飞快.

而且作者似乎不知道应该用显卡跑, 用CPU太弱了.

"

OpenAI开源了语音识别模型Whisper,这个模型你是可以本地跑的,配合训练好的数据集可以离线识别语音,但是对机器配置有要求,另外你想识别效果好,得好几G的存储和内存。它也提供了API,这样服务端可以帮你跑,不需要你本地运行程序,但是一次最大文件大小25MB,价钱10分钟6美分

"

家园 大佬,微信也有语音转换文字功能

偶然发现的。第一次用的时候惊为天人。有时有个别汉字出错。你了解一下。做下对比分析,让我这样IT小白开开眼。

家园 讯飞

可以关注一下,我现在手机都是语音输入的。

但是苹果手机没有讯飞语记,不方便。

家园 准备12G硬盘最少。... 吓退了

微软股沟什么的语音转换的不好用么?手机上有app, 网页版也可以。

见前补充 4864019
见前补充 4865452
见前补充 4871518
家园 利用 Whisper 服务识别,速度是本机的 20 倍

参考

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 质量比较好,速度倒不怎么样。

主要是 Whisper 质量比较好,速度倒不怎么样。

用Google的,速度可以说是即时的,但是需要声音质量非常好,稍微差点就不行。

再一个 Whisper 的断句,专业词汇都非常准,时间数量表示的非常准确。

家园 请教下,可以识别中文语音然后翻译成英文吗 -- 有补充

多谢了

作者 对本帖的 补充(1)
家园 试了下是可以的,多谢楼主了 -- 补充帖

将中文翻译为英文并输出为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")

见前补充 4902877
全看树展主题 · 分页首页 上页
/ 1
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河