基于ChatGPT制作的一款英语口语练习应用SpokenAi

本文介绍了一款基于ChatGPT的英语口语练习应用SpokenAi,包括PortAudio的安装流程和核心代码,以及语音合成TextToSpeech的实现。同时提供了配置文件和部署运行示例。 --由ChatGPT总结生成

一.前言

Hi,大家好,我是Baird。最近几个月大火大热的ChatGPT已经发布到ChatGPT4版本了,我也一直在关注ChatGPT的发展,一直在思考能基于ChatGPT或着说openai的能力能做出点什么应用,解决一些问题。

💥在仔细看过openai的API文档后,发现openai不止提供了Chat的能力,还提供了如语音转文字,图片生成等能力。虽然没有ChatGPT那么火,但经过一番试用后,发现和ChatGPT效果一样让人惊艳。索性就直接来一个openai全家桶,通过openai的能力开发一款应用试试。

开发什么呢? 🤔

ChatGPT对英语的语言能力自然不必说,而我们国人当下英语学习面临的一大问题就是哑巴英语,市面上的提供的英语对话机器人和ChatGPT比起来差得不是一星半点。只能请老师一对一真人教学? 🤨 拜托,现在都2023年了,还需要花钱请口语老师么?

来造一款Ai口语练习应用解决这个问题 💯

ChatGPT4是由OpenAI开发的自然语言处理模型,采用了大规模无监督学习的方式进行训练,可用于生成文本、回答问题和聊天等任务。OpenAI是人工智能领域的一家公司,其API文档提供了多种功能,包括语音转文字、图片生成等。

二.需求清单

首选先列出我们需求清单,这个是一个简单版本的英语口语练习功能,先不打算造一个大app,我们只需要解决如下问题

  1. 读取语音输入
  2. 语音转文字
  3. 通过ChatGPT沟通交流
  4. 文字转音频
  5. 音频播放
  6. 持续进行上述1~5步骤

基于上述功能,第一期我打算先做一个终端版本的应用-SpokenAi,看看后续发展再考虑做一个Web或APP版本的程序 (实际上是缺人手缺时间 🤧)

三.系统架构

来,先设计一下我们SpokenAi的系统架构
在这里插入图片描述

  • portaudio: PortAudio是一个跨平台的音频I/O库,提供了简单的API,使得开发人员可以在不同的平台上以相似的方式访问音频硬件。它支持Windows、Mac OS X、Linux和其他主要的操作系统。PortAudio支持多种音频API,包括ASIO、Core Audio、DirectSound、MME / WDM、ALSA和OSS。PortAudio还包括一个流接口,允许开发人员以相同的方式使用不同的音频API和硬件。
  • openai-api: 提供了多种API服务,包括但不限于自然语言处理、语音转文字、文字转语音、图像生成等。在OpenAI的API文档中,用户可以申请API密钥,并使用API进行开发和测试。
  • tensorflowtts: TensorflowTTS 是一个基于 TensorFlow 的语音合成工具包,它包含了多种语音合成模型和前处理工具,并且支持多种语音合成任务,例如有人声合成(Vocoder)、语音转换、语音增强等。它可以帮助开发者快速搭建语音合成模型,定制自己的语音合成系统。
  • Docker: Docker是一种容器化技术,可以将应用程序及其依赖项打包在一个容器中,以便在任何地方运行。容器是一种轻量级的虚拟化技术,可以提供与传统虚拟机相似的隔离性和安全性,但占用的资源更少。Docker还提供了一套工具和平台,使得容器的构建、部署和管理变得更加容易。
  • SpokenAi:整体应用层,其中有三个库分别是praudio、rocket、ttsclient,对应如下作用
    1. praudio: 封装portaudio,对外提供音频录制和音频播放等接口
    2. rocket: 封装openai-api, 对外提供Chat接口、音频转文字等接口
    3. ttsclient: 提供调用容器化运行的tensorflowtts的接口
  • Console: 终端交互层,用户按提示进行操作,输入信息和进行相关操作

Tips:tensorflowtts 依赖较多,为方便完整,这里采用Docker部署

四.流程设计

接下来,我们设计一下交互流程

在这里插入图片描述

简单概括总体流程有三个步骤,一是输入个人信息 二是录音转文字,三是发送消息,进行对话交互

由于是通过终端访问,主要监听键盘事件,进行不同操作

