天天看點

我做了個ChatGPT音箱,很能聊的那種

作者:嘉立創EDA

如果你的音箱連結了ChatGPT,會有怎樣的體驗?

我做了個ChatGPT音箱,很能聊的那種

今天推薦一個可以學習新技術的開源項目!軟硬體都開源了!幹貨滿滿!且不難!

工程描述

作者做了一個智能AI音箱。

我做了個ChatGPT音箱,很能聊的那種

主要就是将音箱連接配接ChatGPT,與之對話,充當語音助手。

還能借助ChatGPT函數調用功能,控制實體裝置。

版本說明

智能AI音箱有了兩個版本,以下是版本對比:

  • Linux版:功能上限高,獨立性更強。
  • ESP32版:小巧,成本低。
我做了個ChatGPT音箱,很能聊的那種

第一版可以通過軟體更新達到第二版的所有效果!

我做了個ChatGPT音箱,很能聊的那種

那麼問題就來了,要如何實作“智能對話”效果呢?

教程下滑可見!

兩個版本的教程小編都放在這裡了。

其中Linux版相對簡單,ESP32版價格更低,可以根據需求參考學習。

Linux版

章節導航:硬體部分(4張設計圖+設計原理)、代碼倉庫(3步搞定克隆)、修改WebUI(4步搞定UI修改)

一、硬體部分

我做了個ChatGPT音箱,很能聊的那種

音頻原理圖

我做了個ChatGPT音箱,很能聊的那種

接口原理圖

我做了個ChatGPT音箱,很能聊的那種

電源原理圖

我做了個ChatGPT音箱,很能聊的那種

PCB圖

PCB由一個基本的linux派和語言擴充模版組成。

荔枝派Zero的擴充版,理論上,通過修改PCB,可以支援絕大多數的派。

選擇荔枝派主要是因為其尺寸迷你,價格性能也不錯。

擴充子產品提供了基本的麥克風輸入和功放,同時提供锂電池充放電系統,達到便攜的目的。

二、代碼倉庫

Linux版代碼用的是免費的百度智能雲語音api。

開源代碼倉庫入口

https://oshwhub.com/kjpig/esp32-chat-meow

我做了個ChatGPT音箱,很能聊的那種
我做了個ChatGPT音箱,很能聊的那種

第一步

克隆本項目到OrangePi (使用Unbuntu20.04系統為例),并安裝依賴。

git clone https://github.com/meowkj/chat-meow.git && cd chat-meow           

安裝必備依賴:

apt-get update -y && RUN apt-get install -y python3-dev portaudio19-dev python3-pyaudio pip install Flask openai PyAudio PyYAML requests           

或者使用準備好的Docker鏡像(測試):

docker pull kjqaq/chatmeow           

第二步:擷取百度和openai的key

擷取百度雲KEY,需要有短文字識别,語音合成權限。

百度官方文檔位址:

  • 語音識别:http://ai.baidu.com/docs#/ASR-API/top
  • 語音合成:http://ai.baidu.com/docs#/TTS-API/top

openai apikey 檢視連結:

https://platform.openai.com/account/api-keys

根目錄下建立key.yml檔案,按照如下格式填入:

BAIDU_KEY:
  - "4E1BG9lTnlSeIf1NQFlrxxxx"           # 填寫網頁上申請的appkey
  - "544ca4657ba8002e3dea3ac2f5fxxxxx"   # 填寫網頁上申請的APP SECRET
  - "123456PYTHON"                       # 填寫一個CUID 隻是用來區分不同應用 随意填寫

OPENAI_API_KEY: "sk-xxxxxxxxxxxxxxxxxxxxx" # openai的apikey           

第三步:運作

在根目錄下使用自己的python環境

python3 mian.py           

使用docker提供的環境(測試)

docker run --itd -v .:/chat --privileged -itd kjqaq/chatmeow           

可能的問題

荔枝派Zero的音頻預設不會打開,需要像電腦調音量一樣打開音量。

三、修改WebUI(可選)

Linux版代碼目前帶了一個網頁UI可以調整一些參數,也能動态顯示GPT傳回的參數。

UI編譯好了,已經放在Flask伺服器中,如果要修改UI的話可以這樣做:

第一步:環境準備

我做了個ChatGPT音箱,很能聊的那種

安裝NodeJS,最新穩定版即可。

使用pnmp作為包管理器。

使用Vue3架構簡單快速建構了一下頁面。

第二步:克隆代碼倉庫

git clone https://github.com/ChatMeow/chat-meow-ui.git cd chat-meow-ui           

第三步:安裝依賴

pnpm install           

編譯并啟動支援熱重載的測試伺服器:

pnpm run serve           

第四步:編譯為生産準備的檔案

pnpm run build           

編譯好得到dist目錄裡面的檔案。

放入chat-mewo/meow/web,其中:

  • html檔案放入templates檔案夾中
  • js/css檔案放入static檔案夾中對應的js/css目錄中

ESP32版

章節導航:硬體部分(9張設計圖+設計原理)、ESP32版服務端代碼倉庫(Python版,4步搞定)、ESP32端代碼倉庫(ESP-IDF版,4步搞定)

一、硬體部分

我做了個ChatGPT音箱,很能聊的那種

ESP32原理圖

我做了個ChatGPT音箱,很能聊的那種

POWER原理圖

我做了個ChatGPT音箱,很能聊的那種

CODEC原理圖

我做了個ChatGPT音箱,很能聊的那種

ADC原理圖

我做了個ChatGPT音箱,很能聊的那種

