FastGPT 调用本地Whisper模型进行语音转文字

本文讲述了如何部署WhisperASR模型,配置oneapi以使用Whisper-1模型,解决FastGPT中的跨域问题,并在FastGPT代码中适配本地部署的语音转文字服务。作者详细描述了docker操作和修改webservice.py文件以开放跨域请求的过程。
摘要由CSDN通过智能技术生成

目录

一、部署Whisper模型。

二、oneapi配置

三、修改镜像中的webservice.py文件,开放跨域请求。

四、修改FastGPT代码修改


FastGPT地址:https://github.com/labring/FastGPT

fastgpt默认的语音转文字模型使用的openai里面的whisper,由于我没有openai 的token故需要自己部署本地的语音转文字模型,经研究发现可以部署本地的whisper,但是该接口无法接入到oneapi(我目前没研究出来)。故直接修改fastgpt代码直接调用接口获取语音转文字内容。

注:fastgpt的麦克风权限是本地部署的才能用,或者有HTTPS证书的才可以用(麦克风权限比较重要可能涉及隐私,故浏览器对这个要求比较严格)。我目前是本地部署的fastgpt。

一、部署Whisper模型。

我部署的是whisper-asr-webservicehttps://github.com/ahmetoner/whisper-asr-webservice,地址https://github.com/ahmetoner/whisper-asr-webservice。直接docker部署的,运行如下指令

docker run -d -p 9000:9000 -e ASR_MODEL=base onerahmet/openai-whisper-asr-webservice:latest

二、oneapi配置

fastgpt中project\app\data\config.local.json中关于语音模型的配置的模型名称是whisper-1,如下图:

所以在oneapi中配置时模型名称也要写whisper-1。模型名称是一一对应的(早期版的oneapi不支持多个模型,新版本应该是修复这个问题了。我这里还是延续之前我的配置方法习惯,只写一个)

三、修改镜像中的webservice.py文件,开放跨域请求。

也可以直接修改文件再生成镜像继续后面的步骤。我是先部署了容器后,才发现跨域问题。

1、开启容器
2、进入容器 docker exec -ti 容器id /bin/bahs
3、找到要修改的文件并修改,一般容器都没有安装vim\nano等编辑器。故需要将文件复制出来修改后在传上去。
    docker cp <container_name_or_id>:/app/app/webservice.py /usr/local/yxq/webservice.py
    docker cp <container_name_or_id>:/app/Dockerfile /usr/local/yxq/Dockerfile
    修改完后再传上去
    docker cp /usr/local/yxq/webservice.py <container_name_or_id>:/app/app/webservice.py 
    docker cp /usr/local/yxq/Dockerfile <container_name_or_id>:/app/Dockerfile

 webservice.py修改如下:

        增加如下代码:

from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"]
)

代码位置如图:

Dockerfile修改如下:RUN $POETRY_VENV/bin/pip install starlette==0.15.0

修改dockerfile镜像后,镜像启动会先将需要的包下载下来。
4、**将修改后的容器保存为新的镜像:** 使用以下命令将修改后的容器保存为新的镜像: 
    `docker commit 容器id <new_image_name>:<tag>`
    将 `<new_image_name>:<tag>` 替换为你要保存的新镜像的名称和标签。
5、**删除临时容器:** 容器已经保存为新的镜像后,你可以删除临时容器:
    `docker rm temp_container`
    这将删除临时容器,释放资源。

保存完新镜像后,重建容器。我使用的1panel直接更换的镜像就可以用了。先把容器停止,然后更换镜像后保存即可。

可使用postman验证下接口。如下:

四、修改FastGPT代码修改

1、先开启应用的语音输入配置,如图

2、修改文件useSpeech.ts。由于代码中使用的封装的post请求方法,而封装的requets.ts中将返回结果取值为data.data,但是上面的whisper-asr-webservice接口返回的数据只有一层data(可通过上面的postman接口截图可以看出只有一层结构),故需要单独修改下,方法如下:

// const result = await POST<string>('http://192.168.1.39:9000/asr', formData2, {
//   timeout: 6000000,
//   headers: {
//     'Content-Type': 'multipart/form-data; charset=utf-8'
//   }
// });
// console.log("语音转文字完毕:", result);
// 发送 POST 请求
const response = await axios.post('http://192.168.1.39:9000/asr', formData2, {
  timeout: 60000, // 6000秒
  headers: {
    // 当发送 'Content-Type': 'multipart/form-data'时,不需要指定具体的boundary
    // Browser/Axios会为你处理
    // 'Content-Type': 'multipart/form-data; charset=utf-8' // 不推荐手动设置
  },
  // 告诉axios,即使返回的内容是文本,也不需要进行任何转换处理
  responseType: 'text' // 明确指定响应类型为"text",以获得文本响应
});
// 使用 Axios,成功的响应数据在 response 中
console.log("语音转文字完毕:", response);
onFinish(response.data);

注释掉的是原先的代码,由于返回结果取值是data.data导致取值是undefined。故使用后面的代码代替 。超时时间尽量长点,如果部署模型的服务器配置低则接口会响应较慢。

效果如下:

  • 12
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
Colab Whisper模型是一种先进的语音文字模型,它基于语音识别技术,利用深度学习算法将语音信号换为文本。 Colab Whisper模型的实现步骤如下: 1. 准备数据:首先,需要准备用于训练模型语音数据集。这些语音数据应该包含不同人的不同语音片段,涵盖不同的语言和口音。 2. 数据预处理:接下来,需要对语音数据进行预处理。这包括对语音信号进行采样和分割,去除噪音和不必要的部分,并将其换为模型可处理的格式,例如MFCC特征。 3. 构建模型:使用深度学习框架,如TensorFlow或PyTorch,构建Colab Whisper模型。该模型通常由多个卷积神经网络和循环神经网络层组成,用于提取语音信号的特征并进行序列建模。 4. 训练模型:使用准备好的语音数据集,通过反向传播算法和训练集的迭代,对模型进行训练。在每个迭代步骤中,模型会根据预测输出与实际标签之间的差异调整自身的权重和参数,以提高预测准确性。 5. 模型评估和优化:在每个训练周期结束后,使用验证集和测试集对模型进行评估。评估指标可以包括词错误率(WER)和字符错误率(CER)。通过这些指标,可以确定模型的性能,并对其进行改进。 6. 部署和应用:一旦模型训练完成并通过评估,就可以将其部署到实际应用中。通过输入语音信号,模型将对其进行换,并输出相应的文本结果。 总之,Colab Whisper模型通过深度学习算法实现了从语音到文本的换。通过准备数据、进行数据预处理、构建模型、训练模型、评估和优化以及部署应用等步骤,可以实现一个高效准确的语音文字系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值