如 按W键会开始录音,录音过程中按Q停止录音,待录音翻译完成后,按Ctrl+shift+enter发送消息

五.开发细节

编程语言: Go 1.6+

SpokenAi使用依赖于portaudio,需要提前安装好portaudio否则编译无法通过

PortAudio

一.PortAudio下载地址:

  1. Windows: http://www.portaudio.com/download.html
  2. MacOS: brew install portaudio
  3. Linux: apt-get install portaudio19-dev

Mac和Linux比较好安装,Windows只能源码编译安装,具体流程如下:

PortAudio Window 安装流程

  1. 下载PortAudio源码:http://www.portaudio.com/download.html
  2. 安装Visual Studio 2019和CMake
  3. 将源代码解压缩到 C:\PortAudio 文件夹中
  4. 打开 CMake,选择 C:\PortAudio 作为源代码文件夹,选择一个输出文件夹,点击 Configure 按钮
  5. 在生成选项中,选择 Visual Studio 16 2019,点击 Finish 按钮
  6. 点击 Generate 按钮
  7. 打开 Visual Studio,选择 Open a project or solution,选择 C:\PortAudio\build\portaudio.sln 文件,点击打开
  8. 在 Visual Studio 中,右键点击 portaudio_static 项目,选择 Build,等待编译完成
  9. 在 Visual Studio 中,右键点击 portaudio_static 项目,选择 Install,等待安装完成
  10. 在环境变量中添加 PortAudio 的路径,例如 C:\Program Files (x86)\PortAudio\bin
  11. 完成安装

PortAudio Window DLLs 安装流程

除此之外,可以直接选择网上编译好的库,可以从这里https://github.com/spatialaudio/portaudio-binaries下载。

在后续编译链接过程中,还是需要安装gcc, 推荐安装MinGW-w64。

安装完成MinGW后,将下载PortAudio库文件libportaudio-x86_64-w64-mingw32.static.dll 更名成portaudio.dll,放到MinGW ld能搜索到的库路径。

将PortAudio库文件libportaudio-x86_64-w64-mingw32.static.dll 放到Window System32目录下,在运行时程序需要找到该动态库

调用PortAudio的核心代码

  1. 录音程序
func RecordAndSaveWithContext(ctx context.Context, filename string) error {portaudio.Initialize()defer portaudio.Terminate()done := make(chan struct{})// 初始化音频录制recorder, err := NewAudioRecorder()if err != nil {return fmt.Errorf("failed to initialize audio recorder: %v", err)}defer recorder.Stop()// 初始化进度条progressBar := pb.Full.Start(maxRecordSize)progressBar.SetRefreshRate(time.Millisecond * 200) // 设置刷新率progressBar.Set(pb.Bytes, true)                    // 显示录制音频的数据量// 记录开始时间startTime := time.Now()// 创建Context,用于取消录音ctxnew, cancel := context.WithCancel(ctx)// 开启协程进行录音samples := make([]int32, 0)go func() {defer close(done)for {select {case <-ctxnew.Done():returncase data := <-recorder.dataCh:// 将音频数据追加到samplessamples = append(samples, data...)// 当达到最长录音时间时,取消录音if time.Since(startTime) >= maxRecordDuration {cancel()break}// 更新录制音频的数据量dataSize := int64(len(samples)) * int64(reflect.TypeOf(samples).Elem().Size())progressBar.Add(int(dataSize)) // 更新进度条progressBar.SetCurrent(dataSize)}}}()// 等待录音完成或接收到中断信号<-doneprogressBar.Finish()// 保存音频数据到WAV文件if err := saveToWavFile(filename, int32SliceToIntSlice(samples)); err != nil {return fmt.Errorf("failed to save audio to file: %v", err)}return nil
}

主要实现功能有:

  • 支持开始录音和停止录音
  • 最长录制60s的音频,到时取消

2.播放音频

// PlayWavFile 播放指定的WAV文件
func PlayWavFile(filename string) error {// 打开WAV文件f, err := os.Open(filename)if err != nil {return fmt.Errorf("failed to open WAV file: %v", err)}defer f.Close()// 解码WAV文件s, format, err := wav.Decode(f)if err != nil {return fmt.Errorf("failed to decode WAV file: %v", err)}defer s.Close()// 初始化扬声器err = speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10))if err != nil {return fmt.Errorf("failed to initialize speaker: %v", err)}// 播放音频done := make(chan struct{})speaker.Play(beep.Seq(s, beep.Callback(func() {close(done)})))// 等待音频播放完成<-donereturn nil
}

