openai开源了自己的语音识别项目whisper,可将视频和语音文件转为文字,效果可以比肩科大讯飞的收费产品,并且无需GPU,普通配置就可以运行。

本文使用这个项目https://github.com/ahmetoner/whisper-asr-webservice部署实现,这个项目在whisper基础上提供了web界面,并且可以用docker部署,非常方便。

话不多说,开始实战,下面操作基于windows系统。

一、下载镜像

docker搜索openai-whisper-asr-webservice,选择第一个pull。

二、启动

<div id="code-lang-bash"><p><code data-highlighted="yes"><table><tbody><tr><td><pre>1
</pre></td><td><pre>docker run -d -p 9000:9000 -e ASR_MODEL=base onerahmet/openai-whisper-asr-webservice:latest</pre></td></tr></tbody></table></p></div>

运行之后在浏览器输入以下地址

第一次访问会下载模型,所以需要稍等一会,之后可以看到以下页面,到这一步已经部署成功,是不是非常简单!

使用说明

该项目提供了两个HTTP接口用于处理语音和视频文件:

1. /asr: 语音识别接口

  • 功能: 上传语音或视频文件,输出对应的文本内容。

2. /detect-language: 语言检测接口

  • 功能: 上传语音或视频文件,确定并输出文件中使用的语言。

测试语音识别接口

为了测试语音识别接口的功能,请按照以下步骤操作:

  1. 点击“Try it out”按钮准备测试;
  2. 填写必要的参数,这里可以先参照示例中的参数设置,后续将详细介绍各个参数的意义;
  3. 选择要上传的语音或视频文件;
  4. 点击“Execute”执行转换过程。

英文音频转文字

首先尝试使用一段英文mp3音频来检验识别效果。根据上述指导,完成参数填写,并上传指定的音频文件以开始转换过程。请注意,参数填写时请依照提供的示例进行,之后我们将详细解释每个参数的具体含义。

稍等一会即可转换完成,在response body中可看到转换结果。

下面识别结果,可以看到效果非常不错,可以听音频对照着看一下。

<div id="code-lang-plaintext"><p><code data-highlighted="yes"><table><tbody><tr><td></td><td><pre>How

Just fine.

I finally got a grant to go to graduate school.

Great!

Are you starting your doctorate?

That

I

Sounds like an interesting field.

It really is to me.

You

Just a master

Actually, biochemistry is a lot better field for me.

I

What are you trying to do after you finish?

I haven

Well, you

I know it.</pre></td></tr></tbody></table></p></div>

3.2 中文视频转文字

与上面操作一样,只是选文件的时候选一个视频就可以了,我使用以下视频测试:

以下是识别结果,对照视频看一下。

<div id="code-lang-plaintext"><p><code data-highlighted="yes"><table><tbody><tr><td></td><td><pre>养养你长大以后,挣了钱会不会给爸爸花呀?

会

那你会给爸爸买什么呀?

会给爸爸买小马宝链,然后再买好几个贴纸,买画饼,然后再买超清年图,再买一个外卖,再买医院,再买脑积极转弯书,再买颜色,再买小丫头,再买冰淇淋

买这么多呀?

嗯

为什么呀?

因为是我最喜欢的老板家,还有巧克力我忘说了

哦,谢谢你

还有水

买这么多啊?

对的

谢谢你

还有玩具

还有书

还有黄罐

还有钟表呢

抽屉

会把世界上的东西全部都买一遍

真的假的呀?

真的

我挣了好多钱,就把世界上的全部东西都给你

挣了

我要是挣的多,但是我要是能挣的特别多的钱

就能把世界上的房子,流星,还有飞机,还有书,什么都带到咱们家里

好,那你赶快长大吧,好不好?

好</pre></td></tr></tbody></table></p></div>

3.3 语言检测

不识别文字,只检测一下是什么语言,大文件只会检查前30秒。

四、修改模型

这是官方几种模型的对比说明,包括模型大小、需要的内存和相对速度,比如tiny模型中的~32x标识使用这个模型的速度是large模型的32倍。模型越大识别效果越好,如果只识别英文可以使用.en的模型。

<div id="code-lang-bash"><p><code data-highlighted="yes"><table><tbody><tr><td><pre>1
</pre></td><td><pre>docker run -d -p 9000:9000 -e ASR_MODEL=base onerahmet/openai-whisper-asr-webservice:latest</pre></td></tr></tbody></table></p></div>

在启动命令中,ASR_MODEL=base中的base是模型名称,可以根据需要修改。为了提高运行效率,可以将模型缓存到宿主机的指定目录下。这样,第一次打开网页时会将模型下载到该目录,之后的打开速度会更快。

<div id="code-lang-plaintext"><p><code data-highlighted="yes"><table><tbody><tr><td></td><td><pre>docker run<span id="code-lang-bash"> -d -p 9000:9000 -v c:/whiper/:/root/.cache/whisper -e ASR_MODEL= onerahmet/openai-whisper-asr-webservice:latest</pre></td></tr></tbody></table></p></div>

上面增加了-v c:/whisper/:/root/.cache/whisper,其中c:/whisper是我自己定义的目录,可以自行修改。

六、接口参数

  1. encode:看意思是识别之前先通过ffmpeg编码音视频文件,但是暂时不清楚什么情况下不用编码,上面测试的音频如果选false识别不出来结果,所以这里就固定写true吧,如果有人知道可以评论区留言。

  2. task:选择transcribe就是将语音识别为文字,中文语音识别为中文文字,英文语音识别为英文文字;选择translate是将无论源文件中是什么语言,都在识别后先翻译为英文再输出。

  3. language:告诉接口源文件中是用的什么语言,这个不需要指定,可以自动识别出来,如果指定错了输出的结果是不对的,比如本来是英文,但是参数填写为中文,识别程序就会以中文来识别,结果就是完全错的。

  4. initial_prompt:应该是类似于chatgpt的prompt吧,但是感觉没什么需要填写的必要。

  5. word_timestamps:单词级别的时间戳。在输出格式为json时起作用,会输出每个单词的开始时间、结束时间、识别正确的可能性。

  6. output:输出格式。

txt:文本格式。

vtt、srt:字幕格式,可以给视频制作字幕。

tsv:类似于csv的一种制表符分隔的数据格式。

json:可以输出非常详细的信息。

七、开源地址

github:https://github.com/openai/whisper