MIC_PA原理圖

我做了個ChatGPT音箱,很能聊的那種

Others原理圖

我做了個ChatGPT音箱,很能聊的那種

PCB圖

ESP32語音闆子使用嘉立創SMT工藝,比我自己焊接的好太多了,可惜沒用上彩色絲印。

我做了個ChatGPT音箱,很能聊的那種

PCB實物圖&彩色絲印3D預覽圖

我做了個ChatGPT音箱,很能聊的那種

ESP32版結構流程圖

這個版本由于ESP32性能不足,需要一個服務端處理語音資料。故分為兩個部分:

一個是服務端,一個是邊緣裝置(ESP32)。

服務端需要完成計算量較大的語言語音轉文字和語言合成工序,同時也要和ChatGPT進行通訊。

邊緣裝置(ESP32)需要做的事情很簡單,捕捉語音傳給服務端,同時從服務端下載下傳合成好的語音再輸出。

目前PCB基本相容ESP32-LyraT-Mini開發版,代碼使用ADF庫的話隻需修改按鈕定義。

未來會設計更加迷你的PCB闆子。

二、ESP32版服務端代碼倉庫(Python)

代碼倉庫有兩個,一個服務端的代碼由Python驅動,一個是ESP32端由ESP-ADF驅動。

開源倉庫入口

https://oshwhub.com/kjpig/esp32-chat-meow

我做了個ChatGPT音箱,很能聊的那種
我做了個ChatGPT音箱,很能聊的那種
值得一提的是,pyopenjtalk庫似乎隻能在Python3.10上安裝成功,此庫隻影響日語生成。

第一步:環境安裝

克隆本項目:

git clone https://github.com/ChatMeow/chat-meow-vits.git cd chat-mewo-vits           

安裝環境(推薦使用虛拟環境):

pip install -r requirements.txt           

如果不存在配置檔案的話,第一次運作會生成配置檔案:

python server.py           

第二步:配置參數

需要先配置OpenAI登入資訊,在檔案openai.ini中。

配置access_token:

①這是實際用于身份驗證的内容喵,可以在https://chat.openai.com/api/auth/session找到

②2周後失效

③推薦的身份驗證方法

④如果您登入到https://chat.openai.com/,然後轉到https://chat.openai.com/api/auth/session,就可以找到

或者配置email(郵箱) password(密碼)字段:

隻需配置access_token(推薦)或者是email&password, 如果都配置了,優先使用access_token。

你需要準備一個Vits模型檔案,測試用模型可以在Release處下載下傳,僅供參考。

模型檔案(*.pth config.json)放入根目錄model(可改)檔案夾裡面,同時需要在config.ini中填入對應的檔案名稱。

第三步:啟動測試伺服器

python main.py           

第四步:開始測試伺服器

①開始運作後,将啟動預設端口8000的伺服器

②/upload接口支援POST方法,和ESP32配置項目Server URL to send data對應

③完成tts,vits後在static目錄生成out.wav檔案,和ESP32配置項目Server FILE URL to play voice對應

即将支援

  • 一個網頁界面來配置參數
  • 支援RockChinQ大佬的free-one-api接口

三、ESP32端代碼倉庫(ESP-IDF)

我做了個ChatGPT音箱,很能聊的那種

第一步:環境安裝

這裡使用的是 ESP-IDF v4.4,理論上支援ESP-IDF v5。

①參考ESP-IDF程式設計指南安裝ESP-IDF環境

②參考 樂鑫音頻應用開發指南安裝ESP-ADF環境(如果已配置好VSCode+ESP-IDF插件環境,在vscode指令面闆 -> ESP-IDF:安裝ESP-ADF 可以直接安裝ESP-ADF)

克隆代碼倉庫:

git clone https://github.com/ChatMeow/chat-meow-esp32.git cd chat-meow-esp32           

第二步:配置參數

需要先配置 Wi-Fi 連接配接資訊,通過運作 menuconfig > Example Configuration 填寫 Wi-Fi SSID 和Wi-Fi Password。

menuconfig > Example Configuration > (myssid) WiFi SSID > (myssid) WiFi Password           

其次需要選擇伺服器位址, ,預設情況下192.168.8.5:8000需要修改為自己的伺服器位址。

menuconfig > Example Configuration > Server URL to send data > Server FILE URL to play voice           

第三步:編譯和下載下傳

請先編譯版本并燒錄到開發闆上,然後運作 monitor 工具來檢視序列槽輸出(替換 PORT 為端口名稱):

idf.py build
idf.py -p PORT flash monitor           

第四步:開始

  • 開始運作後,将主動連接配接 Wi-Fi 熱點
  • 檢測是否按下REC(ESP32-LyraT-Mini)按鍵,如果使用喵闆則需要修改按鍵參數
  • 從麥克風讀取語音上傳到伺服器
  • 從伺服器播放伺服器生成好的語言
  • 循環-->>>>

即将支援

  • 靜默狀态識别自動識别是否講話,讀取語音開始循環
  • 通過ChatGPT函數調用功能傳回參數,接口對外輸出資訊,控制其他實體裝置
  • 更多具體的軟體說明可參考代碼倉庫裡的README内容

關于Vits

借助vits可以合成你喜歡角色的語音模型,測試模型使用原神納西妲語音訓練,僅供測試使用。

參考資料:

[1]https://oshwhub.com/kjpig/esp32-chat-meow

— 完 —

嘉立創EDA·頭條号

關注我,看一手優質開源項目

繼續閱讀