语音合成TextToSpeech

目前比较通用的TextToSpeech(TTS)方案有以下几种:

  • Google Cloud Text-to-Speech
  • Amazon Polly
  • Microsoft Azure Text-to-Speech
  • IBM Watson Text to Speech
  • Mozilla TTS
  • Tacotron 2
  • WaveNet
  • TensorFlowTTS

有简单调用云服务的,也有自己安装环境的。调用云服务需要注册账号,按量收费,比较费钱 🙂。决定自己部署,采用TensorFlowTTS,通过构建Docker容器运行该服务。

Dockerfile如下,第一次构建速度会比较慢。

FROM tensorflow/tensorflow:2.6.0# 安装必要的依赖
RUN apt-get update  &&\apt-get install -y libsndfile1# 安装TensorFlowTTS
RUN pip install -i https://mirrors.aliyun.com/pypi/simple/ TensorFlowTTS flask# 安装
RUN apt-get install -y git
RUN pip install git+https://github.com/repodiac/german_transliterate.git#egg=german_transliterate
RUN pip install --upgrade numpy numba# 安装 
ADD tts-server-api.py /app/tts-server-api.py# 运行REST API服务器
CMD python /app/tts-server-api.py --host 0.0.0.0 --port 5000

如果不想自己自定义,可以直接下载我构建好的服务

docker pull ptonlix/tensorflowtts:1.0.9
docker run -itd -p 5000:5000 --name spokenai-tts ptonlix/tensorflowtts:1.0.9

tts-server-api.py 是启动Flask的API服务的脚本,对外提供/api/tts 文字转语音接口

@app.route('/api/tts', methods=['POST'])
def tts():data = request.get_json()text = data['text']# fastspeech inferenceinput_ids = processor.text_to_sequence(text)mel_before, mel_after, duration_outputs, _, _ = fastspeech2.inference(input_ids=tf.expand_dims(tf.convert_to_tensor(input_ids, dtype=tf.int32), 0),speaker_ids=tf.convert_to_tensor([0], dtype=tf.int32),speed_ratios=tf.convert_to_tensor([1.0], dtype=tf.float32),f0_ratios=tf.convert_to_tensor([1.0], dtype=tf.float32),energy_ratios=tf.convert_to_tensor([1.0], dtype=tf.float32),)# melgan inferenceaudio_before = mb_melgan.inference(mel_before)[0, :, 0]audio_after = mb_melgan.inference(mel_after)[0, :, 0]# save to file# Convert audio data to byte streambuffer = io.BytesIO()sf.write(buffer, audio_after, 22050, format='WAV', subtype='PCM_16')audio_bytes = buffer.getvalue()# Return audio data as a response with MIME type audio/wavreturn Response(audio_bytes, mimetype='audio/wav')

解决完上述两个关键问题,剩下就是业务代码的编写

配置文件

[openai][openai.base]apikey = ""apihost = "https://api.openai.com/v1" [openai.chat]chatmodel =  "gpt-3.5-turbo"chatmaxtoken = 2048chattemperature = 0.7chattopp = 1[openai.audio]audiomodel = "whisper-1"[file][file.history]path = "./data/history/"[file.audio][file.audio.record]path = "./data/audio/record/"[file.audio.play]path = "./data/audio/play/"enable =  0ttshost = "http://127.0.0.1:5000"

采用toml配置文件格式, 主要分为两部分

  1. openai配置,主要需要填写自己的apikey和如果走代理则修改apihost地址。其他都是模型配置按需修改即可
  2. file配置,由于是终端版本,采用文件存储的形式较为方便
    • history为聊天上下文存储
    • audio为音频存储
      • record为录音文件存储目录
      • play为语言合成文件存储目录
      • enable 可以选为是否开启语音合成,默认不开启,开启需要运行tensorflowtts。
      • ttshost 为tts api服务地址

六.部署运行

🚀项目地址:https://github.com/ptonlix/spokenai

🌟欢迎Star 、PR 、 Issue 、交流

编译运行

安装portaudio, 参考上节PortAudio流程

# 下载源码
git clone https://github.com/ptonlix/spokenai.git
cd spokenai# 修改配置文件
edit fat_config.toml# 编译
go build# 查看命令
./spokenai -h# 运行
./spokenai

