日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/1/8 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于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,我們只需要解決如下問題

  • 讀取語音輸入
  • 語音轉文字
  • 通過ChatGPT溝通交流
  • 文字轉音頻
  • 音頻播放
  • 持續進行上述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,對應如下作用
    • praudio: 封裝portaudio,對外提供音頻錄制和音頻播放等接口
    • rocket: 封裝openai-api, 對外提供Chat接口、音頻轉文字等接口
    • ttsclient: 提供調用容器化運行的tensorflowtts的接口
    • Console: 終端交互層,用戶按提示進行操作,輸入信息和進行相關操作

    Tips:tensorflowtts 依賴較多,為方便完整,這里采用Docker部署

    四.流程設計

    接下來,我們設計一下交互流程

    簡單概括總體流程有三個步驟,一是輸入個人信息 二是錄音轉文字,三是發送消息,進行對話交互

    由于是通過終端訪問,主要監聽鍵盤事件,進行不同操作

    如 按W鍵會開始錄音,錄音過程中按Q停止錄音,待錄音翻譯完成后,按Ctrl+shift+enter發送消息

    五.開發細節

    編程語言: Go 1.6+

    SpokenAi使用依賴于portaudio,需要提前安裝好portaudio否則編譯無法通過

    PortAudio

    一.PortAudio下載地址:

  • Windows: http://www.portaudio.com/download.html
  • MacOS: brew install portaudio
  • Linux: apt-get install portaudio19-dev
  • Mac和Linux比較好安裝,Windows只能源碼編譯安裝,具體流程如下:

    PortAudio Window 安裝流程

  • 下載PortAudio源碼:http://www.portaudio.com/download.html
  • 安裝Visual Studio 2019和CMake
  • 將源代碼解壓縮到 C:\PortAudio 文件夾中
  • 打開 CMake,選擇 C:\PortAudio 作為源代碼文件夾,選擇一個輸出文件夾,點擊 Configure 按鈕
  • 在生成選項中,選擇 Visual Studio 16 2019,點擊 Finish 按鈕
  • 點擊 Generate 按鈕
  • 打開 Visual Studio,選擇 Open a project or solution,選擇 C:\PortAudio\build\portaudio.sln 文件,點擊打開
  • 在 Visual Studio 中,右鍵點擊 portaudio_static 項目,選擇 Build,等待編譯完成
  • 在 Visual Studio 中,右鍵點擊 portaudio_static 項目,選擇 Install,等待安裝完成
  • 在環境變量中添加 PortAudio 的路徑,例如 C:\Program Files (x86)\PortAudio\bin
  • 完成安裝
  • 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的核心代碼

  • 錄音程序
  • 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配置文件格式, 主要分為兩部分

  • openai配置,主要需要填寫自己的apikey和如果走代理則修改apihost地址。其他都是模型配置按需修改即可
  • 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上語音播放一定概率播放失敗
    • 編碼后端服務和客戶端程序

    總結

    以上是生活随笔為你收集整理的基于ChatGPT制作的一款英语口语练习应用SpokenAi的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。