这是使用Next.js的自动语音识别(ASR)系统OpenAi Whisper的示例WebApp实现。
它会自动记录音频数据并将音频数据上传到服务器进行转录/翻译,然后将结果发送回前端。也可以播放录制的音频以验证输出。
更新:如果您想使用启用实验功能(AppDir)使用
Next 13,请改用Openai-Whisper-api。只需设置旗帜以使用Whisper Python模块而不是耳语API即可。
使用OpenAI语音到文本API,请检查Openai-Whisper-api
如果您正在使用Whisper寻找语音聊天应用程序,请检查Openai-whisper-Talk。
对于Nuxt.js版本,请检查OpenAi-Chatterbox。
有人说, Whisper本身并非旨在支持实时流式传输任务本身,但这并不意味着我们不能尝试,徒劳,大声笑。
因此,这个项目是我尝试使用OpenAI Whisper进行几乎实时的Transcriber Web应用程序。其功效取决于服务器可以转录/翻译音频的速度。
我使用了Next.js因此我不必单独的后端和前端应用程序。
至于后端,我用exec执行shell命令调用Whisper 。我尚未找到将其import node.js模块的方法。所有带有import的示例似乎都在使用python服务器。
import { exec } from 'child_process'
exec ( `whisper './ ${ filename } ' --model tiny --language Japanese --task translate` , ( err , stdout , stderr ) => {
if ( err ) {
console . log ( err )
} else {
console . log ( stdout )
console . log ( stderr )
}
} )请注意,我只是使用tiny模型执行超快速的转录任务。这就是我的全部系统可以处理的,否则它将静止不动。

我从上一个版本更改了应用程序的行为。在此之前,该应用程序将在默认情况下不断记录音频数据,以默认情况下5s。目前,它只有在可以检测声音的情况下才开始录制。
有一个阈值设置可以消除背景噪声从触发音频捕获中。默认情况下,它设置为-45dB (0db是最大的声音)。如果要将其Settings为较低或更高,则根据需要将可变的minDecibels调整为较低或更高。
在正常的人类对话中,据说我们倾向于平均每次句子之间大约2秒钟。请记住,如果未检测到声音超过2秒钟,则记录将停止,并且音频数据将被发送到后端进行转录。您可以通过编辑maxPause的值来更改此操作,默认设置为2500ms 。

由于显示了时间段,因此可以播放上传的音频并遵循文本输出。
至于代码本身,我使用了class component (我知道,我知道...),因为我在开发时很难使用挂钩访问state variables 。

除了minDecibels和maxPause外,您还可以从Settings对话框”中更改几个language , model和task等Whisper选项。请检查Whisper的GitHub存储库以获取有关选项的说明。
仍然有很多事情要做,所以这个项目仍在进行中...
首先,您需要安装Whisper及其Python依赖性
$ pip install git+https://github.com/openai/whisper.git您还需要在系统上安装ffmpeg
# macos
$ brew install ffmpeg
# windows using chocolatey
$ choco install ffmpeg
# windows using scoop
$ scoop install ffmpeg到这个时候,您可以使用命令行测试Whisper
$ whisper myaudiofile.ogg --language Japanese --task translate如果成功,您可以继续安装此应用程序。
克隆存储库并安装依赖项
$ git clone https://github.com/supershaneski/openai-whisper.git myproject
$ cd myproject
$ npm install
$ npm run dev打开浏览器http://localhost:3006/以加载应用程序页面。
您可能需要使用https协议运行此应用。如果您想使用单独的设备进行音频捕获并将计算机用作服务器,则需要这。
为了这样做,请准备正确的certificate和key文件,然后在根目录处编辑server.js 。
然后运行
$ node server.js现在,将浏览器打开到https://localhost:3006/以加载页面。