运行示例

windows启动:

在这里插入图片描述
Mac启动:
在这里插入图片描述
开始对话:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

后续计划

  • 寻找志同道合的小伙伴,有意向一起制作一款Ai应用的请联系我!!!
  • 修复Bug,目前发现mac上语音播放一定概率播放失败
  • 编码后端服务和客户端程序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/6773.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT专业应用:生成填空题

正文共 973 字&#xff0c;阅读大约需要 3 分钟 教育工作者必备技巧&#xff0c;您将在3分钟后获得以下超能力&#xff1a; 生成填空题 Beezy评级 &#xff1a;B级 *经过简单的寻找&#xff0c; 大部分人能立刻掌握。主要节省时间。 推荐人 | nanako 编辑者 | Linda ●此图片…

ChatGPT实战:生成演讲稿

当众发言&#xff08;演讲&#xff09;是一种传达信息、观点和情感的重要方式。通过演讲&#xff0c;人们可以在公共场合表达自己的观点&#xff0c;向观众传递自己的知识和经验&#xff0c;激发听众的思考和行动。无论是商务演讲、学术讲座还是政治演说&#xff0c;演讲稿的写…

ChatGPT自动化提高工作效率: 2分钟快速生成思维导图

一、简要说明 ChatGPT不止是一个聊天机器人&#xff0c;更是一个自然语言处理、文本内容生成模型&#xff0c;它可以理解语言规则&#xff0c;不仅仅是给你输出已有的知识内容&#xff0c;还会给到你一些创意点子&#xff1b;所以我们应该学会如何使用它&#xff0c;让它更好的…

【ChatGPT】ChatGPT自动生成思维导图

参考视频&#xff1a;https://edu.csdn.net/learn/38346/613917 应用场景&#xff1a;自学&#xff0c;“研一学生如何学习机器学习”的思维导图 问&#xff1a;写一个“研一学生如何学习机器学习”的思维导图内容&#xff0c;以markdown代码块格式输出 # 研一学生如何学习…

成立 4 个星期获得 1.13 亿美元种子轮融资,3 个 30岁+小伙草创「开源版 OpenAI」!...

整理 | 屠敏 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; AI 这条赛道&#xff0c;随着时间的推移&#xff0c;加入的新玩家越来越多&#xff0c;投入的资本也越来高。而这些新玩家往往都带有一个目标&#xff1a;与 OpenAI 一较高下。 这不&#xff0c;又有一…

联用多个插件可以让 GPT-4 的能力更加强大,实现更加复杂的操作

&#x1f680; 联用多个插件可以让 GPT-4 的能力更加强大&#xff0c;实现更加复杂的操作。 联用多个插件可以让 GPT-4 的能力更加强大&#xff0c;实现更加复杂的操作。 不过&#xff0c;使用插件和联网功能也有一些要注意的地方。 首先是安全性问题&#xff0c;特别是像购…

Prompt本质解密及Evaluation实战与源码解析(二)

9.4 Evaluation for Agents源码解析 如图9-4所示,转过来,我们再看一下LangChain框架代理评估(Evaluation for Agents)的源代码。 图9- 4 LangChain的evaluation agents目录 在trajectory_eval_prompt.py文件里面,写了一个非常经典的提示词。 1. """提示…

开发了一个Java库的Google Bard API,可以自动化与AI对话了

开发了一个Java库的Google Bard API&#xff0c;可以自动化与AI对话了 Google Bard是Google提供的还在实验阶段的人工智能对话服务。这明显是对标ChatGPT来的&#xff0c;它可以提供更实时的答案&#xff0c;会基于Google强大的网页数据。 为了更方便的使用并实现自动化&…

【产业互联网周报】微软官宣把聊天机器人植入Office;任正非:4月份华为自研MetaERP将面世;...

关注ITValue&#xff0c;看企业级最新鲜、最价值报道&#xff01; ChatGPT之父&#xff1a;监管机构应参与技术测试&#xff0c;减少AI对人类的威胁&#xff1b;李开复宣布亲自组建中国版ChatGPT公司&#xff0c;资金、算力将陆续到位&#xff1b;金蝶2022年亏损扩大至3.89亿元…

关于GTP-4,这是14个被忽略的惊人细节!

来源&#xff1a;华尔街见闻&#xff08;id&#xff1a;wallstreetcn&#xff09; 3月14日&#xff0c;OpenAI发布了GPT-4。向科技界再次扔下了一枚“核弹”。 根据OpenAI的演示&#xff0c;我们知道了GPT-4拥有着比GPT-3.5更强大的力量&#xff1a;总结文章、写代码、报税、写…

“写作业神器”ChatGPT究竟有多厉害?

人工智能研究实验室OpenAI推出了新一代语言模型ChatGPT&#xff0c;它能够模拟人类的语言行为&#xff0c;与用户进行自然的交互。虽然从名字上不难看出&#xff0c;ChatGPT对外宣称是目前最先进的聊天机器人之一&#xff0c;但它能做到的事情远远超出了聊天本身。作为一个 AI …

彻底了解ChatGPT的工作原理

作者&#xff1a;史蒂芬沃尔弗拉姆&#xff0c;计算机科学家 转自&#xff1a;AI研究局 作者&#xff1a;史蒂芬沃尔弗拉姆&#xff08;Stephen Wolfram&#xff09;英、美籍 计算机科学家&#xff0c; 物理学家。他是 Mathematica 的首席设计师&#xff0c;《一种新科学》一书…

【文末送18本ChatGPT扫盲书】从一路高歌到遭多国“封杀”,ChatGPT未来将是什么样子?

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。&#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通…

谁能真正替代你?AI辅助编码工具深度对比(chatGPT/Copilot/Cursor/New Bing)

写在开头 这几个月AI相关新闻的火爆程度大家都已经看见了&#xff0c;作为一个被裹挟在AI时代浪潮中的程序员&#xff0c;在这几个月里我也是异常兴奋和焦虑。甚至都兴奋的不想拖更了。不仅仅兴奋于AI对于我们生产力的全面提升&#xff0c;也焦虑于Copilot等AI辅助编码工具&am…

从ChatGPT看人工智能

ChatGPT是2022年出来的一个对话型人工智能&#xff0c;ChatGPT就是这样一种可以和人类用自然语言去交流的人工智能&#xff0c;一上线就引发了恐慌&#xff0c;最厉害的地方还是它能够用人类的语言来进行交流&#xff0c;不管是中文、英文、日文都可以&#xff0c;ChatGPT有可能…

ChatGPT开始凉了?数据显示确实进入了瓶颈期!

你还在用ChatGPT吗&#xff1f; 在全球掀起AI热潮的ChatGPT&#xff0c;似乎进入了瓶颈期。 首先是关于ChatGPT的使用率&#xff0c;有不利的数据出现。6月初&#xff0c;摩根士丹利发布的一项调查显示&#xff0c;只有19%的受访者表示他们之前使用过ChatGPT&#xff0c;只有…

一个用了再也回不去的插件,内置chatgpt3.5可免费使用

目录 一、插件介绍 1.主页 2.功能点 1.ChatAI 2.桌面快捷图标 ​3.小游戏 二、安装方法 一、插件介绍 1.主页 这种风格相信是很多人都喜爱的一种&#xff0c;大家还可以更换壁纸等让自己的主页看起来更炫酷&#xff01; 2.功能点 1.ChatAI 大家最关心的chatAI,可以自动生…

ChatGPT4.0绘画国内镜像版,Ai绘画国内版上线,请大家欣赏杰作!

OK&#xff0c;以上就是使用新智能Ai绘画出来的效果&#xff0c;非常真实&#xff0c;非常漂亮迷人&#xff01; 今天就教到这里&#xff0c;请大家收藏和学习吧&#xff0c;谢谢关注&#xff01;

如何获取 openai ChatGPT的key?(图文教学)

我直接对他进行询问 Q&#xff1a;获取chatptp的key A&#xff1a;对不起&#xff0c;作为ChatGPT&#xff0c;我不具有API密钥或访问凭据。我只是一个已经被训练好的自然语言处理模型&#xff0c;通过输入文本来生成回复。您可以在OpenAI的网站上了解有关他们的API和访问凭据…

ChatGPT:招聘流程中的虚拟招聘专家

在当今竞争激烈的人才市场中&#xff0c;企业需要拥有高效、智能的招聘流程来吸引和选拔最佳人才。而随着人工智能技术的飞速发展&#xff0c;ChatGPT成为了招聘流程中的一位虚拟招聘专家&#xff0c;为企业提供了前所未有的便利和效率。本文将探讨ChatGPT在招聘流程中的应用&a…